기본 콘텐츠로 건너뛰기

SAP QM 검사로트 일괄합격 일탈, CSV가 놓친 한 가지

 

3편에서 As-is 산출물의 결정 트리거를 정리했고, 4편에서 CBO 개발의 3단계 위계를 다뤘다. 그러나 자료를 결정으로 읽지 못하고 문서로 쌓아둔 결과가 어떻게 나타나는지는 별개의 이야기다. PCE 전환 프로젝트가 운영 개시 직후 2026년 1월 초에 마주한 품질재고 일괄 합격 일탈 사례를 본다. 사건은 GMP 사이트 9곳을 포함한 10개 플랜트에서 동시에 발생했고, 그 원인은 CSV 테스트 단계에서 놓친 한 가지에 있었다. 이 사례는 CSV의 절차의 중요성 만큼 테스트 설계의 내용이 중요하다는 교훈을 남겼다.

일탈의 모습 — 생산오더 빈값에서 시작된 일괄 합격

검사로트 한 건이 전체 플랜트의 검사대기 재고를 끌고 갔다.

LIMS(외부 품질관리 시스템)에서 SAP로 시험 결과를 보내면, SAP는 해당 검사로트를 합격으로 판정하고 재고 상태를 품질재고 → 가용재고로 전환한다. 정상은 해당 검사로트에 대해서만 판정이 적용되어야 한다. 그러나 운영 개시 직후 발생한 일탈은 3~4초 간격으로 동일 시점 검사대기 재고가 일괄 가용으로 전환되는 현상이었다.

원인의 출발점은 한 가지였다. 생산오더 값이 빈값(blank)으로 산출된 검사로트. PCE 마이그레이션 시 생산입고 검사유형(코드 04)의 검사로트는 생산오더와 함께 정상 이관되었다. 그러나 LIMS에서 판정 결과를 수신할 때, 검사로트와 생산오더를 매핑하는 마이그레이션 매핑 테이블 조회에서 일부 로트의 생산오더가 빈값으로 반환됐다. 이 빈값이 다음 단계의 SQL 조회 조건으로 들어가면서, 생산오더가 빈값인 모든 검사로트가 일괄 합격 처리 대상으로 포함됐다. 한 검사로트의 빈값이 플랜트와 무관하게 전사 검사대기 재고를 끌고 가는 구조가 그 짧은 순간에 작동한 것이다.

CSV 테스트가 놓친 한 가지 — 운영 환경 조건 미반영

테스트는 운영의 마이그레이션 상태를 그대로 재현하지 못했다.

PCE 전환의 CSV(Computer System Validation) 단계는 2차·3차 테스트로 구성된다. 이 단계의 핵심은 운영에서 발생할 모든 시나리오를 재현해서 검증하는 것이다. 본 사건의 원인 보고서는 이 지점을 명시한다. CSV 2차·3차 테스트 시 마이그레이션 매핑 테이블이 존재한 상태에서 테스트가 진행되어야 했으나, 해당 조건을 미반영한 채 테스트가 진행됐다.

매핑 테이블이 미반영된 상태로 테스트하면 어떤 일이 일어나는가. 테스트 데이터의 검사로트는 항상 정상 매핑된 상태로 들어오기 때문에, 빈값(blank) 분기는 코드 안에 있어도 호출되지 않는다. 그래서 빈값에서 발생하는 전체 검사로트 일괄 조회라는 잠재 결함이 테스트 통과로 처리된다. CSV 테스트의 본질은 코드 검증이 아니라 환경 조건 검증이라는 사실이 이 사건에서 드러난다. 운영 환경의 마이그레이션 상태가 정확히 복제되지 않으면, 코드는 통과해도 시스템은 깨진다. 이 잠재 결함은 Z로 시작하는 두 인터페이스 프로그램에 잠복해 있었다 첫째 프로그램은 생산오더 빈값 시 SQL 조건 약화, 둘째 프로그램은 오픈 검사데이터 처리 로직 누락.

검출과 보완, CAPA로 이어진 전수 CBO 검토

즉각 차단 → 원복 → 로직 보완 → 재현 시험 → 운영 반영의 5단계.

운영 개시 직후 수 시간 내에 일탈이 식별되었고, LIMS의 인터페이스 수신을 즉시 차단하는 비상 대응이 가동됐다. 영향 받은 검사로트는 재고 상태 원복(가용 → 품질) 처리되었고, MB51 전환 이력SXI_MONITOR 로그로 정상 처리 여부가 검증됐다. 로직 보완은 두 갈래였다 — 생산오더 빈값 시 SQL 미수행 분기를 추가하고, 오픈 검사데이터 처리 로직을 보강했다. 보완본은 DSQ(품질) 환경에서 재현 시험을 거쳐 운영에 반영됐다. 사건 자체는 데이터 무결성이 유지된 상태로 신속 원복됐고, 실물(재고)에 대한 추가 영향은 없는 것으로 검증됐다.

이 사건의 진짜 출구는 단순 로직 패치가 아니라 CAPA(Corrective and Preventive Action)다. 전사 영향이 가능한 Critical 로직임을 인식하고, PCE 전환 과정에서 개발·수정된 모든 CBO를 전수 검토하는 결정이 내려졌다. 우선 검토 대상은 시험 결과 처리, 재고 상태 전환, GxP 영향 가능성이 있는 기능이다. 이는 1·3·4편에서 본 CBO 분류 결정이 시작 단계에 끝나지 않았을 때의 후처리 비용이 무엇인지 보여주는 사례다.

한 줄로

테스트 통과는 운영 안전을 보장하지 않는다, 운영 환경의 조건이 테스트에 반영되어야 비로소 보장된다. 마이그레이션 매핑 테이블, Open Item 분기, 빈값 처리 이런 환경 조건은 코드 리뷰가 아니라 시나리오 설계에서 잡힌다. 본격 개발에 들어가기 전, As-is 분석 단계의 데이터 마이그레이션 조건 인벤토리가 시나리오 설계의 입력값으로 들어와야 하는 이유다. 이 사건을 겪고 나서, 테스트 시나리오를 설계할 때 가장 먼저 묻는 질문이 바뀌었다 — '이 코드가 맞는가'가 아니라 '이 환경 조건이 재현됐는가'

댓글

이 블로그의 인기 게시물

SAP Joule과 Generative AI in SAP / 2026 AI 카테고리의 진입

15편에서 2026 한국 SAP 시장의 풍경 과 다음 12개월의 결정점 세 가지 를 정리했고, 그 셋째가 AI 기능 확산 이었다. 20편은 그 셋째 결정점을 단독으로 들여다본다 SAP Joule이라는 어시스턴트 제품과, 그 너머의 Generative AI in SAP 카테고리. 이 글은 작가가 직접 운영해본 영역이 아닌 시장 자료와 SAP 공식 발표 기반의 트렌드 정리 다. 실제 적용 케이스가 누적되면 보강 글을 따로 낸다. SAP Joule 어시스턴트 카테고리의 등장 SAP Joule은 SAP 제품군 전반에 대화형 인터페이스 를 얹는 어시스턴트다. S/4HANA Cloud, SuccessFactors, BTP, Ariba 등 SAP 주요 제품에 공통 채팅 UI 가 들어가는 그림이다. 사용자가 자연어로 질문하면 Joule이 해당 제품의 트랜잭션이나 데이터를 가져다 답하는 흐름이다. SAP Sapphire 2023~2025의 발표에서 Joule은 전 제품 통합 어시스턴트 로 자리매김했다. Joule의 의미는 어시스턴트 자체 보다 카테고리의 등장 에 있다. SAP는 기존에 트랜잭션 코드(T-code) + Fiori 의 두 인터페이스 층을 가졌다. Joule은 그 위에 제3의 층 을 얹는다. 어떤 업무가 이 제3의 층 으로 넘어갈지, 어떤 업무는 여전히 Fiori·T-code에서 처리될지의 분류 결정 이 새로 추가된다. 시리즈 4편의 Clean Core 위계와 같은 결정 구조가 AI 카테고리에도 작동하게 된다. Generative AI in SAP Joule을 넘어선 카테고리 Joule은 어시스턴트 한 축이고, Generative AI in SAP는 그보다 넓은 카테고리다. BTP의 AI Core·AI Launchpad·Document Information Extraction 같은 기능형 AI 서비스 가 같은 카테고리에 들어간다. 어시스턴트 외에 문서 자동 처리, 마스터 데이터 자동 정제, 코드 생성 보조 같은 영역이 같은 우산 아래 묶이는 그...

BTP CAP 첫 개발 사이클 PCE 관성을 깨는 결정 3가지

13편에서 Integration Suite는 도구가 아니라 재설계 결정 3가지 라고 짚었다. 같은 본질이 BTP CAP 첫 개발 사이클에서 다른 모습으로 작동한다. 14편은 그룹사가 PCE 안에서 익숙하게 일하다가 BTP 위에서 CAP 첫 사이클을 시작할 때 마주하는 3가지 함정 을 정리한다. 이 글도 13편처럼 자료 누적형 예상 패턴 글이다. 작가 일반 지식과 시리즈 4·12·13편 자료를 기반으로 했고, 실제 CAP 사이클이 진행되면 보완 글을 따로 낸다. 언어 선택의 함정 PCE의 관성에서 벗어나기 CAP의 언어는 Node.js와 Java 둘이지만, 진짜 결정 은 언어가 아니라 관성이다. CAP(Cloud Application Programming Model)은 BTP 위에서 작동하는 SAP의 표준 개발 프레임워크다. Node.js 와 Java 양쪽을 지원하고, 같은 CDS(Core Data Services) 모델 위에서 두 언어가 동등하게 동작한다. 그룹사 첫 사이클에서 이 둘 중 하나를 고를 때, 흔한 함정은 기존 ABAP 개발자가 익숙해 보이는 쪽 을 고르는 것이다. 일반적으로 Java가 문법적으로 더 친숙 해 보여서 그쪽으로 기울고, 그 결정이 팀 역량 분석 없이 굳어진다. 이 결정의 진짜 비용은 코드 라인이 아니라 런타임의 무게 에서 나온다. BTP의 Cloud Native 환경에서 Node.js는 경량 스타트업과 작은 메모리 footprint 를 만들고, Java는 엔터프라이즈 패턴과 큰 컴퓨트 사용량 을 만든다. 12편의 누적 비용 모델이 여기서 작동한다. 작은 CAP 앱을 Java로 짜면 컴퓨트 사용량 이 비례 이상으로 늘어난다. 언어 선택은 팀 역량과 Cloud Native 적합도 의 균형으로 결정해야 한다. ABAP 관성이 Java 관성으로 바뀌고, Java 관성이 학습 미완료 상태의 운영 으로 이어지는 흐름이 가장 흔한 첫 사이클 실패다. 데이터 모델 함정 CDS의 자체성을 살리는 결정 PCE의 데이터 모델을 그...

2026 SAP 도입 동향 GROW·RISE·BTP의 한국 풍경

14편에서 PCE의 관성 이 BTP의 본질을 가린다고 짚었다. 그러나 이 관성도 시장의 풍경 이 바뀌면서 함께 움직인다. 15편은 시즌 1·2의 마지막 글이다. 한 그룹사 PCE 전환 사례에서 출발한 14편의 이야기를 2026 한국 SAP 시장의 풍경 속에 위치시키고, 다음 12개월의 결정점을 정리한다. 2026 한국 SAP 시장의 풍경 GROW · RISE · BTP 2026의 한국 SAP 시장은 세 가지 패키지 가 재편하고 있다. 첫째, GROW with SAP . 중견기업과 신규 도입 대상에 맞춰진 Public Cloud 기반 패키지다. 표준 프로세스를 받아들이는 대신 도입 속도와 비용 예측 가능성이 높다. 한국 시장에서는 그룹사가 아닌 단일 법인 중견기업 의 진입로로 자리 잡는 추세다. 둘째, RISE with SAP . 그룹사와 대기업의 마이그레이션 묶음 이다. S/4HANA Cloud(주로 PCE)와 BTP credit 이 함께 묶이는 구조라, 시즌 2의 11~12편이 다룬 라이센스 함정 과 CBO 전환 비용 의 시장 배경이 정확히 여기다. 셋째, BTP 단독 도입 . 기존 SAP 시스템 위에 BTP만 얹어 확장 측면 만 가져가는 모델이다. 그룹사 디지털 전환의 두 번째 단계 에서 흔히 선택된다. 한국 그룹사가 2026에 가장 많이 가는 길은 RISE 묶음 이다. 그 묶음 안에 PCE와 BTP가 어떻게 엮이는가 이게 시즌 2의 시그니처 메시지가 출발한 자리다. 2026의 의사결정자는 세 패키지 중 하나 가 아니라 세 패키지를 어떻게 조합하는가 를 결정한다. 단일 패키지를 고르는 시대는 지났고, 조합과 시점이 결정의 본체가 됐다. 이 풍경 속에서 시리즈 1~14편이 닿는 곳 시리즈 1~14편이 다룬 모든 결정이 2026 풍경의 디테일 이다. 시즌 1의 1~9편은 PCE 구축의 풀 라이프사이클 을 다뤘다 . RISE 묶음을 받은 그룹사가 마주하는 9개월의 실제 작업 이다. 1편의 코어보다 주변이 먼저 흔들린다 에서 시작해, 3편의 결...