SCM 일별 집계 검수: 시간대와 마감 경계
SCM 일별 집계의 기준 사건·업무 시간대·마감 경계를 고정하는 방법을 설명합니다. UTC 변환과 날짜 전용 값을 구분하고, 시작·종료 경계와 미확인 시각을 대조하는 인수표를 제안합니다.
이 글을 쓴 알파카랩스카카오·네이버·쿠팡 출신, 재하청 0%, 대기업·공공기관 등 18개사+ 레퍼런스
SCM 일별 집계는 기준 시각·시간대·마감 경계를 고정해 검수합니다. 2026-11-01 기준, 오프셋 없는 값은 합의 없이 변환하지 않습니다.
같은 주문이 채널에서는 전날, 통합 화면에서는 오늘로 보이는 상황을 가정해 보겠습니다. 시간을 UTC로 저장했더라도 어느 하루에 넣을지는 업무 규칙에 달려 있습니다. 이 글은 실제 고객 장애 사례가 아닌 설계 예시로, 일별 집계의 포함 구간을 확인하는 인수표를 제안합니다.
같은 하루를 비교하려면 무엇부터 정해야 하나요?#
기준 사건·업무 시간대·시작과 종료 경계를 한 묶음으로 정합니다. 주문 생성 시각과 출고 완료 시각은 서로 다른 지표를 만듭니다. 수신 시각이나 화면 조회 시각을 대신 넣으면 지연 수신 때문에 날짜가 바뀔 수 있습니다.
먼저 원천 필드가 주문 발생 시각인지, 주문일이라는 날짜 값인지 확인하세요. 다음으로 업무 책임자가 사용할 지역과 마감 시각을 정합니다. 그 정의를 고정한 뒤 집계와 상세 목록의 읽기 범위를 확인하는 절차는 SCM 조회 일관성 검수에서 이어집니다.
| 현재 차이 | 먼저 확인할 조건 | 받아야 할 증거 |
|---|---|---|
| 표시 날짜만 다름 | 같은 사건 시각을 서로 다른 지역으로 표시했는가 | 원천 값·해석한 시각·업무일 |
| 자정이나 마감 직전에 누락 | 시작 포함·종료 제외가 양쪽에서 같은가 | 경계 전후의 동일 식별자 목록 |
| 뒤늦게 받은 주문이 오늘로 이동 | 발생 시각과 수신 시각을 구별하는가 | 기준 사건·지연 수신 판정 이력 |
원천의 시각과 날짜를 어떻게 구별하나요?#
오프셋이 있는 시각, 지역만 약속된 현지 시각, 날짜 전용 값을 구별해 읽습니다. 오프셋은 특정 시각에서 UTC와의 차이를 나타냅니다. 지역의 시간대는 날짜에 따라 달라지는 규칙까지 다룰 수 있습니다.
| 원천 값 유형 | 해석 전제 | 검수·보류 기준 |
|---|---|---|
| 오프셋이 붙은 사건 시각 | 해당 사건 시각을 UTC와 비교 가능 | 업무 지역으로 변환한 뒤 포함 구간 판정 |
| 오프셋 없는 현지 시각 | 원천 계약의 지역·해석 규칙 필요 | 지역 근거가 없으면 자동 집계 보류 |
| 주문일 같은 날짜 전용 값 | 날짜가 뜻하는 업무 정의 필요 | 임의로 자정·UTC를 붙이지 않고 날짜 의미 유지 |
PostgreSQL 18의 날짜·시간 타입 공식 문서에 따르면 timestamp without time zone으로 결정된 값은 입력의 시간대 표시를 무시합니다. timestamptz는 시각을 UTC로 저장하지만 원래 시간대를 보존하지 않으며, 출력은 세션 시간대의 영향을 받습니다. 고정 18 문서의 게시일은 미표기이며 2026-11-01 확인했습니다. 이 설명은 해당 DB의 의미에 한정합니다.
따라서 원문 값·원천 필드 의미·적용한 지역·정규화한 시각·업무일을 대조할 수 있어야 합니다. 증거의 보관 범위와 접근 권한은 별도로 정하고, 개인정보가 든 전체 응답을 검수표에 복제하지 않습니다.
마감 경계에 걸린 주문은 어느 날에 넣나요?#
시작을 포함하고 종료를 제외하는 구간으로 경계 표본을 대조합니다. 아래에서는 2026-11-01 업무일을 Asia/Seoul의 04:00부터 다음날 04:00 직전까지로 정했습니다. 04시는 설명을 위한 가상 정책이며 고객의 운영 조건이나 업계 표준이 아닙니다.
이 예시의 UTC 구간은 2026-10-31 19:00 이상, 2026-11-01 19:00 미만입니다. 끝 시각을 양쪽 업무일에서 모두 포함하면 동일 주문을 겹쳐 넣게 됩니다. 초 단위 표본은 경계를 보여 주기 위한 것이며 실제 원천 정밀도에서도 바로 전·경계 값·바로 다음을 검사하세요.
| 독립 표본의 원천 시각 | Asia/Seoul 표시 | 11월 1일 업무일 판정 |
|---|---|---|
| 2026-10-31T18:59:59Z | 11-01 03:59:59 | 제외: 시작 전 |
| 2026-10-31T19:00:00Z | 11-01 04:00:00 | 포함: 시작 경계 |
| 2026-11-01T18:59:59Z | 11-02 03:59:59 | 포함: 종료 전 |
| 2026-11-01T19:00:00Z | 11-02 04:00:00 | 제외: 다음 업무일 시작 |
| 2026-11-01T04:00:00 | 지역·오프셋 미지정 | 원천 계약 확인 전 보류 |
마지막 표본은 한국시간이라는 계약이 확인되면 시작 경계로 판정할 수 있습니다. 같은 문자열을 일단 서버 기본 시간대로 읽고 나중에 화면만 한국시간으로 바꾸는 처리는 이 확인을 대신하지 못합니다.
개발사에 어떤 인수표와 조회 조건을 전달하나요?#
표본 식별자별로 원천 해석·포함 판정·화면 표기를 함께 받습니다. 시각을 비교할 수 있다는 판정과 업무일이 맞다는 판정을 나눠야 원인을 좁힐 수 있습니다. 정상값과 보류값 모두 기대 동작을 적으세요.
| 인수 항목 | 기대 동작 | 통과 증거 |
|---|---|---|
| 같은 순간의 다른 오프셋 표기 | 동일 사건 시각·같은 업무일 판정 | 변환한 UTC와 포함 여부 일치 |
| 시작·종료 경계 | 시작만 포함, 종료는 다음 업무일 | 인접 업무일 간 겹침·누락 없는 식별자 대조 |
| 지역이 미확인인 현지 시각 | 자동 보정 없이 확인 대상으로 분리 | 보류 이유와 집계 제외 표시 |
| 날짜 전용 필드 | 원천의 날짜 의미를 유지 | 시각 필드와 다른 매핑·변환 이력 |
| 수집이 늦어진 과거 사건 | 합의한 재집계·확정값 정정 규칙 적용 | 발생·수신 시각과 정정 승인·이력 |
다음 SQL은 occurred_at이 timestamptz인 가상 조회 사본의 읽기 조건입니다. PostgreSQL 18의 AT TIME ZONE 공식 정의를 바탕으로 경계의 지역을 명시했습니다. 문서 게시일은 미표기이며 2026-11-01 확인했습니다. 이 글에서 SQL 엔진으로 실행한 결과는 아니므로 실제 타입·드라이버·세션 설정에서 별도 검수해야 합니다.
SELECT event_id, occurred_at
FROM event_snapshot
WHERE occurred_at >= (
timestamp '2026-11-01 04:00:00'
AT TIME ZONE 'Asia/Seoul'
)
AND occurred_at < (
timestamp '2026-11-02 04:00:00'
AT TIME ZONE 'Asia/Seoul'
);하루의 시작과 다음날의 시작을 각각 지역 규칙으로 구합니다. 서버의 날짜 문자열을 잘라 비교하거나 세션 기본값에 맡기는 대신, 실제로 선택된 식별자 집합이 인수표와 같은지 확인하세요.
한국시간으로 통일해도 남는 실패 조건은 무엇인가요?#
해외 업무일은 해당 지역의 규칙을 확인해야 합니다. IETF가 2024년 4월 발표한 RFC 9557의 시간대·오프셋 정의는 둘을 구별하고, 지역 시각이 서머타임 변경 등으로 존재하지 않거나 중복될 수 있음을 설명합니다. 2026-11-01 확인했습니다. 고정 오프셋으로 하루를 더하는 방식은 지역의 다음 업무일 계산을 대신할 수 없습니다. 새벽 경계가 모호한 지역의 거부·선택 규칙도 합의하세요.
날짜가 맞아도 주문일·출고일·정산일은 서로 다른 기준입니다. 늦게 도착한 사건을 확정값에 반영할 권한과 정정 이력이 없으면 시간 변환을 고쳐도 운영 인수는 끝나지 않습니다. 과거에 유효했던 상태를 조회하는 문제는 업무 시점과 시스템 이력 검수로 구분해 확인하세요.
알파카랩스는 공개 SCM 운영대시보드 개발 서비스에서 원천별 지표·기준일·갱신 시각과 표본 대사 조건을 협의한다고 설명합니다. 자사 제공 범위에 관한 자기표기이며 이 글의 시간대 정책을 고객 시스템에 구현했다는 실적은 아닙니다. 기존 보고서 설정으로 해결되는지도 먼저 비교하고, 원장 수정·정산 확정은 별도 범위로 정합니다. 공개 페이지는 2026-11-01 확인했습니다.
SCM 일별 집계 검수 FAQ#
UTC로 저장하면 일별 합계도 자동으로 맞나요?
UTC 저장은 사건 시각을 비교하는 기준이 됩니다. 업무일은 어떤 사건을 어느 지역의 어느 시작·종료 구간에 포함할지 따로 정해야 합니다. 날짜만 잘라 집계하는 코드가 세션 시간대에 의존하는지도 확인하세요.
시간대가 없는 주문 시각은 한국시간으로 보면 되나요?
원천 계약에서 한국시간이라고 명시한 경우 그 조건으로 해석할 수 있습니다. 문자열만으로 지역을 알 수 없다면 서버나 브라우저의 기본 시간대로 채우지 말고 확인 대상으로 남깁니다. 날짜만 제공하는 업무 필드와도 구별해야 합니다.
자정 대신 새벽을 마감으로 써도 되나요?
업무 책임자가 기준 사건·지역·마감 경계를 합의했다면 그 구간으로 검수합니다. 본문의 한국시간 04시 정책은 설명을 위한 가상 예시이며 업계 표준이 아닙니다. 원천의 날짜 정의와 다르면 지표 이름과 비교 조건도 함께 표시해야 합니다.
timestamp with time zone이면 원래 지역도 남나요?
PostgreSQL 18에서는 UTC로 변환한 시각을 저장하며 원래 입력된 시간대는 보존하지 않습니다. 원천의 지역이나 원문 오프셋이 검수에 필요하면 별도 증거로 남길 항목을 정합니다. 다른 DB나 라이브러리도 같은 의미라고 가정하지 않습니다.
하루 늦게 받은 주문은 받은 날의 합계에 넣나요?
집계의 기준 사건과 지연 수신 정책에 따라 정합니다. 주문 발생일 기준이라면 수신일로 바꾸지 않고 해당 업무일의 재집계·확정값 정정 여부를 판정해야 합니다. 이미 마감한 자료의 수정 권한과 이력은 별도 인수 항목입니다.
업무일 경계 인수표를 먼저 채우세요#
비식별 원천 값과 기준 사건, 업무 시간대, 시작·종료 경계, 미확인 값의 처리 방식을 적으세요. 경계 전후의 기대 판정과 실제 식별자 목록을 대조하면 개발 범위와 남은 확인 항목을 정리할 수 있습니다. 자료 확인과 상담에 필요한 시간은 원천 계약의 준비 정도에 따라 협의합니다.
일별 집계의 경계를 함께 정리합니다
비식별 표본과 업무일 정의를 바탕으로 인수표 초안·원천 확인 항목과 개발 범위를 협의합니다. 시간·비용은 확인한 범위에 따라 정합니다.
업무일 인수 범위 협의