마키나락스
경력근거: PoC·Pilot·Production 단계별 Task, 예상 Man-Hour/Man-Month, 필요 Resource와 Milestone
※ 실제 산출물이 아닌 AI 예측 시안입니다.
마키나락스 공고는 Tech Coordination Team 이 고객 요구사항을 '예상 투입공수로 구체화' 한다고 적고, 주요 업무로 'PoC·Pilot·Production 단계별 Task, 예상 Man-Hour/Man-Month, 필요 Resource와 Milestone을 정의해 Sales·PM의 Scope와 견적 수립을 지원' 한다고 적습니다. 같은 공고가 'On-Premise·Cloud·Hybrid 환경별 Kubernetes Deployment Architecture' 와 '보안정책·폐쇄망·망분리 제약' 을 다루므로, 같은 AI OS 설치라도 구축 환경에 따라 공수가 갈립니다. 이 관리자 페이지가 환경·단계로 지난 구축을 묶어 견주는 까닭이 거기 있습니다. 이 포트폴리오는 작업 기록을 집계해 견적 공수와 견주는 판정 규칙과 그 결과를 여러 역할이 함께 보는 화면을 보여줍니다. SI 견적과 영업 협상의 전문성은 주장하지 않습니다.
주요 업무에 'PoC·Pilot·Production 단계별 Task, 예상 Man-Hour/Man-Month, 필요 Resource와 Milestone을 정의해 Sales·PM의 Scope와 견적 수립을 지원합니다' 가 있습니다. 견적 작업표의 단계·작업·예상 공수가 그 산출물이고, 판정이 그 표를 지난 구축 실투입과 견줍니다.
'On-Premise·Cloud·Hybrid 환경별 Kubernetes Deployment Architecture를 설계합니다' 와 '보안정책·폐쇄망·망분리 제약과 CI/CD·Data Platform·SSO/LDAP 등 기존 시스템 연계 요구사항을 파악합니다' 가 함께 있습니다. 지난 구축을 환경·단계로 묶어 견주고, SSO/LDAP 연동처럼 매번 있던 연계 작업이 빠지면 보여주는 규칙이 이 두 줄을 받습니다.
'요구사항을 Standard / Configuration / Customization·Integration / Product Development / Not Feasible로 구분합니다' 와 우대 사항 '개발범위 및 Man-Month 산정 경험' 이 있습니다. 견적 작업표의 요구사항 구분을 화면에 함께 두고, 같은 환경 실적이 없는 Product Development 작업을 신규 개발 위험으로 따로 세웁니다.
마키나락스 Tech Coordination Team 의 솔루션 아키텍트가 고객 미팅 뒤 잡은 작업별 예상 공수 Man-Hour(MH)를, 마키나락스가 고객 Kubernetes 위에 설치하는 MLOps 플랫폼(AI OS Runway)을 같은 구축 환경·단계로 지난번에 구축했을 때 든 실투입 시간과 견줘 보여주는 관리자 페이지입니다. 견적 작업표, 지난 구축의 Jira 작업 기록, 구축 프로젝트 목록 세 CSV 를 올리면, 작업마다 지난 구축 실투입 합계의 중앙값을 내어 0.7배에 못 미치거나 1.5배를 넘는 작업, 지난 구축 70% 이상에 있었는데 이번 견적에 없는 작업, 같은 환경 실적이 두 건에 못 미치는 작업을 다섯 판정으로 나눠 보여줍니다. 솔루션 아키텍트와 Sales·PM 이 제안서를 내기 전에 같은 화면을 열어 걸린 작업의 지난 구축 내역을 펼쳐 보고 공수를 늘릴지 범위를 줄일지 정합니다.
고객 미팅 뒤 단계별 Task 와 예상 Man-Hour 를 잡는 마키나락스 Tech Coordination Team 솔루션 아키텍트, 그리고 그 공수로 견적과 범위를 정하는 Sales·PM. 제안서를 내기 전에 셋이 같은 화면에서 작업별 공수를 지난 프로젝트 실투입과 맞대어 보고, 공수를 늘릴지 범위를 줄일지 정한다
솔루션 아키텍트는 지난 구축에서 든 시간을 기억과 감으로 견적에 옮기고, 매번 들던 SSO 연동이나 드라이버 재설치 같은 작업은 고객 미팅에서 언급되지 않으면 견적에서 빠집니다. 지난 구축의 작업 기록을 같은 환경·단계로 묶어 작업별 중앙값과 등장 비율을 내면, 적게 잡히거나 빠진 작업이 견적 전에 보입니다.
솔루션 아키텍트가 견적 작업표·Jira 작업 기록·구축 프로젝트 세 CSV 를 올리면, 작업마다 다섯 판정과 지난 구축 실투입 중앙값, 프로젝트별 합계, 진행 중이라 뺀 프로젝트를 펼쳐 보여주는 Next.js 관리자 페이지입니다. 첫 주의 작업 기록은 지원자가 Jira 화면에서 내려받은 CSV 한 장이고, API 로 당겨 오는 연결은 2주차 몫입니다.
무료 Jira Cloud 사이트의 REST API 로 작업 분류 라벨이 붙은 이슈의 worklog 를 받아 CSV 없이 판정하고, 지난 구축 12건·견적 6건에서 손으로 계산한 작업 90개와 화면 판정을 견주는 평가 러너를 더합니다. 화면을 Helm 차트로 묶어 k3d Kubernetes 클러스터에 Argo CD 로 배포합니다.
같은 영업 기회의 견적 판본을 올릴 때마다 새로 걸리거나 풀린 작업을 보여주고, 걸린 작업마다 Sales·PM 이 고른 결정(공수 늘림·범위 줄임·그대로)을 남깁니다. 클로드가 결정이 끝난 작업으로 제안서의 단계별 공수 산정 근거 문단 초안을 씁니다.
솔루션 아키텍트가 한빛중공업 견적 작업표를 올리면 GPU 노드 구성이 예상 40MH · 지난 On-Premise 구축 4건 중앙값 96MH 로 적게 잡힘에, SSO/LDAP 연동이 지난 구축 4건 중 3건에 있던 빠진 작업으로 서고, Sales·PM 은 같은 화면에서 행을 펼쳐 대성정밀의 드라이버 재설치 40시간을 읽습니다.
Sales·PM 이 많이 잡힘 칸의 AI OS 설치(320MH · 중앙값 168MH)를 열어, 공수를 줄일지 한빛중공업만의 추가 구성을 따로 떼어 적을지 솔루션 아키텍트와 정합니다.
견적 회의 전날 솔루션 아키텍트가 공수표를 고쳐 다시 올려도 문턱에 걸친 작업의 자리가 흔들리지 않게, T-CICD 84MH·T-MON 60MH, 이슈 두 장에 나뉜 대성정밀 GPU 기록, 닫히지 않은 한결방산 기록, 한 번만 해 본 LLM Serving, 끝난 실적이 비어 있는 누리유통 Cloud·Pilot 견적을 Vitest 테스트 입력으로 둡니다. 공수 비교식이나 판정 순서를 건드린 변경은 이 여섯 경우 가운데 하나라도 결과가 달라지면 CI 에서 멈춥니다.
진짜 성능 검증은 여기서 멈춥니다. 지난 구축 기록과 견적은 작성자가 Jira Cloud 에 지어 넣은 것이라, 이 화면이 견적 뒤 공수 초과를 줄이는지는 마키나락스의 실제 구축 실투입과 계약 뒤 공수 기록이 있어야 압니다. 실제 기록이 오면 지난 견적 몇 건을 화면에 다시 올려, 계약 뒤 초과가 났던 작업이 그때 걸렸을지부터 봅니다.
작업 90개의 판정은 제가 Jira 에 지어 넣은 지난 구축 기록으로 계산한 것이라, 이 화면이 견적 회의의 공수 논쟁을 줄인다고는 아직 말하지 않습니다. 실제 공수 산정표와 지난 구축 기록을 받으면, 첫 견적 회의에서 솔루션 아키텍트가 손으로 짚던 작업과 화면이 걸어 둔 작업이 같은지부터 셋이 함께 봅니다.
견적 회의에서 실제로 말이 길어지는 자리는 공수가 문턱에 걸쳐 있거나, 지난 구축이 몇 건뿐이거나, 매번 하던 연동을 아무도 꺼내지 않은 경우입니다. 지어 낸 기록에 그 장면을 일부러 심었습니다: 중앙값의 0.7배·1.5배에 딱 맞춘 T-CICD·T-MON, 네 구축 중 셋에만 있던 T-SSO 와 둘에만 있던 T-DR, On-Premise 에서 한 번만 해 본 T-LLM-SERVING, 아직 닫히지 않은 PRJ-2026-009, 같은 환경·단계로 끝난 구축이 하나도 없는 D-2026-027 입니다.
지난 실적으로 공수를 견주는 방법과 Jira 라는 출처는 공고에 없는 가정입니다. 마키나락스가 실투입을 다른 도구나 다른 작업 분류로 남긴다면, 판정보다 먼저 그 분류를 이 화면의 task_code 목록에 맞추는 대응표가 필요합니다.
중앙값은 지난 구축이 네 건이면 한두 건의 사고로 크게 움직입니다. 고객 보안 패치로 드라이버를 다시 설치한 대성정밀처럼 특수한 사정이 낀 프로젝트를 뺄지는 판정이 아니라 솔루션 아키텍트가 정할 일이고, 이 화면은 프로젝트별 합계와 주석을 펼쳐 그 판단에 쓸 근거만 보여줍니다.
작업 기록 주석에는 고객사 내부 사정이 적힙니다. 클로드에는 고객사 이름 대신 프로젝트 번호와 주석만 넘기고, 제안서 초안에는 다른 고객사 이름이 들어가지 않게 합니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
솔루션 아키텍트가 고객 미팅 뒤 잡은 견적 전 작업별 공수표입니다. 영업 기회 번호, 구축 환경, 단계, 작업 분류, 요구사항 구분, 예상 Man-Hour 를 둡니다. D-2026-031 한빛중공업 On-Premise·Production 제안이 판정 설명에 쓰는 견적이고, SSO/LDAP 연동이 빠져 있습니다. 지원자는 공개된 AI 플랫폼 구축 제안서 양식을 참고해 이 표를 직접 씁니다.
| deal_id | deal_name | deploy_env | phase | task_code | task_name | req_class | estimated_mh |
|---|---|---|---|---|---|---|---|
| D-2026-031 | 한빛중공업 AI OS 구축 제안 | On-Premise | Production | T-GPU-SETUP | GPU 노드 구성 및 드라이버 설치 | Configuration | 40 |
| D-2026-031 | 한빛중공업 AI OS 구축 제안 | On-Premise | Production | T-AIOS-INSTALL | AI OS 설치 및 기본 구성 | Standard | 320 |
| D-2026-031 | 한빛중공업 AI OS 구축 제안 | On-Premise | Production | T-CICD | 고객 CI/CD·Argo CD 연동 | Customization·Integration | 84 |
| D-2026-031 | 한빛중공업 AI OS 구축 제안 | On-Premise | Production | T-MON | 모니터링 구성 | Standard | 60 |
| D-2026-031 | 한빛중공업 AI OS 구축 제안 | On-Premise | Production | T-AIRGAP-REG | 폐쇄망 이미지 반입·사설 레지스트리 | Configuration | 48 |
아래 JSON Schema 를 그대로 만족하는 견적 작업표를 영업 기회 6건 몫으로 만들어 주세요. 기회마다 deploy_env 와 phase 를 하나씩 정하고 작업을 6~15개 둡니다. task_code 는 지난 구축 worklogs 와 같은 목록에서 고르고, 그 기회에만 있는 신규 작업도 하나쯤 섞습니다. 쉬운 데이터만 만들지 말고 다음을 섞으세요: 지난 실투입 중앙값의 0.7배·1.5배와 정확히 같은 예상 공수, 지난 구축 대부분에 있던 작업을 빠뜨린 기회, 같은 환경 실적이 한 건뿐인 작업. 판정 결과는 넣지 마세요. 형식 깨뜨리기 시도로 estimated_mh 를 '40MH'·'5MD' 로 적은 줄 3건을 따로 만듭니다.
{"type":"object","properties":{"deal_id":{"type":"string","description":"견적 전 영업 기회 번호입니다"},"deal_name":{"type":"string"},"deploy_env":{"type":"string","enum":["On-Premise","Cloud","Hybrid"]},"phase":{"type":"string","enum":["PoC","Pilot","Production"]},"task_code":{"type":"string"},"task_name":{"type":"string"},"req_class":{"type":"string","enum":["Standard","Configuration","Customization·Integration","Product Development"],"description":"요구사항 구분입니다. 판정에는 쓰지 않고 화면과 메모에 함께 보입니다"},"estimated_mh":{"type":"number","minimum":0,"description":"솔루션 아키텍트가 잡은 예상 Man-Hour 입니다"}},"required":["deal_id","deal_name","deploy_env","phase","task_code","task_name","req_class","estimated_mh"]}{"type":"object","properties":{"deal_id":{"type":"string","description":"견적 전 영업 기회 번호입니다"},"deal_name":{"type":"string"},"deploy_env":{"type":"string","enum":["On-Premise","Cloud","Hybrid"]},"phase":{"type":"string","enum":["PoC","Pilot","Production"]},"task_code":{"type":"string"},"task_name":{"type":"string"},"req_class":{"type":"string","enum":["Standard","Configuration","Customization·Integration","Product Development"],"description":"요구사항 구분입니다. 판정에는 쓰지 않고 화면과 메모에 함께 보입니다"},"estimated_mh":{"type":"number","minimum":0,"description":"솔루션 아키텍트가 잡은 예상 Man-Hour 입니다"}},"required":["deal_id","deal_name","deploy_env","phase","task_code","task_name","req_class","estimated_mh"]}지난 AI OS 구축 프로젝트의 Jira 작업 기록입니다. 프로젝트, 작업 분류 라벨, 이슈 키, 이슈 제목, 기록 시간, 주석을 둡니다. 한 작업에 이슈가 둘이면 줄도 둘이라 프로젝트별로 더해야 합니다(대성정밀 GPU 작업 RWY-1388·RWY-1421). 아직 끝나지 않은 한결방산 기록과 Cloud·PoC 프로젝트 기록이 함께 들어 있습니다. 지원자는 무료 Jira Cloud 사이트를 열어 작업 분류 라벨을 붙인 이슈와 작업 기록을 직접 만들고 CSV 로 내보냅니다.
| project_id | task_code | issue_key | issue_summary | logged_hours | worklog_comment |
|---|---|---|---|---|---|
| PRJ-2024-011 | T-GPU-SETUP | RWY-1102 | GPU 노드 구성 및 드라이버 설치 | 72 | 폐쇄망이라 드라이버·CUDA 패키지 반입 승인 대기 포함 |
| PRJ-2025-003 | T-GPU-SETUP | RWY-1388 | GPU 노드 구성 및 드라이버 설치 | 56 | — |
| PRJ-2025-003 | T-GPU-SETUP | RWY-1421 | GPU 드라이버 재설치(커널 업데이트 후) | 40 | 고객 보안 패치로 커널이 올라가 드라이버 재빌드 |
| PRJ-2025-017 | T-GPU-SETUP | RWY-1730 | GPU 노드 구성 및 드라이버 설치 | 96 | — |
| PRJ-2026-002 | T-GPU-SETUP | RWY-2015 | GPU 노드 구성 및 MIG 분할 | 130 | MIG 분할 구성과 노드 6대 검수 |
아래 JSON Schema 를 그대로 만족하는 Jira 작업 기록을 지난 구축 12건 몫으로 만들어 주세요. 프로젝트마다 작업 분류 6~12개를 두고, 한 작업에 이슈를 1~3개로 나눕니다. On-Premise 구축은 폐쇄망 반입·드라이버 재설치 같은 이유로 Cloud 보다 시간이 길게 나오게 합니다. 쉬운 데이터만 만들지 말고 다음을 섞으세요: 같은 작업을 이슈 둘로 나눠 기록한 줄, 아직 끝나지 않은 프로젝트의 기록, worklog_comment 가 null 인 줄, 같은 환경에서 한 프로젝트에만 나온 작업. 판정 결과는 넣지 마세요.
{"type":"object","properties":{"project_id":{"type":"string"},"task_code":{"type":"string","description":"Jira 이슈에 붙인 작업 분류 라벨입니다. 견적 작업표의 task_code 와 같은 목록을 씁니다"},"issue_key":{"type":"string","description":"Jira 이슈 키입니다"},"issue_summary":{"type":"string"},"logged_hours":{"type":"number","minimum":0,"description":"그 이슈에 기록된 작업 시간(시간)입니다. 한 프로젝트·작업에 이슈가 여럿이면 줄도 여럿입니다"},"worklog_comment":{"type":["string","null"],"description":"작업 기록에 남긴 주석입니다. 비어 있을 수 있습니다"}},"required":["project_id","task_code","issue_key","issue_summary","logged_hours","worklog_comment"]}{"type":"object","properties":{"project_id":{"type":"string"},"task_code":{"type":"string","description":"Jira 이슈에 붙인 작업 분류 라벨입니다. 견적 작업표의 task_code 와 같은 목록을 씁니다"},"issue_key":{"type":"string","description":"Jira 이슈 키입니다"},"issue_summary":{"type":"string"},"logged_hours":{"type":"number","minimum":0,"description":"그 이슈에 기록된 작업 시간(시간)입니다. 한 프로젝트·작업에 이슈가 여럿이면 줄도 여럿입니다"},"worklog_comment":{"type":["string","null"],"description":"작업 기록에 남긴 주석입니다. 비어 있을 수 있습니다"}},"required":["project_id","task_code","issue_key","issue_summary","logged_hours","worklog_comment"]}지난 구축 프로젝트 목록입니다. 프로젝트 번호, 이름, 구축 환경, 단계, 종료일을 둡니다. 종료일이 null 인 진행 중 프로젝트(PRJ-2026-009)는 실적에 넣지 않습니다. 고객사 이름은 작성자가 지은 것입니다.
| project_id | project_name | deploy_env | phase | closed_at |
|---|---|---|---|---|
| PRJ-2024-011 | 가람제철 AI OS 구축 | On-Premise | Production | 2024-11-29 |
| PRJ-2025-003 | 대성정밀 AI OS 구축 | On-Premise | Production | 2025-04-18 |
| PRJ-2025-017 | 동해에너지 AI OS 구축 | On-Premise | Production | 2025-09-30 |
| PRJ-2026-002 | 세진반도체 AI OS·LLM 구축 | On-Premise | Production | 2026-03-13 |
| PRJ-2026-009 | 한결방산 AI OS 구축 | On-Premise | Production | — |
아래 JSON Schema 를 그대로 만족하는 구축 프로젝트를 12건 만들어 주세요. On-Premise 를 절반쯤, Cloud·Hybrid 를 나머지로 두고 단계는 Production 이 가장 많게 합니다. 쉬운 데이터만 만들지 말고 closed_at 이 null 인 진행 중 프로젝트 2건과, 같은 고객의 PoC 와 Production 이 따로 있는 경우를 섞으세요. 고객사 이름은 실제 회사와 겹치지 않게 지어 주세요. 판정 결과는 넣지 마세요.
{"type":"object","properties":{"project_id":{"type":"string","description":"끝난 구축 프로젝트 번호입니다"},"project_name":{"type":"string"},"deploy_env":{"type":"string","enum":["On-Premise","Cloud","Hybrid"]},"phase":{"type":"string","enum":["PoC","Pilot","Production"]},"closed_at":{"type":["string","null"],"description":"종료일 YYYY-MM-DD 입니다. 아직 진행 중이면 null 이고, null 인 프로젝트는 실적에 넣지 않습니다"}},"required":["project_id","project_name","deploy_env","phase","closed_at"]}{"type":"object","properties":{"project_id":{"type":"string","description":"끝난 구축 프로젝트 번호입니다"},"project_name":{"type":"string"},"deploy_env":{"type":"string","enum":["On-Premise","Cloud","Hybrid"]},"phase":{"type":"string","enum":["PoC","Pilot","Production"]},"closed_at":{"type":["string","null"],"description":"종료일 YYYY-MM-DD 입니다. 아직 진행 중이면 null 이고, null 인 프로젝트는 실적에 넣지 않습니다"}},"required":["project_id","project_name","deploy_env","phase","closed_at"]}| TypeScript·Next.js | 세 CSV 업로드, 프로젝트별 합계와 중앙값 계산, 다섯 판정과 판정 차례, 판정별 표와 펼침 화면을 맡습니다. |
| Kubernetes | 2주차에 관리자 페이지와 Jira 동기화 작업을 k3d 클러스터에 Deployment 와 CronJob 으로 올립니다. |
| Container | 화면과 동기화 작업을 각각 이미지로 묶어 같은 이미지가 로컬과 클러스터에서 같은 판정을 냅니다. |
| CI/CD·GitOps(Argo CD) | 2주차에 Helm 차트를 Git 저장소에 두고 Argo CD 가 클러스터와 동기화하게 합니다. |
| MLOps Platform | 판정 대상이 AI OS 설치·GPU 노드·LLM Serving 같은 MLOps 구축 작업이라, 작업 분류 목록을 그 구축 순서로 짭니다. |
| On-Premise·Cloud·Hybrid | 지난 구축을 구축 환경과 단계로 묶어 같은 조건끼리만 견줍니다. |
| Man-Month 산정 | 작업별 Man-Hour 판정을 단계별로 더해 3주차 제안서 공수 산정 근거의 Man-Month 로 옮깁니다. |
| LLM API | 걸린 작업의 지난 worklog 주석 요약과 3주차 제안서 공수 근거 문단 초안을 클로드로 씁니다. |
✗ fail → CI/CD·모니터링 줄이 범위 밖으로 밀려나면 공수 비교식의 등호 처리를, LLM Serving 이 적게 잡힘 칸에 서면 실적 없음을 먼저 보는 순서를 다시 맞춘 뒤 2주차로 갑니다.
✓ pass → 이 화면만으로도 다음 견적 회의에 들고 갈 수 있으니, 더 키운다면 CSV 대신 Jira 에서 바로 당겨 오고 클러스터에 올리는 일을 붙입니다.
✗ fail → API 합계가 CSV 와 다르면 한 이슈에 여러 사람이 남긴 worklog 를 어떻게 더하는지부터 맞추고, 배포는 로컬 컨테이너로 되돌립니다.
✓ pass → 동기화가 맞으면 견적 판본이 바뀔 때마다 무엇이 새로 걸렸는지와 Sales·PM 이 고른 결정을 남기는 쪽으로 키웁니다.
위 예측 UI 는 3주차까지 완주했을 때의 화면입니다. 1주차에 실제로 만드는 것은 아래 표시된 화면 하나입니다.
verdict사유 라벨 · task_code + 한 줄 요약(근거 수치 포함)화면·코드·면접에서 이 단어를 그대로 씁니다. 키는 출력 스키마의 enum 과 같습니다.
지난 실적 범위 안범위 안지난 실적보다 적게 잡힘적게 잡힘지난 실적보다 많이 잡힘많이 잡힘지난 구축마다 있던 작업이 빠짐빠진 작업지난 실적이 없는 작업실적 없음작업별 공수 판정입니다. 이번 견적의 작업마다, 그리고 지난 구축에 있었는데 견적에 빠진 작업마다 한 줄을 내고 지난 구축 프로젝트별 실투입 합계와 중앙값, 진행 중이라 뺀 프로젝트를 싣습니다. 관리자 페이지의 판정별 표와 펼침 상세가 같은 줄을 읽습니다.
{"type":"object","properties":{"deal_id":{"type":"string"},"task_code":{"type":"string"},"task_name":{"type":"string"},"req_class":{"type":["string","null"],"enum":["Standard","Configuration","Customization·Integration","Product Development",null]},"estimated_mh":{"type":["number","null"],"description":"이번 견적의 예상 Man-Hour 입니다. 지난 구축마다 있던 작업이 빠짐이면 null 입니다"},"verdict":{"type":"string","enum":["지난 실적 범위 안","지난 실적보다 적게 잡힘","지난 실적보다 많이 잡힘","지난 구축마다 있던 작업이 빠짐","지난 실적이 없는 작업"],"description":"견적에 있는 작업이 여럿에 걸리면 지난 실적이 없는 작업, 지난 실적보다 적게 잡힘, 지난 실적보다 많이 잡힘 순으로 앞선 하나입니다. 지난 구축마다 있던 작업이 빠짐은 견적에 없는 작업에만 붙습니다"},"also_found":{"type":"array","items":{"type":"string","enum":["지난 실적보다 적게 잡힘","지난 실적보다 많이 잡힘","지난 실적이 없는 작업"]}},"baseline_hours":{"type":"array","items":{"type":"object","properties":{"project_id":{"type":"string"},"hours":{"type":"number"}},"required":["project_id","hours"]},"description":"같은 deploy_env·phase 로 closed_at 이 찍힌 projects 가운데 이 task_code 가 worklogs 에 나온 프로젝트마다 logged_hours 합계입니다"},"median_mh":{"type":["number","null"],"description":"baseline_hours.hours 의 중앙값입니다. 짝수 개면 가운데 두 값의 평균입니다. 비어 있으면 null 입니다"},"presence_count":{"type":"integer","minimum":0,"description":"baseline_hours 에 든 프로젝트 수입니다"},"presence_base":{"type":"integer","minimum":0,"description":"같은 deploy_env·phase 로 closed_at 이 찍힌 projects 수입니다"},"env_project_count":{"type":"integer","minimum":0,"description":"같은 deploy_env 로 closed_at 이 찍힌 projects 가운데(단계 무관) 이 task_code 가 worklogs 에 나온 프로젝트 수입니다"},"excluded_project_ids":{"type":"array","items":{"type":"string"},"description":"이 작업 기록은 있지만 closed_at 이 null 이라 세지 않은 프로젝트입니다"},"evidence":{"type":"array","items":{"type":"object","properties":{"table":{"type":"string","enum":["estimate_tasks","worklogs","projects"]},"field":{"type":"string"},"agg":{"type":["string","null"],"enum":["count","sum","avg","min","max",null]},"value":{}},"required":["table","field","value"]}},"summary":{"type":"string"},"sa_note":{"type":["string","null"],"description":"클로드가 지난 worklogs 의 issue_summary·worklog_comment 를 읽고 쓴, 솔루션 아키텍트가 Sales·PM 에 보일 메모입니다. 지난 실적 범위 안이면 null 입니다"}},"required":["deal_id","task_code","task_name","req_class","estimated_mh","verdict","also_found","baseline_hours","median_mh","presence_count","presence_base","env_project_count","excluded_project_ids","evidence","summary","sa_note"]}[
{
"deal_id": "D-2026-031",
"task_code": "T-GPU-SETUP",
"task_name": "GPU 노드 구성 및 드라이버 설치",
"req_class": "Configuration",
"estimated_mh": 40,
"verdict": "지난 실적보다 적게 잡힘",
"also_found": [],
"baseline_hours": [
{
"project_id": "PRJ-2024-011",
"hours": 72
},
{
"project_id": "PRJ-2025-003",
"hours": 96
},
{
"project_id": "PRJ-2025-017",
"hours": 96
},
{
"project_id": "PRJ-2026-002",
"hours": 130
}
],
"median_mh": 96,
"presence_count": 4,
"presence_base": 4,
"env_project_count": 4,
"excluded_project_ids": [],
"evidence": [
{
"table": "estimate_tasks",
"field": "estimated_mh",
"agg": null,
"value": 40
},
{
"table": "worklogs",
"field": "logged_hours",
"agg": "sum",
"value": 96
},
{
"table": "worklogs",
"field": "logged_hours",
"agg": null,
"value": 40
},
{
"table": "worklogs",
"field": "issue_key",
"agg": null,
"value": "RWY-1421"
}
],
"summary": "예상 40MH 가 지난 On-Premise·Production 구축 4건 실투입 중앙값 96MH 의 0.7배(67.2MH)에 못 미칩니다. 대성정밀 구축은 커널 업데이트 뒤 드라이버 재설치로 40시간이 더 들었습니다.",
"sa_note": "지난 네 번의 On-Premise 구축에서 GPU 노드 작업은 72~130시간이 들었고, 폐쇄망 드라이버 반입 승인 대기와 커널 업데이트 뒤 재설치가 시간을 늘린 이유로 적혀 있습니다. 한빛중공업도 폐쇄망이면 재설치 한 번을 공수에 넣을지 Sales·PM 과 정해 주세요."
},
{
"deal_id": "D-2026-031",
"task_code": "T-AIOS-INSTALL",
"task_name": "AI OS 설치 및 기본 구성",
"req_class": "Standard",
"estimated_mh": 320,
"verdict": "지난 실적보다 많이 잡힘",
"also_found": [],
"baseline_hours": [
{
"project_id": "PRJ-2024-011",
"hours": 150
},
{
"project_id": "PRJ-2025-003",
"hours": 176
},
{
"project_id": "PRJ-2025-017",
"hours": 160
},
{
"project_id": "PRJ-2026-002",
"hours": 190
}
],
"median_mh": 168,
"presence_count": 4,
"presence_base": 4,
"env_project_count": 5,
"excluded_project_ids": [],
"evidence": [
{
"table": "estimate_tasks",
"field": "estimated_mh",
"agg": null,
"value": 320
},
{
"table": "worklogs",
"field": "logged_hours",
"agg": "sum",
"value": 160
},
{
"table": "worklogs",
"field": "logged_hours",
"agg": "sum",
"value": 176
},
{
"table": "projects",
"field": "phase",
"agg": null,
"value": "PoC"
}
],
"summary": "예상 320MH 가 지난 구축 4건 중앙값 168MH 의 1.5배(252MH)를 넘습니다. PoC 로 끝난 미래화학(60시간)은 단계가 달라 견주지 않았습니다.",
"sa_note": "AI OS 설치는 지난 네 번 모두 150~190시간 안에서 끝났습니다. 320MH 에 한빛중공업만의 추가 구성이 들어 있다면 그 작업을 따로 떼어 적어 주시고, 아니면 견적이 비싸 보이지 않게 줄일지 정해 주세요."
},
{
"deal_id": "D-2026-031",
"task_code": "T-CICD",
"task_name": "고객 CI/CD·Argo CD 연동",
"req_class": "Customization·Integration",
"estimated_mh": 84,
"verdict": "지난 실적 범위 안",
"also_found": [],
"baseline_hours": [
{
"project_id": "PRJ-2024-011",
"hours": 100
},
{
"project_id": "PRJ-2025-003",
"hours": 128
},
{
"project_id": "PRJ-2025-017",
"hours": 112
},
{
"project_id": "PRJ-2026-002",
"hours": 140
}
],
"median_mh": 120,
"presence_count": 4,
"presence_base": 4,
"env_project_count": 4,
"excluded_project_ids": [],
"evidence": [
{
"table": "estimate_tasks",
"field": "estimated_mh",
"agg": null,
"value": 84
},
{
"table": "worklogs",
"field": "logged_hours",
"agg": "sum",
"value": 112
},
{
"table": "worklogs",
"field": "logged_hours",
"agg": "sum",
"value": 128
}
],
"summary": "중앙값 120MH 의 0.7배가 정확히 84MH 라 예상 84MH 는 미달이 아니어서 범위 안에 둡니다.",
"sa_note": null
},
{
"deal_id": "D-2026-031",
"task_code": "T-MON",
"task_name": "모니터링 구성",
"req_class": "Standard",
"estimated_mh": 60,
"verdict": "지난 실적 범위 안",
"also_found": [],
"baseline_hours": [
{
"project_id": "PRJ-2024-011",
"hours": 32
},
{
"project_id": "PRJ-2025-003",
"hours": 44
},
{
"project_id": "PRJ-2025-017",
"hours": 36
},
{
"project_id": "PRJ-2026-002",
"hours": 52
}
],
"median_mh": 40,
"presence_count": 4,
"presence_base": 4,
"env_project_count": 4,
"excluded_project_ids": [],
"evidence": [
{
"table": "estimate_tasks",
"field": "estimated_mh",
"agg": null,
"value": 60
},
{
"table": "worklogs",
"field": "logged_hours",
"agg": "sum",
"value": 36
},
{
"table": "worklogs",
"field": "logged_hours",
"agg": "sum",
"value": 44
}
],
"summary": "중앙값 40MH 의 1.5배가 정확히 60MH 라 예상 60MH 는 넘지 않아 범위 안에 둡니다.",
"sa_note": null
},
{
"deal_id": "D-2026-031",
"task_code": "T-AIRGAP-REG",
"task_name": "폐쇄망 이미지 반입·사설 레지스트리",
"req_class": "Configuration",
"estimated_mh": 48,
"verdict": "지난 실적 범위 안",
"also_found": [],
"baseline_hours": [
{
"project_id": "PRJ-2024-011",
"hours": 40
},
{
"project_id": "PRJ-2025-003",
"hours": 52
},
{
"project_id": "PRJ-2025-017",
"hours": 48
},
{
"project_id": "PRJ-2026-002",
"hours": 64
}
],
"median_mh": 50,
"presence_count": 4,
"presence_base": 4,
"env_project_count": 4,
"excluded_project_ids": [],
"evidence": [
{
"table": "estimate_tasks",
"field": "estimated_mh",
"agg": null,
"value": 48
},
{
"table": "worklogs",
"field": "logged_hours",
"agg": "sum",
"value": 48
},
{
"table": "worklogs",
"field": "logged_hours",
"agg": "sum",
"value": 52
}
],
"summary": "예상 48MH 가 지난 구축 4건 중앙값 50MH 의 0.7배와 1.5배 사이에 있습니다.",
"sa_note": null
},
{
"deal_id": "D-2026-031",
"task_code": "T-LLM-SERVING",
"task_name": "LLM Serving(vLLM) 구성",
"req_class": "Product Development",
"estimated_mh": 40,
"verdict": "지난 실적이 없는 작업",
"also_found": [
"지난 실적보다 적게 잡힘"
],
"baseline_hours": [
{
"project_id": "PRJ-2026-002",
"hours": 120
}
],
"median_mh": 120,
"presence_count": 1,
"presence_base": 4,
"env_project_count": 1,
"excluded_project_ids": [],
"evidence": [
{
"table": "estimate_tasks",
"field": "estimated_mh",
"agg": null,
"value": 40
},
{
"table": "worklogs",
"field": "project_id",
"agg": null,
"value": "PRJ-2026-002"
},
{
"table": "worklogs",
"field": "logged_hours",
"agg": null,
"value": 120
}
],
"summary": "On-Premise 로 끝난 구축 가운데 이 작업이 나온 곳이 세진반도체 한 건뿐이라 지난 실적이 없는 작업으로 둡니다. 그 한 건의 120MH 로 보면 예상 40MH 가 적게 잡힘에도 걸리지만, 한 건짜리 기준이라 판정 차례상 뒤로 보냅니다.",
"sa_note": "LLM Serving 은 On-Premise 에서 한 번(세진반도체, 120시간)만 해 봤고 그때 양자화 버전 교체로 두 번 다시 배포했습니다. Product Development 로 분류된 작업이라 40MH 는 신규 개발 위험으로 따로 적고, Product·Engineering 과 범위를 먼저 맞춰 주세요."
},
{
"deal_id": "D-2026-031",
"task_code": "T-SSO",
"task_name": "SSO/LDAP 연동(Keycloak)",
"req_class": null,
"estimated_mh": null,
"verdict": "지난 구축마다 있던 작업이 빠짐",
"also_found": [],
"baseline_hours": [
{
"project_id": "PRJ-2024-011",
"hours": 64
},
{
"project_id": "PRJ-2025-003",
"hours": 72
},
{
"project_id": "PRJ-2025-017",
"hours": 80
}
],
"median_mh": 72,
"presence_count": 3,
"presence_base": 4,
"env_project_count": 3,
"excluded_project_ids": [
"PRJ-2026-009"
],
"evidence": [
{
"table": "worklogs",
"field": "task_code",
"agg": "count",
"value": 3
},
{
"table": "projects",
"field": "closed_at",
"agg": null,
"value": null
},
{
"table": "worklogs",
"field": "issue_key",
"agg": null,
"value": "RWY-2210"
},
{
"table": "worklogs",
"field": "logged_hours",
"agg": "sum",
"value": 72
}
],
"summary": "지난 On-Premise·Production 구축 4건 중 3건(75%)에 SSO/LDAP 연동이 있었는데 이번 견적에는 없습니다. 아직 끝나지 않은 한결방산(PRJ-2026-009) 기록은 세지 않았습니다.",
"sa_note": "SSO/LDAP 연동은 지난 구축 셋에서 64~80시간이 들었고, 고객 AD 그룹 구조를 맞추는 회의와 망분리 구간 인증서 갱신이 주석에 남아 있습니다. 한빛중공업 Discovery 메모에 SSO 요구가 있었는지 확인하고, 있으면 72MH 안팎으로 넣을지 정해 주세요."
},
{
"deal_id": "D-2026-027",
"task_code": "T-GPU-SETUP",
"task_name": "GPU 노드 풀 구성",
"req_class": "Configuration",
"estimated_mh": 24,
"verdict": "지난 실적이 없는 작업",
"also_found": [],
"baseline_hours": [],
"median_mh": null,
"presence_count": 0,
"presence_base": 0,
"env_project_count": 1,
"excluded_project_ids": [],
"evidence": [
{
"table": "estimate_tasks",
"field": "deal_id",
"agg": null,
"value": "D-2026-027"
},
{
"table": "estimate_tasks",
"field": "estimated_mh",
"agg": null,
"value": 24
},
{
"table": "worklogs",
"field": "issue_key",
"agg": null,
"value": "RWY-1502"
},
{
"table": "projects",
"field": "project_id",
"agg": "count",
"value": 0
}
],
"summary": "누리유통 Cloud·Pilot 견적은 같은 환경·단계로 끝난 구축이 한 건도 없어 견줄 중앙값이 없고, Cloud 에서 GPU 노드 풀을 구성한 기록도 온누리물류(RWY-1502, 16시간) 한 건뿐입니다. 같은 견적의 AI OS 설치·CI/CD 연동·모니터링도 Cloud 기록이 없어 모두 지난 실적이 없는 작업이고, 실적이 0건이라 빠진 작업은 찾지 않았습니다.",
"sa_note": "Cloud·Pilot 구축은 아직 끝까지 해 본 적이 없어 이 견적의 네 작업 모두 기준이 없습니다. 24MH 는 관리형 Kubernetes 노드 풀 하나를 붙인 온누리물류 16시간보다 길게 잡혀 있으니, Pilot 범위에서 노드 풀을 몇 개 둘지 Sales·PM 과 먼저 정해 주세요."
}
][자동 검증 · 코드가 판정합니다] 1. verdict 가 지난 실적 범위 안·지난 실적보다 적게 잡힘·지난 실적보다 많이 잡힘·지난 구축마다 있던 작업이 빠짐·지난 실적이 없는 작업 다섯 값 중 하나인지 확인합니다. 2. 필수 필드 deal_id·task_code·task_name·req_class·estimated_mh·verdict·also_found·baseline_hours·median_mh·presence_count·presence_base·env_project_count·excluded_project_ids·evidence·summary·sa_note 가 모두 존재하는지 확인합니다. 3. baseline_hours 를 다시 계산합니다. projects 에서 deal 과 같은 deploy_env·phase 이고 closed_at 이 null 이 아닌 프로젝트만 골라, 그 task_code 의 worklogs.logged_hours 를 프로젝트마다 더합니다. T-GPU-SETUP 의 PRJ-2025-003 은 RWY-1388 56 과 RWY-1421 40 을 더해 96 입니다. 4. closed_at 이 null 인 PRJ-2026-009 의 기록은 baseline_hours 에도 presence_count 에도 들어가지 않고 excluded_project_ids 에 들어가는지 봅니다. 5. median_mh 가 baseline_hours 의 중앙값과 같은지 다시 계산합니다. T-CICD 는 100·112·128·140 이라 (112 + 128) / 2 = 120 입니다. 6. env_project_count 가 2 보다 작으면 verdict 는 지난 실적이 없는 작업입니다. T-LLM-SERVING 은 1 입니다. 7. 6에 걸리지 않고 estimated_mh 가 median_mh × 0.7 보다 작으면 verdict 는 지난 실적보다 적게 잡힘입니다. 같은 값은 미달이 아니라서 T-CICD 의 84 = 120 × 0.7 은 범위 안입니다. 8. 6·7에 걸리지 않고 estimated_mh 가 median_mh × 1.5 보다 크면 verdict 는 지난 실적보다 많이 잡힘입니다. 같은 값은 넘지 않아 T-MON 의 60 = 40 × 1.5 는 범위 안입니다. 9. 6에 걸린 작업이 7·8에도 걸리면 그 값은 also_found 에 들어갑니다. T-LLM-SERVING 은 한 건 기준 120 × 0.7 = 84 보다 40 이 작아 also_found 에 지난 실적보다 적게 잡힘이 남습니다. 10. 이번 deal 의 estimate_tasks 에 없는 task_code 가 presence_count / presence_base 0.7 이상이면 verdict 는 지난 구축마다 있던 작업이 빠짐이고 estimated_mh 는 null 입니다. T-SSO 는 3/4 = 0.75 라 걸리고, T-DR 은 2/4 = 0.5 라 출력하지 않습니다. 11. 같은 deploy_env·phase 로 끝난 projects 가 0건이면(presence_base 0) 빠진 작업 판정을 하지 않고, 견적에 있는 작업은 env_project_count 로만 판정합니다. D-2026-027 Cloud·Pilot 은 이 경우라 네 작업 모두 지난 실적이 없는 작업입니다. 12. verdict 가 지난 실적 범위 안이면 sa_note 는 null 입니다. 13. evidence 의 table·field 가 estimate_tasks·worklogs·projects 에 실재하는 컬럼인지 대조합니다. 14. agg 가 없는 evidence 의 value 가 그 컬럼에 수록된 행의 값 원문과 같은지 확인합니다. agg 가 sum 인 값은 한 프로젝트의 그 작업 logged_hours 합계이고, worklogs.task_code 의 count 는 그 작업이 나온 프로젝트 수, projects.project_id 의 count 는 같은 환경·단계로 끝난 프로젝트 수입니다. 15. summary 와 sa_note 가 존댓말로 끝나는지 확인합니다. [수동 검증 · 사람이 봅니다] 1. 걸린 작업의 공수를 늘릴지 범위를 줄일지는 솔루션 아키텍트와 Sales·PM 이 화면을 함께 보고 정합니다. 화면은 판정과 근거만 보여주고 견적 금액은 바꾸지 않습니다. 2. sa_note 에 나온 시간과 이슈 키가 baseline_hours·worklogs 의 값과 맞는지 솔루션 아키텍트가 읽고 넘깁니다. [평가 러너 · 2주차] 1. 작성자가 지은 지난 구축 12건·견적 6건에서 손으로 계산한 작업 90개의 판정과 화면 판정이 같은 수를 셉니다. [확정 카드 판정식과 다른 점 · 오너 확인 항목] 1. 중앙값의 모집단: 카드는 '같은 deploy_env·phase 로 closed_at 이 찍힌 projects 마다 합계를 내고 그 중앙값' 이라 적었고, 이 편은 그 작업이 worklogs 에 나온 프로젝트만 셉니다. 작업이 없던 프로젝트를 0시간으로 넣으면 중앙값이 내려가 적게 잡힌 작업을 놓치기 때문입니다. 2. 판정 차례: 카드는 둘 이상 걸릴 때의 차례를 정하지 않았고, 이 편은 지난 실적이 없는 작업을 맨 앞에 둡니다. 한 건짜리 기준으로 낸 적게·많이 판정은 믿기 어려워 also_found 로만 보입니다. 3. 같은 deploy_env 로는 2건 이상 있지만 같은 phase 로 끝난 프로젝트에는 그 작업이 없어 중앙값이 비는 경우를 카드가 정하지 않아, 이 편은 그것도 지난 실적이 없는 작업으로 둡니다. 견줄 기준이 없다는 카드 취지와 같습니다. [출처 고지 · 공고 대조] 1. 공고에 있는 것은 공수 산정과 견적 지원입니다. 주요 업무 'PoC·Pilot·Production 단계별 Task, 예상 Man-Hour/Man-Month, 필요 Resource와 Milestone을 정의해 Sales·PM의 Scope와 견적 수립을 지원합니다' 와 우대 사항 '개발범위 및 Man-Month 산정 경험' 이 근거이고, 회사 소개가 Tech Coordination Team 의 일을 '예상 투입공수로 구체화' 로 적어, 공수 산정표가 솔루션 아키텍트가 만들어 Sales·PM 에 넘기는 산출물이라는 점도 공고 문장에서 나옵니다. 2. 공고에 없는 것은 지난 구축 실적으로 공수를 견주는 방법과 Jira 라는 출처입니다. 둘 다 공고에 한 번도 나오지 않으며, 마키나락스가 구축 실투입을 Jira 작업 기록으로 남긴다는 근거도 없습니다. 이 편은 그 두 가지를 데모를 위한 가정으로 두고, 실제 도입에서는 실투입을 남기는 도구와 작업 분류 체계를 먼저 확인합니다. 3. AI OS(Runway) 를 고객 인프라의 On-Premise·Cloud·Hybrid Kubernetes 에 구축한다는 사업 설명은 회사 브리프의 웹 조사(makinarocks.ai 회사 소개)에서 가져왔습니다.