에이비스
경력근거: 고객 환경을 이해하고 제품이 실제 의료 현장에서 안정적으로 동작할 수 있도록
'고객 환경을 이해하고 제품이 실제 의료 현장에서 안정적으로 동작할 수 있도록' 배포·연동·문서화까지 담당한다는 공고 문장이 이 도구의 형태를 그대로 정의합니다. 공고가 방화벽·SSL/TLS·도메인·스토리지 환경 분석과 기술 사양서·설치 가이드 작성을 같은 사람의 일로 묶어 두었는데, 고객사 회신 문서를 배포 값과 설치 문서로 바꾸는 이 산출물이 그 두 일 사이의 손작업을 없앱니다. 이 포트폴리오가 보여주는 것은 비정형 문서 파싱과 Helm 배포 값 구성 기술이며, 병리·디지털 병리(DICOM·WSI) 도메인 전문성은 주장하지 않습니다. 의료 영상 판독의 깊이는 면접에서 모른다고 말하는 편이 낫습니다.
공고가 병원·연구기관·파트너사 환경에 AI 솔루션을 배포하면서 기술 사양서와 설치 가이드, 운영 매뉴얼까지 작성한다고 밝힙니다. 고객사 회신 문서를 배포 값과 설치 문서로 바꾸는 이 도구가 그 두 가지를 한 번에 다룹니다.
On-premise 서버와 Cloud 환경 구성, 방화벽·SSL/TLS·도메인·스토리지 환경 분석과 설정 지원을 요구합니다. 조사서의 그 항목들이 그대로 배포 값 키가 되고, 미기재 항목은 확인 대상으로 남습니다.
Linux·Docker·REST 기본기와 Kubernetes·Helm·Nginx·모니터링 경험을 우대합니다. 이 도구가 만들어 내는 산출물이 Helm 값 파일과 리눅스 서버 기준 설치 명령이라 그 스택 위에서 그대로 돌아갑니다.
고객사 전산팀이 채워 보낸 설치 환경 조사서 엑셀과 방화벽 정책표를 읽어, 사이트별 Helm 배포 값 파일(values.yaml)과 그 값으로 설치하는 절차를 적은 설치 가이드 문서(md)를 만들어 주는 CLI입니다. 값은 항목 사전과 매핑 규칙이 결정하고, 조사서에 없는 항목은 기본값 적용과 확인 필요로 나눠 문서에 표시합니다.
병원마다 양식이 다른 설치 환경 조사서를 메일로 받아, 셀을 눈으로 훑으며 values.yaml 을 손으로 쓰고 지난 사이트의 설치 가이드를 복사해 고치던 파견 현장 엔지니어입니다. 조사서 파일을 넣으면 그 사이트에 맞는 값 파일과 설치 문서를 한 번에 받고 싶은 사람입니다.
고객사가 채워 보낸 조사서의 표기가 제각각이어도 항목 사전과 매핑 규칙으로 Helm 값 키에 옮길 수 있고, 표기가 흔들리거나 빈 항목만 확인 대상으로 남기면 사이트마다 손으로 값 파일과 설치 문서를 쓰던 일이 한 번의 명령으로 끝납니다.
설치 환경 조사서 엑셀을 읽어 사이트별 values.yaml 과 설치 가이드 md 를 내보내고, 생성한 값 파일이 helm template 렌더를 통과하는지 확인하는 CLI입니다. 실행하면 파일 두 벌이 남고 미기재 항목을 문서에 따로 표시합니다.
만들어진 값 파일로 로컬 kind 클러스터와 AWS EKS 에 실제로 배포해 헬스체크를 구동하고, 손으로 만든 정답 값 표 대비 키·값 전수 대조 채점과 서식 파손 회귀 테스트가 남은 상태입니다.
보안팀이 준 방화벽 정책표를 배포에 필요한 통신 목록과 대조해 열어야 할 포트와 아직 허용되지 않은 구간을 설치 가이드에 붙이고, Prometheus·Grafana 수집 설정 값을 같은 명령으로 함께 내보내는 흐름이 붙은 상태입니다.
설치 환경 조사서 엑셀 12장과 방화벽 정책표를 넣으면 사이트별 values.yaml 과 설치 가이드 md 가 나오고, 생성한 값 파일이 helm template 렌더를 통과하는 흐름을 명령 한 줄로 시연합니다.
2주차에는 손으로 만든 정답 값 표 대비 배포 값 키·값 일치율을 전수 대조로 보여줍니다(표본: 조사서 12장 · 값 항목 240개, 자가 라벨, 키와 값이 모두 같을 때만 일치로 셈).
병합 셀·머리글 반복·단위 없는 자유기술·공란을 섞은 조사서 20장을 넣어도 파싱이 멈추지 않고, 규칙이 값을 정하지 못한 항목은 확인 필요로 갈려 가이드에 남습니다.
위 수치는 작성자가 만든 조사서 더미와 자가 라벨 기준이라 성능 증명이 아니라 데모 조건 동작이며, 실제 병원이 회신하는 양식과 폐쇄망 설치 절차에서의 정확도는 에이비스의 현장 문서가 있어야 측정됩니다. 이 포트폴리오는 그 검증을 바로 돌릴 수 있는 상태로 만듭니다.
값 매핑과 가이드 생성은 작성자가 만든 조사서 더미 기준의 자가 검증이라 성능 증명이 아닙니다. 면접에서는 실행 데모와 검증 구조로 솔직하게 설명합니다.
표기 흔들림을 내가 심었으니 파서가 잘 읽는 게 당연해지는 함정이 있어, 규칙으로 못 읽는 서술형 답변과 두 값이 함께 적힌 셀을 더미에 일부러 섞고 그 건은 확인 필요로 남깁니다.
이 포트폴리오가 보여주는 것은 비정형 문서 파싱과 Helm 배포 값 구성 기술이며, 병리·디지털 병리와 의료 데이터 규정 도메인 전문성은 주장하지 않습니다. 모르는 깊이는 면접에서 모른다고 말하는 편이 낫습니다.
실제 병원의 보안 심사 절차와 고객사별 조사서 양식은 재현 범위 밖이라, 현장에서 달라지는 항목 사전과 승인 절차는 도입 단계 과제로 분리합니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
고객사 전산팀이 채워 회신한 설치 환경 조사서를 셀 단위로 읽어 둔 표입니다. 항목명 표기 흔들림·단위 없는 자유기술·공란을 일부러 담아 파싱 분기를 시험합니다.
| site_id | sheet | item_label | answer | note |
|---|---|---|---|---|
| H-01 | 서버환경 | GPU 모델 | NVIDIA A100 80GB x 2 | — |
| H-01 | 서버환경 | 저장공간 | 2TB (RAID 구성) | — |
| H-01 | 네트워크 | 폐쇄망 여부 | 예, 인터넷 불가 | 이미지 반입은 USB 승인 후 가능 |
| H-02 | 서버 환경 | 그래픽카드 | 없음 | CPU 서버만 배정되었습니다 |
| H-02 | 네트워크 | SSL 인증서 | 있음(내부 CA 발급) | — |
다음 JSON Schema 를 그대로 만족하는 설치 환경 조사서 셀 행을 40개 더 만들어 주세요: {"type":"object","properties":{"site_id":{"type":"string"},"sheet":{"type":"string"},"item_label":{"type":"string"},"answer":{"type":["string","null"]},"note":{"type":["string","null"]}},"required":["site_id","sheet","item_label"]} answer 는 병원 전산 담당자가 손으로 적은 말투여야 합니다. 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라: (1) 같은 뜻인데 라벨이 다른 항목(GPU 모델·그래픽카드·가속기) 6건, (2) 단위가 없거나 말로 적힌 용량 답변('넉넉함'·'충분') 5건, (3) answer 가 null 이거나 '확인 중'·'추후 회신' 인 미기재 6건, (4) 한 셀에 두 값이 함께 적힌 답변('T4 1장, 필요 시 A10 증설') 4건, (5) 앞 행과 라벨이 같은 병합 셀 잔재 4건.{"type":"object","properties":{"site_id":{"type":"string"},"sheet":{"type":"string"},"item_label":{"type":"string"},"answer":{"type":["string","null"]},"note":{"type":["string","null"]}},"required":["site_id","sheet","item_label"]}보안팀이 PDF 로 준 방화벽 정책표를 행 단위로 읽어 둔 표입니다. 포트 표기가 범위·복수·공란으로 흔들리게 두어 통신 대조 분기를 시험합니다.
| policy_id | site_id | source | destination | port | protocol | allowed |
|---|---|---|---|---|---|---|
| P-001 | H-01 | 원내 PC 대역 10.20.0.0/16 | AI 서버 10.20.30.11 | 443 | TCP | allow |
| P-002 | H-01 | 원내 PC 대역 10.20.0.0/16 | AI 서버 10.20.30.11 | 8501 | TCP | pending |
| P-003 | H-02 | AI 서버 | 인터넷 전 구간 | 전체 | — | deny |
| P-004 | H-02 | AI 서버 | 외부 컨테이너 레지스트리 | 443 | TCP | deny |
| P-005 | H-03 | 판독실 PC | AI 서버 | — | TCP | allow |
다음 JSON Schema 를 그대로 만족하는 방화벽 정책표 행을 30개 더 만들어 주세요: {"type":"object","properties":{"policy_id":{"type":"string"},"site_id":{"type":"string"},"source":{"type":"string"},"destination":{"type":"string"},"port":{"type":["string","null"]},"protocol":{"type":["string","null"]},"allowed":{"type":["string","null"],"enum":["allow","deny","pending",null]}},"required":["policy_id","site_id","source","destination"]} source·destination 은 병원 내부망에서 쓸 법한 대역과 장비 이름이어야 합니다. 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라: (1) port 가 범위나 복수로 적힌 행 5건, (2) port 또는 protocol 이 null 인 행 5건, (3) allowed 가 pending 이라 배포 시점에 아직 못 여는 행 6건, (4) 인터넷 전 구간을 막아 폐쇄망을 못 벗어나는 deny 행 4건, (5) 같은 통신을 두 번 적어 앞뒤가 어긋나는 중복 행 3건.{"type":"object","properties":{"policy_id":{"type":"string"},"site_id":{"type":"string"},"source":{"type":"string"},"destination":{"type":"string"},"port":{"type":["string","null"]},"protocol":{"type":["string","null"]},"allowed":{"type":["string","null"],"enum":["allow","deny","pending",null]}},"required":["policy_id","site_id","source","destination"]}| Docker | 모의 병리 추론 이미지를 컨테이너로 만들어 어느 사이트에서도 같은 이미지 태그로 설치하도록 값 파일에 고정합니다 |
| Kubernetes | 생성한 값 파일로 로컬 kind 클러스터에 배포해 값이 실제로 먹히는지 확인합니다 |
| AWS | 2주차부터 같은 값 파일을 AWS EKS 프로필로 바꿔 클라우드 사이트 배포까지 함께 구동합니다 |
| GCP | GCP 사이트용 스토리지 클래스·로드밸런서 값 프로필을 같은 조사서 항목에서 만들어 둡니다 |
| Azure | Azure 사이트용 값 프로필도 같은 매핑 규칙으로 만들어 환경 이식성을 확인합니다 |
| FastAPI | 설치 확인용 모의 추론 API 서버를 만들어 생성한 값으로 기동되는지 봅니다 |
| Python | 조사서 파서와 값 매핑 규칙 엔진, 가이드 생성기의 구현 언어입니다 |
| React | 고객사가 쓰는 React 뷰어의 접속 주소와 프록시 설정 값을 조사서 답변에서 뽑아 값 파일과 가이드에 반영합니다 |
| Spring | 고객사 기존 Spring 백엔드와 연동할 REST 엔드포인트·타임아웃 값을 조사서 항목에서 채웁니다 |
| REST | 추론·뷰어·외부 시스템 연동 주소를 REST 규격에 맞춰 값 파일에 적습니다 |
| Linux | 설치 가이드의 명령과 경로를 폐쇄망 리눅스 서버 기준으로 씁니다 |
| Nginx | 리버스 프록시와 TLS 종단 설정 값을 인증서 답변에 따라 나눠 만듭니다 |
✓ pass → 여기서 멈춰도 완결입니다. 더 키우려면 실제 클러스터 배포 구동과 정답 값 대조로 넘어갑니다.
✓ pass → 방화벽 정책표 대조와 모니터링 설정 값 내보내기로 넘어갑니다.
사이트별 배포 값 한 항목입니다. 값은 매핑 규칙이 조사서 원문에서 결정하고, 규칙이 정하지 못한 항목은 기본값 적용 또는 확인 필요로 남습니다.
{"type":"object","properties":{"site_id":{"type":"string"},"values_key":{"type":"string"},"value":{"type":["string","number","boolean","null"]},"source_item":{"type":"string"},"source_answer":{"type":["string","null"]},"resolution":{"type":"string","enum":["parsed","default_applied","needs_confirm"]},"hedge":{"type":"string"}},"required":["site_id","values_key","source_item","resolution","hedge"]}[
{
"site_id": "H-02",
"values_key": "gpu.enabled",
"value": false,
"source_item": "그래픽카드",
"source_answer": "없음",
"resolution": "parsed",
"hedge": "라벨이 'GPU 모델'이 아니라 '그래픽카드'였고 항목 사전으로 같은 항목에 붙였습니다. 합성 조사서 기준입니다."
},
{
"site_id": "H-08",
"values_key": "ingress.tls.mode",
"value": "self_signed",
"source_item": "SSL 인증서",
"source_answer": "자체 서명",
"resolution": "parsed",
"hedge": "자체 서명 값은 규칙이 그대로 옮겼고, 실제 허용 여부는 사이트 보안 정책에 따라 달라집니다."
},
{
"site_id": "H-03",
"values_key": "persistence.size",
"value": null,
"source_item": "저장공간",
"source_answer": "넉넉함",
"resolution": "needs_confirm",
"hedge": "단위 없는 자유기술이라 규칙이 값을 정하지 않고 확인 대상으로 남겼습니다. 임의 추정하지 않았습니다."
},
{
"site_id": "H-07",
"values_key": "service.port",
"value": 8501,
"source_item": "서비스 포트",
"source_answer": null,
"resolution": "default_applied",
"hedge": "조사서에 포트 항목이 없어 차트 기본값 8501 을 적용했고, 가이드에 기본값 적용으로 표시했습니다. 합성 기준입니다."
}
][자동 검증 · 스크립트가 전수 수행] 1. 출력이 JSON Schema 형식을 통과하는지 확인합니다(형식 깨진 값이 배포 파일로 나가는 것을 차단). 2. values_key 와 value 가 매핑 규칙 재실행 결과와 100% 일치하는지 확인합니다(정답은 LLM 이 아니라 규칙이 결정). 3. source_answer 가 입력 조사서 셀에 실재하는지 확인합니다(지어낸 근거 차단). 4. 모은 값으로 렌더한 values.yaml 이 helm template 를 통과하는지 확인합니다(설치 단계에서 깨지는 값 차단). [수동 검증 · 사람이 표본 확인] 1. 설치 가이드 문장이 값 목록을 넘어 없는 경로나 숫자를 적지 않았는지 30건을 표본 검토합니다. 2. 기본값을 적용한 항목이 그대로 설치해도 되는 수준인지 확인합니다.