올거나이즈코리아
경력근거: 개별 고객 환경에 맞춘 관리 방안을 제시하고 이를 전담하여 운영하며
올거나이즈는 산업 특화 온프레미스 LLM 모델부터 Agent RAG, 노코드 앱 빌더까지를 한 제품군으로 묶어 한국·일본·미국 300개 이상 엔터프라이즈에 넣고 있고, 고객사가 KB증권·하나은행·LH공사·대구시청처럼 망을 스스로 닫아 두는 곳입니다. 공고가 정의한 FDE(Infra) 는 그 설치본을 고객 환경에 맞춰 얹고 전담 운영하며 장애 대응과 보안 정책과 배포 문서를 같이 맡는 자리라, 설치본 하나하나의 지금 구성을 인계 시점과 견주는 일이 곧 그 자리의 하루 업무입니다. 자격요건에 적힌 kubernetes·helm chart 디버깅과 제한된 네트워크 환경 트러블슈팅이 이 도구의 파서와 판정 규칙을 그대로 떠받칩니다. 다만 이 포트폴리오가 보여주는 것은 배포 구성을 값으로 견주고 근거를 남기는 기술이고, 금융권 정보보호 심사나 공공기관 보안 인증 실무의 깊이는 주장하지 않습니다. 모르는 깊이는 면접에서 모른다고 말하는 편이 낫습니다.
공고는 FDE(SW) 가 현장 인사이트를 프로덕트팀에 넘기는 자리라면 FDE(Infra) 는 제품을 고객사 on-prem 에 얹고 전담 운영하는 자리라고 적습니다. 같은 제품을 두고 방향이 반대인 직군이라 지원자가 어느 쪽 일을 아는지가 서류에서 갈립니다.
한국·일본·미국에서 300개 이상 엔터프라이즈 고객에게 서비스한다고 밝히고, 대표 고객사로 KB증권·하나은행·대구시청·SMBC 를 나열합니다. 설치본이 이 규모로 늘면 한 곳씩 열어 보는 방식이 먼저 한계에 닿습니다.
주요업무에 장애 대응과 예방용 모니터링 구축, 배포 환경 보안 정책 구현, 배포 매뉴얼·기술 문서 작성이 나란히 적혀 있습니다. 고친 내용을 문서로 남겨 고객과 인프라팀에 주기적으로 공유하는 일까지 같은 자리의 업무입니다.
고객사 담당자가 회신한 상태 덤프와 설치 때 넘긴 인계서, 제품 지원 목록 세 파일을 명령 한 줄에 넣으면 점검 항목마다 판정과 근거 값을 붙여 회신용 운영 리포트 파일로 적습니다. 판정은 인계 값과 자원 하한과 지원 목록을 견주는 규칙이 정하고, 클로드는 판정이 끝난 항목의 값 두 개와 절차 문서 번호를 담당자가 그대로 회신할 문장으로 옮깁니다.
300개 넘는 고객사의 알리 온프렘 설치본을 전담 운영하는 인프라 엔지니어 — 설치본이 고객 망 안에 있어 지표가 밖으로 나오지 않고, 담당자가 보내 준 상태 덤프 한 벌이 지금 그 설치본에 대해 아는 전부다
설치본마다 무엇이 달라졌는지 모르는 이유는 접근이 막혀서가 아니라 인계 시점의 구성이 문서로만 남아 견줄 형태가 아니기 때문입니다. 덤프에서 뽑은 지금 값을 인계 값과 자원 하한 옆에 놓고 계산하면 다음 배포 전에 되돌릴 항목과 그대로 둬도 되는 항목이 갈라집니다.
고객사 세 곳의 덤프 파일을 명령 한 줄로 돌려 점검 항목마다 판정과 근거 값과 대응 절차 번호를 적은 마크다운 리포트를 냅니다. 덤프는 담당자가 회신한 파일을 받는 것으로 시작하고, 클러스터에서 상태를 직접 뽑는 수집 스크립트는 2주차로 미룹니다.
kind 로 올린 로컬 클러스터에 헬름 차트로 비슷한 구성의 스택을 배포하고, 수집 스크립트가 뽑은 덤프를 그대로 넣어 리포트가 같은 판정을 내는지 맞춰 봅니다. 정답을 붙인 점검 60건으로 판정 일치도를 재는 러너도 함께 돕니다.
고객사 묶음을 한 번에 돌려 지난 회차 리포트와 이어 붙이고 이번에 새로 생긴 항목과 되돌아온 항목을 나눠 적습니다. 지원 목록을 제품 버전별로 갈아 끼워 2.8 기준 판정과 2.9 기준 판정을 나란히 냅니다.
인프라 엔지니어가 고객사 세 곳의 덤프를 명령 한 줄에 넣으면 점검 항목 62개를 판정별로 적은 운영 리포트 파일이 나옵니다.
설정 값이 비어 있거나 컴포넌트 이름이 지원 목록에 없는 덤프 20종을 넣어도 리포트 형식이 깨지지 않고, 값이 없어 견줄 수 없는 항목은 근거 칸을 비운 채 남습니다.
kind 로 띄운 클러스터에서 수집 스크립트가 뽑은 덤프를 넣어도 손으로 만든 덤프와 같은 판정이 나오는 것을 나란히 보여줍니다.
정답을 붙인 점검 60건으로 판정 일치율을 냅니다. 단, 덤프와 정답을 모두 작성자가 만든 합성 기준이라 성능 검증이 아니라 데모 조건 동작입니다.
위 수치는 더미데이터 자가채점이며 실제 판정 정확도는 올거나이즈 고객사의 실제 설치본 덤프와 인계 문서가 있어야 측정됩니다. 이 포트폴리오는 그 검증을 바로 돌릴 수 있는 상태로 만듭니다.
수치는 합성 데이터 자가채점이라 성능 증명이 아닙니다. 면접에서는 데모 동작과 실검증 준비 상태로 솔직히 설명합니다.
정답을 작성자가 만들었으니 잘 맞는 것이 당연합니다. 결측·악성·경계 케이스와 자원 값이 0으로 내려간 극단 사례를 더미에 일부러 섞어 쉬운 문제만 푸는 함정을 피합니다.
인계서와 다르다는 사실이 곧 잘못이라는 뜻은 아닙니다. 고객사 담당자가 승인한 변경도 섞여 있으므로 판정을 결론으로 읽지 않게 근거 값을 항상 같이 냅니다.
실제 설치본은 고객사마다 컴포넌트 이름과 값 단위가 달라 파서 규칙이 늘어납니다. 규칙을 코드에서 빼 지원 목록 파일로 옮기는 일은 도입 단계 과제로 나눕니다.
고객 망 안에서 도구를 직접 돌리는 것은 회사 계정과 반입 절차가 있어야 하므로 이 포트폴리오의 범위 밖입니다. 여기서는 담당자가 회신한 덤프 파일을 받아 밖에서 견주는 데까지 다룹니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
고객사 담당자가 회신한 상태 덤프에서 뽑은 지금 구성입니다. 판정의 한쪽 축이며 노드와 GPU 배정이 0으로 내려간 극단 값을 포함합니다.
| dump_id | customer_id | component | setting_key | current_value | node_count | gpu_count | collected_at |
|---|---|---|---|---|---|---|---|
| DMP-2026-09-01 | CUST-1042 | rag-indexer | replicas | 1 | 3 | 0 | 2026-09-02 |
| DMP-2026-09-02 | CUST-1042 | llm-serving | gpu_type | A100-40G | 3 | 4 | 2026-09-02 |
| DMP-2026-09-03 | CUST-1042 | app-builder | session_timeout_min | 480 | 3 | 0 | 2026-09-02 |
| DMP-2026-09-04 | CUST-1042 | gateway | ingress_class | nginx-legacy | 3 | 0 | 2026-09-02 |
| DMP-2026-09-05 | CUST-1042 | vector-store | storage_class | ceph-rbd | 3 | 0 | 2026-09-02 |
아래 JSON Schema 에 맞는 상태 덤프 행을 더 만들어 주세요. {"type":"object","properties":{"dump_id":{"type":"string"},"customer_id":{"type":"string"},"component":{"type":"string"},"setting_key":{"type":"string"},"current_value":{"type":["string","null"]},"node_count":{"type":"integer"},"gpu_count":{"type":"integer"},"collected_at":{"type":"string"}},"required":["dump_id","customer_id","component","setting_key","node_count","gpu_count","collected_at"]} 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) gpu_count 와 node_count 가 0 으로 내려간 극단 행, (2) current_value 가 null 이라 견줄 값이 없는 행, (3) 지원 목록에 없는 컴포넌트 이름과 오래된 버전 문자열, (4) 같은 고객사에서 같은 설정을 컴포넌트만 다르게 쓴 행. 생성한 행은 반드시 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"dump_id":{"type":"string"},"customer_id":{"type":"string"},"component":{"type":"string"},"setting_key":{"type":"string"},"current_value":{"type":["string","null"]},"node_count":{"type":"integer"},"gpu_count":{"type":"integer"},"collected_at":{"type":"string"}},"required":["dump_id","customer_id","component","setting_key","node_count","gpu_count","collected_at"]}설치를 마치고 고객사에 넘긴 인계서에서 뽑은 기준 값입니다. 설정 값과 자원 하한을 담고 GPU 하한이 비어 있는 항목을 포함합니다.
| customer_id | setting_key | handover_value | min_node_count | min_gpu_count | handover_date |
|---|---|---|---|---|---|
| CUST-1042 | replicas | 3 | 5 | — | 2026-03-11 |
| CUST-1042 | gpu_type | A100-40G | 5 | 4 | 2026-03-11 |
| CUST-1042 | session_timeout_min | 30 | 2 | 0 | 2026-03-11 |
| CUST-1042 | ingress_class | nginx | 2 | 0 | 2026-03-11 |
| CUST-1042 | storage_class | ceph-rbd | 2 | 0 | 2026-03-11 |
아래 JSON Schema 에 맞는 인계 기준 행을 더 만들어 주세요. {"type":"object","properties":{"customer_id":{"type":"string"},"setting_key":{"type":"string"},"handover_value":{"type":"string"},"min_node_count":{"type":"integer"},"min_gpu_count":{"type":["integer","null"]},"handover_date":{"type":"string"}},"required":["customer_id","setting_key","handover_value","min_node_count","handover_date"]} 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) GPU 를 쓰지 않는 컴포넌트라 min_gpu_count 가 null 인 행, (2) min_node_count 가 1 로 내려간 소규모 설치본, (3) handover_value 가 숫자 문자열과 이름 문자열로 섞인 행, (4) 같은 고객사에 인계 날짜가 두 번 찍힌 재설치 행. 생성한 행은 반드시 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"customer_id":{"type":"string"},"setting_key":{"type":"string"},"handover_value":{"type":"string"},"min_node_count":{"type":"integer"},"min_gpu_count":{"type":["integer","null"]},"handover_date":{"type":"string"}},"required":["customer_id","setting_key","handover_value","min_node_count","handover_date"]}제품 버전이 지원하는 값 목록과 보안 기준을 담은 표입니다. 보안 기준이 정해지지 않은 설정은 기준 칸이 비어 있습니다.
| setting_key | allowed_values | security_baseline | runbook_doc | product_version |
|---|---|---|---|---|
| replicas | ["1","2","3","4","5","6"] | — | — | 2.8.3 |
| gpu_type | ["A100-40G","A100-80G","L40S"] | — | — | 2.8.3 |
| session_timeout_min | ["15","30","60","120","480"] | <=60 | SEC-014 | 2.8.3 |
| ingress_class | ["nginx","istio","traefik"] | — | — | 2.8.3 |
| storage_class | ["ceph-rbd","longhorn","nfs"] | — | — | 2.8.3 |
아래 JSON Schema 에 맞는 지원 목록 행을 더 만들어 주세요. {"type":"object","properties":{"setting_key":{"type":"string"},"allowed_values":{"type":"array","items":{"type":"string"}},"security_baseline":{"type":["string","null"]},"runbook_doc":{"type":["string","null"]},"product_version":{"type":"string"}},"required":["setting_key","allowed_values","product_version"]} 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) 보안 기준이 정해지지 않아 security_baseline 과 runbook_doc 이 null 인 설정, (2) 허용 값이 한 개뿐이라 사실상 고정인 설정, (3) 2.8 과 2.9 에서 허용 값이 달라진 설정, (4) 기준을 부등호 문자열로 적어 숫자 비교가 필요한 설정. 생성한 행은 반드시 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"setting_key":{"type":"string"},"allowed_values":{"type":"array","items":{"type":"string"}},"security_baseline":{"type":["string","null"]},"runbook_doc":{"type":["string","null"]},"product_version":{"type":"string"}},"required":["setting_key","allowed_values","product_version"]}| Python | 덤프 파서와 판정 규칙과 리포트 생성이 모두 여기 있습니다. 표준 라이브러리만으로 tar 를 풀고 텍스트를 훑어 고객사 서버에서도 의존성 없이 돕니다. |
| Kubernetes | 덤프에 담긴 kubectl 출력에서 컴포넌트와 배정 노드·GPU 수를 읽어 점검 항목으로 세웁니다. 2주차에는 kind 로 띄운 클러스터에 같은 스택을 올려 수집 스크립트를 붙입니다. |
| Helm chart | 인계 시점 구성을 values 파일로 두고 지금 values 와 견주는 자리입니다. 지원 목록도 차트 버전별로 나눠 두어 제품 버전이 오르면 파일만 갈아 끼웁니다. |
| Linux | 덤프 tar 를 풀고 컴포넌트 로그와 설정 파일을 훑는 수집 스크립트가 도는 자리입니다. 파일 권한과 용량 때문에 걸리는 항목도 여기서 잡습니다. |
| LLM | 판정이 끝난 항목의 값 두 개와 절차 문서 번호를 담당자 회신 문장으로 옮깁니다. 값이 근거 칸과 다르면 규칙이 만든 기본 문장으로 되돌립니다. |
| RAG | 3주차에 대응 절차 문서가 늘어나면 문서 번호로 해당 절 문단을 찾아 리포트 아래에 붙입니다. |
✓ pass → 그대로 멈춰도 완결입니다. 더 키우려면 직접 띄운 클러스터에서 덤프를 뽑아 같은 판정이 나오는지 맞춰 보는 단계로 넘어갑니다.
✓ pass → 여기까지도 완결입니다. 더 키우려면 고객사 묶음 실행과 지난 회차 대비 변화 표시로 확장합니다.
점검 항목 하나의 판정과 근거 값을 남기는 형식입니다. 판정은 규칙이 정하고 회신 문장만 모델이 씁니다.
{"type":"object","properties":{"check_id":{"type":"string"},"customer_id":{"type":"string"},"dump_id":{"type":"string"},"setting_key":{"type":"string"},"verdict":{"type":"string","enum":["인계 구성 그대로","설정값 임의 변경","자원 배정 축소","보안 설정 완화","지원 밖 구성"]},"node_gap":{"type":["integer","null"],"description":"min_node_count 에서 node_count 를 뺀 값. 자원 판정이 아니면 null 입니다"},"runbook_doc":{"type":["string","null"]},"evidence":{"type":"array","items":{"type":"object","properties":{"table":{"type":"string","enum":["cluster_dump","handover_record","support_matrix"]},"field":{"type":"string"},"agg":{"type":["string","null"]},"value":{"type":["string","integer","null"]}},"required":["table","field","value"]}},"summary":{"type":"string"},"hedge":{"type":["string","null"]}},"required":["check_id","customer_id","dump_id","setting_key","verdict","evidence","summary"]}[
{
"check_id": "CHK-0005",
"customer_id": "CUST-1042",
"dump_id": "DMP-2026-09-05",
"setting_key": "storage_class",
"verdict": "인계 구성 그대로",
"node_gap": null,
"runbook_doc": null,
"evidence": [
{
"table": "cluster_dump",
"field": "current_value",
"value": "ceph-rbd"
},
{
"table": "handover_record",
"field": "handover_value",
"value": "ceph-rbd"
},
{
"table": "cluster_dump",
"field": "node_count",
"value": 3
},
{
"table": "handover_record",
"field": "min_node_count",
"value": 2
}
],
"summary": "저장소 종류가 인계 값 그대로이고 노드도 하한 위입니다.",
"hedge": null
},
{
"check_id": "CHK-0010",
"customer_id": "CUST-3310",
"dump_id": "DMP-2026-09-10",
"setting_key": "ingress_class",
"verdict": "인계 구성 그대로",
"node_gap": null,
"runbook_doc": null,
"evidence": [
{
"table": "cluster_dump",
"field": "current_value",
"value": "istio"
},
{
"table": "handover_record",
"field": "handover_value",
"value": "istio"
},
{
"table": "support_matrix",
"field": "product_version",
"value": "2.8.3"
}
],
"summary": "입구 종류가 인계 값과 같고 2.8.3 지원 목록 안에 있습니다.",
"hedge": null
},
{
"check_id": "CHK-0001",
"customer_id": "CUST-1042",
"dump_id": "DMP-2026-09-01",
"setting_key": "replicas",
"verdict": "자원 배정 축소",
"node_gap": 2,
"runbook_doc": null,
"evidence": [
{
"table": "cluster_dump",
"field": "node_count",
"value": 3
},
{
"table": "handover_record",
"field": "min_node_count",
"value": 5
},
{
"table": "handover_record",
"field": "min_gpu_count",
"value": null
},
{
"table": "cluster_dump",
"field": "current_value",
"value": "1"
},
{
"table": "handover_record",
"field": "handover_value",
"value": "3"
}
],
"summary": "색인 노드가 인계 하한 5대보다 2대 적고 사본 수도 3에서 1로 내려가 있습니다.",
"hedge": "GPU 하한이 인계서에 비어 있어 노드 수만 견줬습니다."
},
{
"check_id": "CHK-0006",
"customer_id": "CUST-2087",
"dump_id": "DMP-2026-09-06",
"setting_key": "max_upload_mb",
"verdict": "설정값 임의 변경",
"node_gap": null,
"runbook_doc": null,
"evidence": [
{
"table": "cluster_dump",
"field": "current_value",
"value": "1024"
},
{
"table": "handover_record",
"field": "handover_value",
"value": "200"
},
{
"table": "handover_record",
"field": "min_node_count",
"value": 2
},
{
"table": "cluster_dump",
"field": "node_count",
"value": 2
}
],
"summary": "업로드 상한이 인계 200에서 1024로 올라가 있고 지원 목록 안의 값이라 배포는 막히지 않습니다.",
"hedge": "합성 기준 판정이라 실제로는 고객사 담당자가 승인한 변경일 수 있습니다."
},
{
"check_id": "CHK-0003",
"customer_id": "CUST-1042",
"dump_id": "DMP-2026-09-03",
"setting_key": "session_timeout_min",
"verdict": "보안 설정 완화",
"node_gap": null,
"runbook_doc": "SEC-014",
"evidence": [
{
"table": "cluster_dump",
"field": "current_value",
"value": "480"
},
{
"table": "support_matrix",
"field": "security_baseline",
"value": "<=60"
},
{
"table": "handover_record",
"field": "handover_value",
"value": "30"
},
{
"table": "support_matrix",
"field": "runbook_doc",
"value": "SEC-014"
}
],
"summary": "세션 유지 시간이 기준 60분을 넘겨 480분으로 열려 있어 SEC-014 절차대로 되돌립니다.",
"hedge": null
},
{
"check_id": "CHK-0004",
"customer_id": "CUST-1042",
"dump_id": "DMP-2026-09-04",
"setting_key": "ingress_class",
"verdict": "지원 밖 구성",
"node_gap": null,
"runbook_doc": null,
"evidence": [
{
"table": "cluster_dump",
"field": "current_value",
"value": "nginx-legacy"
},
{
"table": "support_matrix",
"field": "product_version",
"value": "2.8.3"
},
{
"table": "handover_record",
"field": "handover_value",
"value": "nginx"
}
],
"summary": "지금 붙은 입구 종류가 2.8.3 지원 목록에 없어 다음 배포에서 걸립니다.",
"hedge": null
}
][자동 검증 · 코드가 판정합니다] 1. verdict 가 다섯 값 중 하나인지 확인합니다. 2. check_id·customer_id·dump_id·setting_key·evidence·summary 가 모두 들어 있는지 확인합니다. 3. node_gap 이 min_node_count 에서 node_count 를 뺀 값과 같은지 다시 계산합니다. 4. current_value 를 같은 customer_id·setting_key 의 handover_value 와 견주고, node_count 와 gpu_count 를 min_node_count·min_gpu_count 와 견주며, current_value 가 allowed_values 안에 있는지와 security_baseline 이 정한 기준을 지키는지를 다시 계산해 판정이 규칙 그대로 나왔는지 확인합니다. 5. evidence 의 field 가 세 데이터셋에 실재하는 컬럼인지 대조합니다. 6. evidence 의 value 가 그 컬럼의 수록된 행 값과 같은지 확인합니다. 7. summary 가 존댓말 한 문장인지 확인합니다. 8. 조건 규칙 — handover_record 의 min_gpu_count 가 비어 있으면 GPU 는 판정에 넣지 않고 노드 수만 견줍니다. CHK-0001 이 조건이 성립한 사례이고 CHK-0006 이 성립하지 않은 사례입니다. 9. 한 항목이 여러 갈래에 걸리면 자원 배정 축소와 보안 설정 완화를 먼저 적고 나머지는 근거 칸에 남깁니다. [평가 러너 · 2주차] 1. 정답을 붙인 점검 60건과 판정을 맞춰 일치율을 냅니다. 2. kind 클러스터에서 수집한 덤프로 같은 판정이 나오는지 손으로 만든 덤프와 나란히 돌려 봅니다. [수동 검증 · 사람이 봅니다] 1. 담당자가 승인한 변경으로 보이는 항목이 섞였는지 표본 20건을 눈으로 확인합니다. 2. 회신 문장이 고객사에 그대로 보내도 되는 말투인지 인프라 엔지니어가 읽어 봅니다.