재고가치 합계 125,000원이 맞아도 CSV 합치기는 실패할 수 있습니다. 가격표와 재고표에 모두 있는 P001부터 P004만 계산하면 합계는 맞지만, 가격표에만 있는 P005와 재고표에만 있는 P006이 결과에서 조용히 사라질 수 있기 때문입니다.
이번 글에서는 개인정보가 없는 가상 가격표와 재고표를 내려받아 product_code라는 상품코드로 연결합니다. 일치한 4건뿐 아니라 한 파일에만 있는 2건도 남기고, 계산 가능한 재고가치만 구한 뒤 원본 행 수와 고유 코드 수로 검산합니다. CSV를 처음 합치는 사람도 20분 안에 따라갈 수 있게 기초 용어부터 진행합니다.
가상 상품 가격표 CSV 내려받기 · 가상 재고표 CSV 내려받기 · 결합 정답 CSV 내려받기 · 계산식·검산표·실패 화면 PDF 내려받기
먼저 결론: 전체 상품코드를 남겨야 누락을 발견할 수 있습니다
- 가격표: 5행, P001부터 P005
- 재고표: 5행, P001부터 P004와 P006
- 전체 고유 상품코드: 6개, P001부터 P006
- 두 파일 모두에 있는 코드: 4개
- 가격표에만 있는 코드: P005 한 개
- 재고표에만 있는 코드: P006 한 개
- 단가와 수량을 모두 확인할 수 있는 재고가치 합계: 125,000원
결합 결과가 4행이면 계산된 숫자는 맞을 수 있어도 검토 대상 두 행을 잃은 것입니다. 이번 실습의 성공 기준은 합계만 맞히는 것이 아니라 결과 6행과 상태별 건수까지 맞히는 것입니다.
이 과정을 권하는 상황
- 서로 다른 두 CSV에 같은 상품이나 고객 코드가 있을 때 어떻게 연결할지 모르는 초보자
- VLOOKUP, XLOOKUP, 데이터베이스 조인을 배우기 전에 연결 원리를 쉬운 예시로 이해하고 싶은 사람
- AI가 만든 합계뿐 아니라 빠진 코드와 빈값까지 검토하고 싶은 업무 사용자
준비물: 위의 가격표 CSV, 재고표 CSV, ChatGPT 대화 화면, 정답 PDF입니다. 파일 첨부가 어렵다면 CSV 내용을 복사해 각각 ‘가격표’, ‘재고표’라고 표시해 붙여 넣어도 됩니다. 실제 업무 파일을 사용할 때는 이름, 연락처, 원가, 계약정보 등 민감한 값과 조직의 업로드 규칙을 먼저 확인하세요.
결과를 읽는 네 가지 열쇠
CSV
쉼표로 열을 나눈 표 형식의 텍스트 파일입니다. 엑셀처럼 행과 열로 볼 수 있지만 서식이나 여러 시트보다 데이터 자체를 전달하는 데 초점을 둡니다.
연결 키
두 표에서 같은 대상을 찾는 기준 열입니다. 이번에는 product_code입니다. 상품명이 비슷하다는 이유로 임의로 합치지 않고, 코드가 정확히 같은지를 먼저 봅니다.
일치 행과 미일치 행
같은 코드가 두 파일에 모두 있으면 일치 행입니다. 한 파일에만 있으면 미일치 행입니다. 미일치 행은 오류라고 바로 삭제할 대상이 아니라 담당자가 확인해야 할 목록입니다.
전체 코드 유지 연결
두 파일 중 어느 한쪽에라도 있는 코드를 모두 남기는 방식입니다. 데이터 작업에서는 전체 외부 조인(full outer join)이라고 부르기도 하지만, 이번 글에서는 ‘전체 코드 유지 연결’이라고 쓰겠습니다.
가장 쉬운 예시부터 보기
가격표의 P001은 노트, 단가 3,500원입니다. 재고표의 P001은 수량 12개입니다. product_code가 같으므로 한 행으로 연결하고 재고가치를 계산합니다.
P001 재고가치 = 3,500원 × 12개 = 42,000원
반대로 P005는 가격표에만 있습니다. 수량이 없으므로 재고가치를 계산하지 않습니다. P006은 재고표에만 있어 수량 5개는 알지만 단가와 상품명을 모릅니다. 빈값을 0이나 임의의 상품명으로 채우지 않고 확인 대상으로 남깁니다.
먼저 한 CSV의 열 이름부터 확인하는 연습이 필요하면 연습용 CSV 열 이름 확인하기를 보고 돌아와도 좋습니다.
20분 실습: 두 CSV를 안전하게 연결하는 7단계
1단계: 두 원본 CSV를 내려받고 복사본으로 시작합니다
product-price-practice.csv와 product-stock-practice.csv를 내려받습니다. 파일 이름을 바꾸더라도 원본은 별도로 보관합니다. 이번 가상 자료는 각각 헤더 한 줄과 데이터 다섯 행입니다.
성공 확인: 가격표에는 product_code, product_name, unit_price_krw 세 열이 있고 재고표에는 product_code, stock_qty 두 열이 있습니다.
2단계: 합치기 전에 열 이름과 행 수만 묻습니다
첨부한 두 CSV의 파일 이름, 열 이름, 데이터 행 수를 먼저 표로 보여 주세요. 아직 파일을 합치거나 값을 계산하지 마세요.
바로 합치기를 요청하면 잘못 읽은 파일이나 열을 뒤늦게 발견할 수 있습니다. 입력 구조를 먼저 고정하면 이후 결과를 사람이 대조할 수 있습니다.
성공 확인: 가격표는 3열·5행, 재고표는 2열·5행으로 표시됩니다.
3단계: 연결 키와 중복 여부를 확인합니다
두 파일에서 공통으로 있는 열을 찾아 주세요. product_code가 각 파일에서 비어 있거나 중복된 행이 있는지 확인하세요. 상품명으로 추측해 연결하지 마세요.
공통 열이 있다고 해서 바로 안전한 연결 키는 아닙니다. 빈 코드나 중복 코드가 있으면 한 상품이 여러 행으로 늘어날 수 있습니다. 이번 연습 파일에는 빈 코드와 중복 코드가 없습니다.
성공 확인: 공통 열은 product_code 하나이며, 두 파일 모두 빈값 0건·중복 0건입니다.
4단계: 전체 고유 코드를 먼저 나열합니다
두 파일의 product_code 전체 고유 목록을 작은 순서로 나열하세요. 두 파일에 모두 있는 코드, 가격표에만 있는 코드, 재고표에만 있는 코드를 각각 구분하세요.
결합 전에 전체 목록을 먼저 보면 결과에서 코드가 사라졌는지 쉽게 알 수 있습니다.
성공 확인: 전체는 P001·P002·P003·P004·P005·P006의 6개입니다. 공통 4개, 가격표 전용 P005, 재고표 전용 P006으로 나뉩니다.
5단계: 전체 코드 유지 방식으로 연결합니다
product_code 전체 고유 목록을 기준으로 두 파일을 연결하세요. 두 파일에 모두 있으면 MATCHED, 가격표에만 있으면 PRICE_ONLY, 재고표에만 있으면 STOCK_ONLY로 표시하세요. 없는 값은 추측하거나 0으로 채우지 말고 빈칸으로 남기세요.
이 단계가 가장 중요합니다. ‘공통 코드만 연결’이라고 하면 P005와 P006이 사라질 수 있습니다. 상태 열을 추가하면 왜 빈칸이 생겼는지 결과만 봐도 알 수 있습니다.
성공 확인: 결합 결과는 6행이며 MATCHED 4건, PRICE_ONLY 1건, STOCK_ONLY 1건입니다.
6단계: 계산 가능한 행만 재고가치를 구합니다
unit_price_krw와 stock_qty가 모두 있는 MATCHED 행만 inventory_value_krw = unit_price_krw × stock_qty로 계산하세요. P005와 P006은 계산하지 말고 빈칸으로 두세요. 행별 계산식과 합계를 함께 보여 주세요.
빈값을 0으로 바꾸면 실제 0원·0개인지 자료가 없는지 구분할 수 없습니다. 자료가 없다는 사실을 그대로 유지해야 담당자가 원인을 확인할 수 있습니다.
성공 확인: P001 42,000원, P002 36,000원, P003 20,000원, P004 27,000원이며 합계는 125,000원입니다.
7단계: 원본·결과·정답을 세 방향으로 검산합니다
마지막 검산표를 만들어 주세요. 가격표 행 수, 재고표 행 수, 전체 고유 코드 수, MATCHED·PRICE_ONLY·STOCK_ONLY 건수, 계산 가능한 재고가치 건수와 합계를 표시하세요. 각 수치가 어떤 원본 행에서 왔는지도 적으세요.
정답 CSV와 PDF를 열어 결과 6행과 상태를 한 줄씩 비교합니다. 숫자 합계만 같다고 끝내지 않습니다.
성공 확인: 원본 5행·5행, 고유 코드 6개, 상태 4·1·1, 계산 4건, 합계 125,000원이 모두 같습니다.
한 번에 복사해서 쓰는 완성 질문
첨부한 product-price-practice.csv와 product-stock-practice.csv를 확인하세요. 먼저 파일별 열 이름, 행 수, product_code의 빈값과 중복 건수를 보여 주세요. 두 원본은 바꾸지 마세요. product_code의 전체 고유 목록을 기준으로 연결하세요. 두 파일에 모두 있으면 MATCHED, 가격표에만 있으면 PRICE_ONLY, 재고표에만 있으면 STOCK_ONLY로 표시하세요. 없는 값은 추측하거나 0으로 채우지 말고 빈칸으로 남기세요. 재고가치는 단가와 수량이 모두 있는 MATCHED 행만 계산하세요. 결과를 product_code 순서의 CSV 표로 보여 주고, 마지막에 원본별 행 수, 고유 코드 수, 상태별 건수, 행별 계산식과 합계를 검산표로 적어 주세요.
실제 업무 파일에 적용할 때는 파일 이름, 연결 키, 계산할 열, 중복 처리 규칙만 바꾸면 됩니다. 코드 모양이 파일마다 다르면 먼저 공백, 대소문자, 앞자리 0을 확인해야 합니다.
정답표: 결합 결과 6행
| 코드 | 상품명 | 단가 | 수량 | 상태 | 재고가치 |
|---|---|---|---|---|---|
| P001 | 노트 | 3,500 | 12 | MATCHED | 42,000 |
| P002 | 볼펜 | 1,200 | 30 | MATCHED | 36,000 |
| P003 | 파일철 | 2,500 | 8 | MATCHED | 20,000 |
| P004 | 테이프 | 1,800 | 15 | MATCHED | 27,000 |
| P005 | 라벨스티커 | 900 | 빈칸 | PRICE_ONLY | 빈칸 |
| P006 | 빈칸 | 빈칸 | 5 | STOCK_ONLY | 빈칸 |
P005의 수량과 P006의 단가를 0으로 쓰지 않았다는 점을 확인하세요. 0은 확인된 값일 수 있지만 빈칸은 자료가 없다는 뜻입니다. 두 상태를 섞으면 나중에 재고 없음과 데이터 누락을 구분하기 어렵습니다.
손으로 2분 검산하는 방법
- 가격표 코드를 적습니다: P001, P002, P003, P004, P005.
- 재고표 코드를 적습니다: P001, P002, P003, P004, P006.
- 두 목록을 합쳐 중복을 지우면 P001부터 P006, 6개입니다.
- 공통 코드는 P001부터 P004, 4개입니다. 남은 P005와 P006은 각각 한쪽에만 있습니다.
- 42,000+36,000+20,000+27,000 = 125,000원을 계산합니다.
- 상태 건수 4+1+1=6이 결과 행 수와 같은지 확인합니다.
중복과 빈칸을 먼저 점검하는 별도 연습은 CSV 빈칸과 중복 행 찾기에서 이어서 할 수 있습니다.
실패 화면 재현: 맞는 합계 때문에 누락을 놓친 경우
아래 이미지는 실제 ChatGPT 화면을 캡처한 것이 아닙니다. P001부터 P004만 연결해 합계 125,000원을 맞혔지만 P005와 P006을 결과에서 누락한 상황을 설명하기 위해 직접 만든 교육용 편집 재현 화면입니다.

합계 125,000원은 틀리지 않았습니다. 문제는 어떤 코드가 연결되지 않았는지 알 수 없다는 점입니다. 숫자 정답과 데이터 완전성은 다른 검토 항목입니다.
여섯 오류를 고치는 순서
실패 1: 상품명으로 비슷한 행을 합칩니다
수정: 연결 키를 product_code로 명시하고, 코드가 없으면 추측하지 말고 미일치 목록으로 남깁니다.
실패 2: 공통 행만 남깁니다
수정: 두 파일의 전체 고유 코드를 유지하고 MATCHED, PRICE_ONLY, STOCK_ONLY 상태를 추가합니다.
실패 3: 빈 단가나 수량을 0으로 채웁니다
수정: 자료 없음과 실제 0을 구분하기 위해 빈칸을 유지합니다. 담당자 확인 후에만 값을 보완합니다.
실패 4: 연결 키의 중복을 확인하지 않습니다
수정: 결합 전 각 파일에서 product_code의 빈값과 중복 건수를 확인합니다. 중복 규칙이 없으면 합치기를 멈추고 사람의 판단을 요청합니다.
실패 5: 결과 행 수를 검산하지 않습니다
수정: 전체 고유 코드 수와 결합 결과 행 수를 비교하고, 상태 건수의 합도 같은지 봅니다.
실패 6: 원본 파일을 덮어씁니다
수정: 결과는 새 파일로 저장하고 원본 두 개는 그대로 보관합니다. 어떤 값이 바뀌었는지 변경 기록을 남깁니다.
공식 자료에서는 무엇을 강조하나요?
OpenAI의 스프레드시트 통합 사용 사례는 여러 내보내기 파일을 합칠 때 연결 키, 계산 규칙, 중복 규칙을 명시하고 연결되지 않은 레코드를 추측하지 말고 별도 검토 구역에 남기도록 안내합니다. 또한 원본을 보존하고 수식, 연결 결과, 미일치, 가정과 새로 고침 절차를 검토하는 흐름을 제시합니다.
OpenAI의 지저분한 데이터 정리 사용 사례는 원본 파일을 바꾸지 않은 정리 복사본을 만들고, 변경·제거·확신하지 못한 행을 데이터 품질 메모에 남기며 다음 작업에 쓰기 전에 결과를 열어 검토하도록 안내합니다.
이번 글의 P001부터 P006, 상품명, 단가, 수량, 125,000원 계산은 공식 문서의 데이터가 아닙니다. 위 원칙을 초보자가 손으로 검산할 수 있도록 이 글에서 직접 만든 가상 실습입니다.
어디까지 믿고, 어디서 사람이 확인해야 할까요?
- 두 파일의 연결 키가 같은 의미와 형식인지 원본 담당자가 확인합니다.
- 중복 코드가 있을 때 최신 행, 합계, 첫 행 중 무엇을 쓸지는 업무 규칙으로 정합니다.
- 미일치 코드는 오타, 신규 상품, 삭제된 상품, 파일 시점 차이 중 무엇인지 추가 확인합니다.
- 빈값을 AI가 추측해 채우지 못하게 하고 확인 전에는 계산에서 제외합니다.
- 결과 CSV를 발주, 회계, 재고 조정에 사용하기 전 계산식과 원본을 사람이 대조합니다.
- 실제 업무 파일의 개인정보·기밀정보·원가 정보는 조직의 보안 규칙에 따릅니다.
- ChatGPT의 파일 첨부 위치와 지원 기능은 계정, 기기, 설정, 업데이트에 따라 다를 수 있습니다.
결합 결과를 발주 계산으로 확장하려면 안전재고 기준 발주 수량 계산 실습을 이용하세요. 특정 상태를 제외한 합계가 맞는지 확인하려면 표에서 제외 조건 누락 찾기가 이어집니다.
완료 기준에 관한 질문
두 CSV의 열 이름이 다르면 합칠 수 없나요?
같은 의미의 키라는 근거가 있으면 연결 규칙을 명시할 수 있습니다. 예를 들어 product_code와 item_code가 같은 체계라는 확인이 필요합니다. 이름만 비슷하다고 AI가 결정하게 두지 않습니다.
P005와 P006을 서로 합치면 안 되나요?
안 됩니다. 두 코드가 다른데 같은 상품이라는 근거가 없습니다. 상품명이 한쪽에 없으므로 더더욱 추측할 수 없습니다.
왜 결과가 6행인가요?
가격표의 5개 코드와 재고표의 5개 코드를 합쳐 중복을 제거하면 P001부터 P006의 6개 고유 코드가 남기 때문입니다.
재고가치 합계 125,000원은 정확한가요?
이번 가상 데이터에서 단가와 수량이 모두 있는 네 행의 합계로 정확합니다. P005와 P006은 필요한 값이 없어 계산하지 않았습니다.
빈칸 대신 0을 넣으면 계산하기 편하지 않나요?
편할 수 있지만 의미가 달라집니다. 0은 확인된 값이고 빈칸은 자료가 없을 수 있습니다. 담당자 확인 없이 바꾸면 재고 없음과 누락을 구분하지 못합니다.
CSV를 합치면 원본도 바뀌나요?
이 실습에서는 바뀌지 않게 요청합니다. 결합 결과를 새 CSV로 만들고 원본 두 파일은 그대로 보관합니다.
실제 수천 행 파일에도 그대로 적용해도 되나요?
원리는 같지만 중복 키, 문자 인코딩, 코드 앞자리 0, 파일 시점, 성능 제한을 추가로 확인해야 합니다. 먼저 작은 복사본으로 규칙과 검산표를 시험하세요.
다음 단계 전 확인 목록
- 원본 두 파일을 보존했는가?
- 연결 키를 product_code로 명시했는가?
- 연결 전 빈값과 중복을 확인했는가?
- 전체 고유 코드 6개를 유지했는가?
- 상태 건수 4·1·1이 맞는가?
- 미일치 값을 추측해 채우지 않았는가?
- 계산 가능한 4행의 합계 125,000원을 손으로 검산했는가?
- 정답 CSV와 PDF를 한 줄씩 대조했는가?
편집·검증 기록
작성: AI플레이집 편집팀 · 검수: Codex 자동화 편집 검수 · 최종 확인일: 2026-08-17
AI 활용 공개: 초안 구성, 가상 CSV 결합 규칙, 자체 제작 이미지와 PDF 생성에 AI 도구를 사용했습니다. 공개 글 56편과의 제목·검색 의도 중복, 공식 출처, 원본 CSV 2개, 정답 CSV 6행, 상태 건수, 계산식과 합계, PDF 3쪽, 실패 화면 표시, 링크와 공개 상태는 별도로 검수했습니다.
잘못된 계산이나 깨진 파일을 발견하면 정정 정책에 따라 알려 주세요. 확인 후 근거와 수정 이력을 남기겠습니다.
설명 범위를 정한 공식 자료
- OpenAI — Consolidate spreadsheets (확인: 2026-08-17)
- OpenAI — Clean and prepare messy data (확인: 2026-08-17)
