GS1 바코드 규격의 기본과 현장 운용의 주의점
· 업데이트: · Go Komura · GS1, 바코드, GTIN, GS1-128, GS1 DataMatrix, 재고 관리
수정 이력(4건, 최종 수정 2026년 09월 03일)
이 글에 적용한 변경 사항의 기록입니다. 보관해 둔 수정 전 버전은 DOI가 부여된 고정 URL에서 읽을 수 있습니다.
- permalink·저자 표기·지식 맵 래퍼·깨진 내부 링크 등 CI가 지적한 표시용 수정을 반영했습니다. 본문의 기술적인 주장은 바꾸지 않았습니다.
- 기사 맨 앞에 '이 글의 지식 맵' 절을 추가했습니다. 본문에서 다루는 개념과 그 관계를 요약·그림·상세 페이지 링크로 정리한 것입니다. 본문의 주장은 바꾸지 않았습니다.
- 외부 리뷰(1283건)에 대응해 본문을 갱신했습니다. 개별 변경 내용은 아래 이력을 참고하십시오.
- 용어 일람표와, AI를 연결한 실제 데이터 예(HRI, 각 AI 길이, 스캐너 출력, 가변 길이 AI를 중간에 둔 경우의 구분)를 추가했습니다. 바코드 구조를 quiet zone·심볼·X-dimension·HRI 대응표로 보이고, GTIN이 바뀌는 기준의 실제 예와 재사용 중지 안내가 국내용이라는 점을 덧붙였습니다.
- 최초 공개
이 글을 인용하기(DOI: 10.5281/zenodo.21635262)
이 글은 Zenodo에 보관되어 있습니다. 항상 최신 버전으로 연결되는 DOI와 지금 보고 있는 버전에 고정된 DOI를 아래에 함께 제시합니다.
Go Komura (2026). 「GS1 바코드 규격의 기본과 현장 운용의 주의점」. 합동회사 코무라소프트. https://doi.org/10.5281/zenodo.21635262 https://comcomponent.com/ko/blog/gs1-barcode-standards-practical-guide/
- DOI(최신 버전)
- 10.5281/zenodo.21635262
- DOI(이 버전)
- 10.5281/zenodo.21635263
바코드 상담에서 자주 일어나는 일은, JAN 을 붙이고 싶다, GS1-128 로 하고 싶다, QR 로 하고 싶다가 같은 레이어의 이야기로 섞이는 것입니다.
실제로는 먼저 나누어 생각해야 할 것이 있습니다.
- 무엇을 식별하고 싶은가
- 어떤 속성 정보를 담고 싶은가
- 어떤 심볼로 나타낼 것인가
- 읽은 뒤 상위 시스템에서 어떻게 해석할 것인가
GS1은 이 네 가지를 잇기 위한 표준이며, ‘번호를 붙이는 방법’뿐 아니라 데이터의 의미, 바코드라는 매체, 배치와 품질, 판독 후 처리까지 포함하는 계약입니다.1
아래는 2026년 4월 시점에서 확인할 수 있는 GS1 / GS1 Japan / 후생노동성 자료를 전제로 한 정리입니다.
목차
- 먼저 결론
- GS1에서 규격화되어 있는 레이어
- 실무에서 먼저 나누어야 할 용도
- GS1에서 정해져 있는 대표적인 규칙
- 실제 운용에서 빠지기 쉬운 포인트
- 규제나 업계 요건이 강한 예
- 도입을 진행하는 순서
- 정리
- 참고 자료
이 글의 지식 맵
이 글은 GS1 바코드 규격이 식별 코드·속성 정보·데이터 캐리어·판독 후 처리라는 서로 다른 레이어의 계약임을 정리한 실무 가이드입니다. 상품을 식별하는 GTIN은 로트나 유효기간, 일련번호까지 다루는 경우에는 GS1 애플리케이션 식별자(AI)로 속성을 추가해야 하며, SSCC·GLN과 함께 물류와 트레이서빌리티의 식별 키를 구성합니다. GS1-128·GS1 DataMatrix·GS1 QR 코드는 각각 Code 128·Data Matrix·QR 코드의 GS1용 subset이며, FNC1와 AI 구문, symbology identifier, HRI, quiet zone, X-dimension과 같은 표현·품질 규칙을 따라야 비로소 올바르게 동작합니다. 일본에서는 한 번 사용한 GTIN을 원칙적으로 재사용할 수 없고, 소매 2D 전환도 당분간은 선형 바코드와의 병기가 전제가 되는 등, 운영상 제약도 설계에 반영해야 합니다.
flowchart LR
accTitle: GS1 바코드 규격의 지식 맵
accDescr: GS1 표준이 GTIN·GS1 애플리케이션 식별자·SSCC·GLN이라는 식별 코드군과 GS1-128·GS1 DataMatrix·GS1 QR 코드라는 데이터 캐리어군, FNC1·symbology identifier·HRI·quiet zone·X-dimension이라는 표현과 품질 규칙을 한데 묶는다는 점, GTIN 재사용 금지와 소매 2D 전환이라는 운영상 제약을 보여주는 그림
gs1_standard["GS1 표준(모듈러스 10 가중치 3-1)"]
gtin["GTIN(Global Trade Item Number)"]
gs1_ai["GS1 애플리케이션 식별자(AI)"]
sscc["SSCC(출하 포장 일련번호)"]
gln["GLN(Global Location Number)"]
gs1_128["GS1-128"]
code128["Code 128"]
gs1_datamatrix["GS1 DataMatrix"]
data_matrix_symbol["Data Matrix"]
gs1_qrcode["GS1 QR 코드"]
qr_code["QR 코드"]
fnc1["FNC1(기능 문자)"]
symbology_identifier["심볼로지 식별자"]
hri["HRI(Human Readable Interpretation)"]
quiet_zone_barcode["콰이어트 존"]
x_dimension_barcode["X 치수(X-dimension)"]
ean_upc["EAN/UPC(JAN 심볼)"]
asn["ASN(사전 출하 명세)"]
gtin_reuse_prohibition["GTIN 재사용 원칙 금지"]
gs1_general_specifications["GS1 General Specifications(종합 사양서)"]
gs1_2d_migration["소매 2D 전환"]
gs1_standard -->|"이용한다"| gtin
gs1_standard -->|"이용한다"| gs1_ai
gs1_standard -->|"이용한다"| sscc
gs1_standard -->|"이용한다"| gln
gtin -.->|"전제로 한다"| gs1_ai
gs1_128 -->|"이용한다"| code128
gs1_datamatrix -->|"이용한다"| data_matrix_symbol
gs1_qrcode -->|"이용한다"| qr_code
gs1_128 -->|"이용한다"| fnc1
gs1_standard -.->|"이용한다"| symbology_identifier
gs1_standard -->|"이용한다"| hri
gs1_standard -->|"이용한다"| quiet_zone_barcode
gs1_standard -->|"이용한다"| x_dimension_barcode
ean_upc -->|"전제로 한다"| gtin
gs1_128 -->|"이용한다"| gs1_ai
gs1_datamatrix -->|"이용한다"| gs1_ai
gs1_qrcode -->|"이용한다"| gs1_ai
asn -.->|"이용한다"| sscc
gtin -.->|"전제로 한다"| gtin_reuse_prohibition
gs1_general_specifications -->|"구현을 담당한다"| gs1_standard
gs1_2d_migration -.->|"전제로 한다"| ean_upc
gs1_2d_migration -.->|"이용한다"| gs1_datamatrix
gs1_2d_migration -.->|"이용한다"| gs1_qrcode
그림의 실선은 항상 성립하는 관계, 점선은 조건이 붙는 관계입니다(성립 조건은 상세 페이지의 관계별 설명에 적혀 있습니다). 관계 전체 목록(총 23건, 근거와 확신도 포함)과 주요 개념의 정의는 지식 맵 상세 페이지에 정리되어 있습니다(일본어). 데이터: JSON-LD / Turtle
1. 먼저 결론
GS1 주변 실무에서 먼저 잡아 둘 점은 다음 다섯 가지입니다.
-
GTIN과 바코드의 종류는 별개입니다. GTIN은 상품 식별 코드이고, EAN/UPC, ITF, GS1-128, GS1 DataMatrix, GS1 QR 코드는 그 표현 방식입니다. 이 둘을 섞으면 설계가 무너집니다.23
-
GTIN만으로는 부족한 경우가 많습니다. 로트 번호, 유효기간, 시리얼 번호까지 다루려면 GS1 애플리케이션 식별자(AI)로 속성을 따로 담아야 합니다.4
-
POS, 물류, 추적성에서는 맞는 심볼이 다릅니다. 소비자용 POS는 GTIN 중심, 물류는 GTIN-14나 SSCC, 추적성이나 규제 분야는 GTIN에 로트·기한·시리얼을 더하는 형태가 기본입니다.25
-
실제 운용의 사고는 인쇄 자체보다 수신 측에서 일어납니다. FNC1, 가변 길이 AI의 구분, 스캐너 설정, 심볼 체계 식별자, 상위 시스템의 파서, 상품 마스터 갱신 규칙까지 정해 두지 않으면 읽혀도 쓸 수 없습니다.43
-
소매의 2D 이행은 진행 중이지만 아직 이행기입니다. GS1의 소매용 2D 가이드는, POS가 2D를 충분히 지원할 때까지 2D뿐 아니라 POS용 선형 바코드를 병기한다는 전제를 둡니다.67
결국 바코드 생성부터 들어가기보다, 누가, 어디서, 무엇을 읽고, 어떤 업무에 쓰는가부터 정하는 편이 실패하지 않습니다.
이후 장에는 GS1 약어가 많이 나옵니다. 여기만 먼저 알아 두면 읽기 쉽습니다.
| 약어·용어 | 정식 명칭 | 가리키는 것 |
|---|---|---|
| GTIN | Global Trade Item Number | 상품을 식별하는 번호. 일본의 JAN 코드도 GTIN의 일종 |
| AI | Application Identifier(애플리케이션 식별자) | 뒤에 이어지는 데이터의 의미와 형식을 정하는 2자리에서 4자리 숫자 |
| SSCC | Serial Shipping Container Code(출하 포장 시리얼 번호) | 팔레트나 케이스 등 물류 단위를 하나씩 식별하는 번호 |
| GLN | Global Location Number | 기업, 사업소, 출하처 같은 ‘장소’를 식별하는 번호 |
| FNC1 | Code 128 등이 가진 기능 문자(Function 1) | GS1 표준 바코드에서 쓰는 제어 기호. GS1 데이터임을 알리고, 가변 길이 데이터를 구분할 때 사용 |
| HRI | Human Readable Interpretation | 바코드 옆에 사람이 읽을 수 있는 형태로 인쇄하는 문자. (01) 같은 괄호 표기는 여기에 사용 |
| ASN | Advanced Shipping Notice(사전 출하 명세) | 출하 측이 수령 측에 먼저 보내는 출하 내용 데이터. SSCC와 조합해 검품을 간소화 |
| X-dimension | X-dimension | 바코드에서 가장 가는 바 한 개의 폭. 판독 거리와 판독률에 직결 |
| quiet zone | quiet zone | 심볼 양끝에 필요한 여백. 줄이면 읽히지 않게 됨 |
2. GS1에서 규격화되어 있는 레이어
2.1 식별 코드
GS1에는 먼저 ‘무엇을 식별하는가’를 위한 식별 키가 있습니다.
상품을 식별하는 대표가 GTIN입니다. GTIN에는 GTIN-8 / 12 / 13 / 14가 있고, 일본에서는 GTIN-13과 GTIN-8이 JAN 코드로 널리 쓰입니다. GTIN-13은 단품이나 최소 거래 단위, GTIN-14는 케이스나 중포장 등 집합 포장에 사용됩니다.2
물류 단위를 식별하는 대표는 SSCC입니다. 팔레트나 케이스 같은 포장에 SSCC를 붙이고 출하 데이터와 연결해 수령 검품을 간소화하는 것은 GS1에서 흔히 쓰는 방식입니다.5
여기서 중요한 점은, GTIN은 ‘어느 상품인가’를 나타내는 키이지, 로트나 기한을 겸하지 않는다는 것입니다. 로트와 기한은 다른 레이어에 둡니다.
2.2 속성 정보의 의미를 정하는 AI
GTIN에 추가로 담을 속성은 GS1 애플리케이션 식별자(AI)로 정의합니다. AI는 2자리에서 4자리 숫자이며, 뒤에 이어지는 데이터의 의미와 포맷을 정합니다.43
대표 예만 듭니다.
(01)GTIN(00)SSCC(10)로트 / 배치 번호(17)유효기간(21)시리얼 번호
GS1에서 중요한 것은 ‘숫자열을 읽는 것’이 아니라, 그 숫자열을 같은 의미로 해석하는 것입니다. AI가 있으면 여러 데이터를 바코드 하나에 넣어도 수신 측이 의미를 잘못 해석하기 어렵습니다.4
2.3 데이터 캐리어로서의 바코드 심볼
다음으로 ‘그 데이터를 무엇으로 나타낼 것인가’가 데이터 캐리어입니다. GS1 세계에서는 이것도 나누어 생각합니다.18
GTIN만 나타내는 용도에서는 EAN/UPC(일본에서는 JAN 심볼)나 ITF가 지금도 널리 쓰입니다. 한편 날짜나 로트 번호 같은 추가 속성까지 나타내려면 GS1-128, GS1 DataMatrix, GS1 QR 코드 등이 후보가 됩니다.3
여기서 자주 오해하는 점은, GS1-128은 ‘Code 128 그 자체’가 아니다는 것입니다. 마찬가지로 GS1 DataMatrix는 Data Matrix의, GS1 QR 코드는 QR 코드의 GS1용 subset입니다. GS1 규칙을 따른다는 표시로 FNC1을 쓰고, AI 구문으로 데이터를 배열합니다.83
즉 Code 128 을 만들 수 있다와 GS1-128 을 올바르게 만들 수 있다는 같은 의미가 아닙니다.
2.4 배치, 크기, 품질, HRI
GS1 종합 사양서는 식별 코드와 AI뿐 아니라 심볼 크기, X-dimension, quiet zone, 배치, 품질 평가, Human Readable Interpretation(HRI)까지 다룹니다.1
이 때문에 바코드를 디자인 부품처럼 적당히 축소·확대하면 안 됩니다. 특히 물류용이나 고속 POS용에서는 인쇄 품질과 배치가 판독률에 직결됩니다. 소매용 2D 가이드에서도 배치와 여러 바코드의 운용이 POS 처리 속도 유지에 직결된다고 합니다.6
3. 실무에서 먼저 나누어야 할 용도
3.1 소비자용 POS
계산대에서 빠르게 읽는 용도에서는 먼저 GTIN을 안정적으로 읽는 것이 최우선입니다. 추가 속성을 넣고 싶은 경우는 늘고 있지만, 지금은 이행기이며 2D뿐 아니라 선형 바코드를 병기해야 할 때가 있습니다.67
그래서 ‘이제 QR 시대이니 전부 2D로 한다’는 결정은 위험합니다. POS 스캐너가 읽는지만이 아니라, 호스트 POS가 무엇을 받아 무엇을 쓸 수 있는지까지 확인해야 합니다.67
3.2 물류·입출하·SCM 라벨
물류에서는 케이스나 팔레트 단위 식별, 수령 검품, 출하 데이터와의 대조가 중심입니다. 이 맥락에서는 GTIN-14나 SSCC와 GS1-128의 조합이 지금도 꽤 강합니다.25
물류에서는 ‘무엇을 넣었는가’보다 ‘어느 단위를 어느 데이터와 연결하는가’가 중요합니다. 바코드 단독이 아니라 ASN이나 출하 실적 데이터와 세트로 설계하는 편이 자연스럽습니다.
3.3 추적성·규제 분야
의료, 식품, 안전 관리, 기한 관리에서는 GTIN만으로 부족한 경우가 많습니다. GTIN에 로트, 유효기간, 시리얼 번호를 더해 개품이나 로트 단위로 추적할 수 있게 합니다.49
GS1 DataMatrix 가이드라인에서도 GS1 DataMatrix는 주로 오픈 시스템에서의 이용을 전제하며, 거래 상대가 같은 데이터를 같은 의미로 읽는 것이 전제입니다.8
여기서는 인쇄할 수 있는지보다, 거래처와 규제 당국까지 포함해 같은 의미로 흘릴 수 있는지가 중요합니다.
4. GS1에서 정해져 있는 대표적인 규칙
4.1 GTIN은 마음대로 돌려 써도 되는 번호가 아닙니다
GTIN 채번에서는 ‘이전 상품과 같은 번호를 그대로 써도 되는가’가 중요합니다. GS1 Japan은 ‘GTIN이 바뀌는 10가지 기준’으로 정리하고 있습니다. 밑바탕의 판단 축을 거칠게 모으면 다음 세 가지입니다.10
- 소비자나 거래 상대가 이전 상품과 구별하고 싶어 한다
- 규제나 책임 공개 요건이 있다
- 출하, 보관, 수령 등 공급망에 영향을 주는 중요한 변경이 있다
실무에서는 크기, 내용량, 포장 형태, 판매 단위, 표시 책임과 관련된 변경에서 헷갈리기 쉽습니다. 여기를 영업 판단만으로 운용하면 EC, 수발주, 재고, 마스터 연계에서 나중에 어긋납니다.
10가지 기준 가운데 현장에서 판단이 흔들리기 쉬운 것을 세 가지만 듭니다.10
- 상품 표시 변경을 동반하는 순내용량 변경. 예를 들어 500g을 480g으로 바꾸는 경우입니다
- 포장 외형 치수, 또는 총중량 변경 정도가 20%를 넘는 경우. 내용물이 같아도 포장 형태가 바뀌면 물류 측 전제가 바뀝니다
- 집합 포장의 구성 수량 변경. 케이스 12개입을 10개입으로 바꾸는 식의 변경입니다
반대로 ‘이것은 바꾸지 않아도 되겠지’로 오해하기 쉬운 것이, 판촉을 위해 기간 한정으로 포장을 바꾸거나 경품·견본을 붙인 경우입니다. 이것도 GTIN이 바뀌는 쪽의 기준에 포함됩니다. 내용물이 같아도 거래 단위로는 다른 것으로 다루어야 한다는 생각입니다.
나아가 일본에서는 2019년 이후, 한 번 사용한 GTIN의 재사용은 원칙적으로 할 수 없습니다.11
이 2019년이라는 시점은 GS1 Japan이 국내용으로 안내하는 것입니다.11 해외 거래처나 글로벌 EC가 얽히면 상대국 GS1 회원 조직의 운용과 GS1 종합 사양서 쪽 규칙도 함께 확인해야 합니다. 같은 ‘재사용 불가’라도 시작 시기나 경과 조치까지 같다고 할 수 없습니다.
이를 모르고 GTIN을 ‘비면 재사용할 수 있는 사내 코드’처럼 다루면 옛 상품 정보나 EC 이력과 충돌합니다. 상품 마스터와 외부 공개 데이터까지 포함해, GTIN은 장기적으로 의미를 유지하는 키로 보는 편이 안전합니다.
4.2 AI에는 고정 길이와 가변 길이가 있습니다
GS1 AI에서는 뒤에 이어지는 데이터가 고정 길이인 것과 가변 길이인 것이 있습니다. 고정 길이가 아닌 AI 뒤에 다른 요소를 이을 때는 FNC1로 구분해야 합니다. GS1 구문 사전에서도 정의된 길이의 AI에는 *가 붙어 FNC1이 불필요함을 나타냅니다.4
예를 들어 로트 번호 AI (10)은 가변 길이입니다. 뒤에 다른 AI를 연결하려면 수신 측이 (10) 값이 어디서 끝나는지 판단할 수 있어야 합니다. 여기를 대충 구현하면 겉모습은 비슷한데 파싱할 수 없는 바코드가 됩니다.
실무에서는 고정 길이 요소를 앞에, 가변 길이 요소를 뒤로 모으면 구분이 줄어 꽤 안정됩니다.12
글로 쓰면 이런 뜻입니다. GTIN, 유효기간, 로트 번호를 하나에 모은 예를 듭니다. HRI 표기는 다음과 같습니다.
(01)04912345678904(17)260331(10)ABC123
각각의 길이는 다음과 같습니다.
| AI | 내용 | 길이 |
|---|---|---|
(01) |
GTIN | 정의된 길이(14자리) |
(17) |
유효기간 YYMMDD | 정의된 길이(6자리) |
(10) |
로트 / 배치 번호 | 가변 길이(최대 20자) |
가변 길이 (10)을 마지막에 두었으므로 구분은 필요 없습니다. 이를 GS1-128로 읽었을 때 스캐너 출력은 앞에 심볼 체계 식별자가 붙어 다음과 같습니다. 괄호는 사라집니다.3
]C101049123456789041726033110ABC123
한편 같은 세 요소를 ‘로트가 먼저, 유효기간이 뒤’로 배열하면 가변 길이 (10)이 중간에 들어갑니다. 이때는 (10) 값이 어디서 끝나는지를 수신 측에 알려야 하므로 구분으로 FNC1이 들어갑니다. FNC1은 스캐너에서는 GS(ASCII 29)로 전달됩니다.
HRI : (01)04912345678904(10)ABC123(17)260331
스캐너 출력 : ]C10104912345678904 10ABC123 <GS> 17260331
(가독성을 위해 공백을 넣었습니다. 실제로는 연속된 하나의 문자열입니다)
즉 고정 길이를 앞에 두는 규칙은 겉모습 정리가 아니라, 수신 측 파싱을 한 단계 쉽게 하기 위한 설계입니다. 가변 길이를 중간에 둘수록 구분 누락이 늘어납니다.
4.3 FNC1은 문자가 아니라 제어 기호입니다
FNC1은 ‘FNC1이라는 문자를 넣는다’는 뜻이 아닙니다. GS1 Japan 베이직 가이드에서도 FNC1은 GS1 표준 바코드에 쓰는 제어 기호이며, 심볼 선두에서 GS1 데이터임을 나타내거나 데이터 구분자로 쓰인다고 정리합니다.3
게다가 표현 방법은 바코드 종류마다 같지 않습니다. 예를 들어 GS1 QR 코드에서는 모드 지시자나 데이터 구분자의 취급이 1D와 같지 않습니다.3
핵심은 내부 표현, 스캐너 출력, HRI 표시를 같은 문자열로 보지 않는 것입니다.
4.4 스캐너가 돌려주는 문자열도 규격의 일부로 보는 편이 낫습니다
현장 연계에서 놓치기 쉬운 것이, 스캐너가 디코드 뒤에 붙이는 심볼 체계 식별자입니다. GS1 Japan 자료에서는 예를 들어 GS1-128이 ]C1, GS1 DataMatrix가 ]d2, GS1 QR 코드가 ]Q3로 상위 시스템에 통지되는 예가 나옵니다.3
이것은 바코드에 그대로 인쇄된 것이 아니라, 스캐너가 ‘어떤 종류의 심볼을 읽었는지’를 덧붙여 보내는 정보입니다. 즉 수신 측은 다음 중 하나를 먼저 정해야 합니다.
- 심볼 체계 식별자를 받아 처리를 분기한다
- 스캐너 쪽에서 억제 / 변환하고, 앱 쪽은 정규화된 문자열만 받는다
여기를 정하지 않은 채 UI나 DB를 먼저 만들면, 검품 단말을 바꾸는 순간 일치 판정이 전부 무너집니다.
4.5 2D를 올리면 바로 바꿀 수 있는 것은 아닙니다
GS1 소매용 2D 가이드에서는 2D 바코드가 장래의 중심 후보이지만, 당분간은 이행 기간이며, POS의 2D 지원이 충분히 퍼질 때까지 2D뿐 아니라 선형 바코드를 병기해야 한다고 합니다.6
또한 같은 2D라도 GS1 DataMatrix는 비교적 읽기 쉬운 편이지만, GS1 Digital Link를 쓰는 QR / Data Matrix의 처리는 최신이거나 갱신된 카메라식 스캐너와 호스트 측 지원 상황에 좌우됩니다.67
‘읽을 수 있는 스캐너가 있다’와 ‘자사 POS / WMS / ERP에서 업무로 쓸 수 있다’는 별개입니다.
5. 실제 운용에서 빠지기 쉬운 포인트
5.1 GTIN을 상품 마스터의 버전 관리 없이 덮어씁니다
GTIN의 의미를 도중에 바꾸거나, 과거의 GTIN에 다른 상품을 할당하면 EC, 수발주, 재고, 분석, 장표, 데이터베이스 등록이 전부 서서히 깨집니다.1011
실무에서는 GTIN을 채번하는 담당과 상품 마스터를 갱신하는 담당, 라벨을 내는 담당이 나뉘어 있는 경우가 많습니다. 그래서 채번 규칙뿐 아니라 변경 신청과 이력 관리의 흐름까지 만들어 두는 편이 안전합니다.
5.2 ‘괄호가 붙은 문자열’을 그대로 입력 사양으로 삼습니다
GS1 설명 자료나 HRI에서는 AI를 (01)이나 (17)처럼 괄호로 나타내는 경우가 많습니다. 사람이 보고 의미를 구별하기 쉽게 하기 위해서입니다.6
한편 스캐너 출력이나 내부 파싱에서는 FNC1이나 심볼 체계 식별자를 포함한 다른 표현이 됩니다. 즉 표시용 문자열과 기계 처리용 문자열을 나누는 편이 안전합니다.
5.3 ‘읽혔다’만으로 검수하지 않습니다
GS1에서는 무효한 AI 조합이나, 특정 AI와 필수로 조합되는 AI도 정의되어 있습니다.43
인쇄 테스트에서 한 번 읽혔다고 끝내는 것으로는 부족합니다. 최소한 다음은 나누어 확인하고 싶습니다.
- 심볼로 읽을 수 있는가
- 상정한 문자열로 받을 수 있는가
- AI의 구분과 길이가 올바른가
- 상위 시스템에서 업무 규칙대로 해석할 수 있는가
- 상품 마스터 / 출하 데이터 / DB와 맞는가
스캔 성공 = 업무 성공이 아닙니다.
5.4 인쇄 품질을 모니터상의 겉모습으로 판단하지 않습니다
GS1 종합 사양서에는 X-dimension, quiet zone, 품질 평가 규칙이 있습니다. 물류용에서는 GS1-128과 2D에서 요구되는 치수나 여백도 다릅니다.1
용어의 위치 관계를 간단한 그림으로 둡니다.
[ 여백 ][ ||| | || |||| | || |||| ][ 여백 ]
(1) (2) (1)
|
+-- (3) 가장 가는 바 한 개의 폭 = X-dimension
(01)04912345678904(17)260331(10)ABC123 ... (4)
그림의 네 곳은 각각 다음과 같이 대응합니다.
| 그림 번호 | 요소 | 무엇인가 | 손을 대면 무엇이 일어나는가 |
|---|---|---|---|
| (1) | quiet zone | 심볼 양끝의 여백 | 레이아웃 조정으로 줄이면, 조건이 좋은 곳에서는 읽히는데 현장에서 판독률이 떨어진다 |
| (2) | 심볼 | 바와 스페이스의 배열. 기계가 읽는 본체 | 확대·축소하면 X-dimension도 함께 바뀌어 판독 거리와 판독률이 바뀐다 |
| (3) | X-dimension | 가장 가는 바 한 개의 폭 | 너무 작게 하면 읽히지 않는다. 용도마다 하한이 정해져 있다 |
| (4) | HRI | 사람이 읽기 위한 문자 | 괄호는 표시용. 스캐너가 돌려주는 문자열과는 별개이므로 입력 사양의 근거로 삼지 않는다 |
디자인 쪽에서 ‘여기에 넣고 싶으니 조금 작게 하고 싶다’, ‘여백이 아까우니 줄이고 싶다’는 요청이 올 때, 깎아도 되는 곳은 이 그림의 어디에도 없습니다. 크기를 바꿀 때는 X-dimension과 quiet zone을 유지한 채 전체를 닮음꼴로 줄이거나, 심볼 체계 자체를 다시 봅니다.
실제 운용에서는 다음과 같이 사소해 보이는 요인으로 갑자기 판독률이 떨어집니다.
- 라벨 프린터의 해상도와 열전사 조건
- 골판지나 필름의 번짐
- 광택면이나 반사
- 곡면으로의 인쇄
- 디자인 조정 시의 임의 축소
- 여백을 줄이는 레이아웃 변경
그래서 Illustrator나 PDF에서 보이는 것이 아니라, 실제 인쇄물을 실제 거리·각도·스캐너로 읽는 것을 기준으로 삼는 편이 낫습니다.
5.5 여러 바코드를 대충 늘어놓습니다
소매용 2D 가이드에서는 여러 바코드의 배치 규칙이 POS 처리 속도에 영향을 준다고 명시합니다.6
실무에서는 다음과 같은 조합에서 사고가 나기 쉽습니다.
- POS용 JAN 근처에 마케팅용 QR을 둔다
- 선형과 2D를 너무 가깝게 둔다
- 기한이나 로트의 HRI를 읽기 어려운 자리로 밀어 넣는다
- 뒷면·측면·걸이 태그에서 스캔 방향이 맞지 않는다
여러 코드는 ‘실리는지’뿐 아니라, 어느 쪽을 우선해 읽히고 싶은지까지 정해야 비로소 설계입니다.
5.6 현장에서 실제로 쓰는 AI를 확인하지 않습니다
GS1 소매 2D 가이드에서도, 모든 소매업자가 모든 AI를 쓸 수 있는 것은 아니며, 이용 가능한 AI는 판독 장소에 따라 달라진다고 합니다.13
예를 들어 제조사는 GTIN + 유효기간 + 로트까지 넣고 싶더라도, 수신 측이 GTIN만 쓰면 그 가치는 상류에만 나옵니다. 반대로 현장에서 기한을 쓸 작정이면 WMS / 재고조사 / 폐기 판정까지 포함해 지원이 필요합니다.
넣는 데이터와 쓰는 데이터를 나누어 확인하는 편이 도입이 수월합니다.
6. 규제나 업계 요건이 강한 예
6.1 소매의 2D 이행
GS1은 소매 POS용 2D 바코드의 표준화와 이행 가이드를 갖추고 있으며, 장래에는 2D를 중심으로 가는 방향입니다. 다만 현시점은 이행기이며, POS 쪽 판독과 처리 능력이 충분히 퍼질 때까지는 선형과의 병기가 현실적입니다.67
그래서 B2C 상품에 2D를 올릴 때는 적어도 다음을 따로 확인하는 편이 낫습니다.
- 스캐너가 읽는가
- 호스트 POS가 해석할 수 있는가
- 선형 코드를 남길 필요가 있는가
- HRI와 배치가 계산대 운용을 견디는가
6.2 일본의 의료기기 등
일본의 의료기기, 체외진단용 의약품 등에서는 포장 단위별 상품 코드와 제조 식별자의 표시, 바코드 심볼 체계로서 GS1-128 또는 GS1 DataMatrix 등, 꽤 구체적인 운용이 통지로 나와 있습니다.9
여기서 중요한 것은 GS1이 ‘민간의 편리한 규칙’에 머무르지 않는다는 점입니다. 실제로는 법령, 통지, 업계 가이드라인, 데이터베이스 등록, 병원이나 유통 측 운용이 GS1을 전제로 쌓입니다.
이런 분야에서는 ‘사내에서 읽히니 OK’가 아니라, 제도·거래처·현장 운용에 맞춰 GS1을 쓴다는 발상이 필요합니다.
7. 도입을 진행하는 순서
바코드 도입을 잘 깨지지 않게 진행하려면, 순서는 대개 다음 형태가 정리하기 쉽습니다.
-
업무 use case를 정한다 POS인지, 입출하 검품인지, 추적성인지.
-
식별 키를 정한다 GTIN인지, GTIN-14인지, SSCC인지. 필요하면 GLN 등도 포함한다.
-
필요한 속성을 정한다 로트, 유효기간, 시리얼, 중량, 가격 등, AI 단위로 정한다.
-
심볼을 정한다 EAN/UPC, ITF, GS1-128, GS1 DataMatrix, GS1 QR 코드 중 어느 쪽이 자연스러운가.
-
스캐너 출력 사양을 정한다 심볼 체계 식별자를 받을 것인지, FNC1을 어떻게 정규화할지, 호스트에 무엇을 넘길지.
-
상품 마스터와 변경 규칙을 정한다 GTIN의 신규 채번, 변경, 폐기, 재사용 불가, 이력 관리를 명문화한다.
-
실물로 인쇄 검증한다 실제 라벨, 실제 포장재, 실제 스캐너, 실제 거리에서 확인한다.
-
업무 테스트까지 한다 ‘읽힌다’가 아니라, ‘재고조사·검품·출하·기한 관리까지 돌아간다’를 본다.
이 순서만큼 중요한 것이, 누가 어느 단계를 맡는가입니다. 여기를 정하지 않고 진행하면 5와 6이 누구의 일도 아닌 채로 남습니다. 조직마다 명칭은 다르지만, 대략적인 기준은 다음과 같습니다.
| 단계 | 주 담당 예 | 함께 참여할 상대의 예 |
|---|---|---|
| 1. 업무 use case를 정한다 | 업무 부서(물류, 영업, 품질) | 정보시스템 |
| 2. 식별 키를 정한다 | 상품 마스터 관리, 상품부 | 정보시스템, 거래처 |
| 3. 필요한 속성을 정한다 | 업무 부서 | 품질 보증, 거래처 |
| 4. 심볼을 정한다 | 정보시스템 | 패키지 디자인 담당, 인쇄 회사 |
| 5. 스캐너 출력 사양을 정한다 | 정보시스템 | 단말 벤더, 기간계 시스템 담당 |
| 6. 상품 마스터와 변경 규칙을 정한다 | 상품 마스터 관리 | 정보시스템, 영업, EC 담당 |
| 7. 실물로 인쇄 검증한다 | 현장(창고, 제조) | 인쇄 회사, 정보시스템 |
| 8. 업무 테스트까지 한다 | 업무 부서 | 정보시스템, 거래처 |
5의 스캐너 출력 사양만은 업무 부서에서 요청이 거의 나오지 않습니다. 정보시스템 쪽에서 먼저 제안하지 않으면, 단말을 교체할 때 처음으로 문제가 됩니다.
결국 라벨 작성 소프트웨어를 고르기 전에 수신 측 사양을 정하는 편이 지름길입니다.
8. 정리
GS1 등 바코드 규격에서 처음에 중요한 것은, 번호·속성·심볼·판독 후 처리를 따로 생각하는 것입니다.
- GTIN은 상품을 식별하는 키
- AI는 데이터의 의미와 포맷
- GS1-128 / GS1 DataMatrix / GS1 QR 코드는 표현 수단
- 품질, 배치, FNC1, 스캐너 출력, 상품 마스터 운용까지 포함해 구현
여기를 나누어 설계하면, 바코드는 ‘그저 인쇄할 수 있는 것’에서 거래처나 현장과 공유할 수 있는 업무 인터페이스가 됩니다.
반대로 여기를 섞은 채 진행하면, 바코드는 읽히는데 재고나 검품이나 추적성이 깨집니다.
GS1을 쓸 때는, 어느 코드를 붙일 것인가보다 먼저, 누가 무엇을 읽고, 어느 시스템에서 무엇에 쓸 것인가를 정하는 데서 시작하는 것이 실무적입니다.
9. 참고 자료
-
GS1 / GS1 Japan, GS1 General Specifications, GS1 Japan 공개 PDF ↩ ↩2 ↩3 ↩4
-
GS1, GS1 Application Identifiers, GS1 Barcode Syntax Resource User Guide ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7
-
GS1 Japan, GS1-128 심볼, SSCC(출하 포장 시리얼 번호) ↩ ↩2 ↩3
-
GS1, 2D Barcodes at Retail Point-of-Sale Implementation Guideline ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9
-
GS1 Support, What 2D barcodes can be read at Point-of-Sale scanners today? ↩ ↩2 ↩3 ↩4 ↩5
-
GS1 / GS1 Japan, GS1 DataMatrix Guideline, GS1 DataMatrix 가이드라인(일본어 PDF) ↩ ↩2 ↩3
-
후생노동성, 의료기기를 특정하기 위한 부호의 용기에의 표시 등에 대하여 ↩ ↩2
-
GS1 Japan, GTIN이 변경되는 10가지 기준, GTIN 설정 가이드라인 ↩ ↩2 ↩3
-
GS1 Japan, GTIN 재사용 중지에 대하여 ↩ ↩2 ↩3
-
GS1, GSCN 16-154 - pre-defined length element strings should appear before variable length element strings ↩
-
GS1, 2D Barcodes at Retail Point-of-Sale Implementation Guideline - common AI support varies by retailer / use case ↩
관련 기사
같은 태그를 공유하는 최신 기사입니다. 더 가까운 주제로 지식을 넓힐 수 있습니다.
QR 코드를 읽은 값을 그대로 쓰면 안 됩니다 ── 오류 정정이 통과해도 값은 보장되지 않습니다
QR 코드의 오류 정정은, 정정이 통과하면 값이 맞다고 보장하는 장치가 아닙니다. 샘플 이미지와 decoder 2종으로 측정한 결과에서, 오염이 어디에 걸리느냐에 따라 다른 값으로 읽힐 수 있는 이유와 업무 시스템 쪽에 필요한 검증을 설명합니다.
Windows 가상화의 심층(제3회) ── 수초 만에 시작되는 가상 머신: WSL2·Windows Sandbox·컨테이너가 가벼운 이유
WSL2와 Windows Sandbox가 수초 만에 시작되어 가벼운 이유는 무엇인가. 동적 베이스 이미지, 다이렉트 맵, 메모리의 동적 배분, Hyper-V 격리 컨테이너까지 구조부터 설명합니다.
Windows 가상화의 심층(제2회) ── 커널에서도 보이지 않는 메모리: VBS·HVCI·Credential Guard의 구조
대응 하드웨어에 클린 설치하면 기본으로 켜지는 VBS는, 하이퍼바이저와 SLAT로 커널보다 강한 격리를 만듭니다. VTL, 보안 커널, HVCI, Credential Guard의 구조를 설명합니다.
Windows 가상화의 심층(제1회) ── 지금 쓰는 Windows는 어디에서 실행되는가: 하이퍼바이저와 파티션
Hyper-V를 켜면 호스트 Windows 자체가 루트 파티션으로서 하이퍼바이저 위에서 실행됩니다. VT-x, SLAT, VMBus의 역할까지 가상화의 기반을 설명합니다.
Win32 스레드 풀 API ── CreateThreadpoolWork로 「스레드를 만들지 않는」 병렬 처리
네이티브 코드에서 CreateThread를 마구 늘리고 있지는 않은가요. Vista에서 개편된 Win32 스레드 풀 API의 work·timer·wait·io 네 객체, 클린업 그룹, 콜백에서 해서는 안 되는 일까지 1차 정보를 바탕으로 설명합니다.
관련 토픽
이 기사와 가까운 토픽 페이지입니다. 기사를 출발점 삼아 관련 서비스와 다른 기사로 이어집니다.
Windows 기술 토픽
Windows 개발, 장애 조사, 기존 자산 활용에 관한 KomuraSoft LLC 기사를 모은 토픽 허브입니다.
자주 묻는 질문
이 기사 주제에 대해 상담 시 자주 나오는 질문을 모았습니다.
- GTIN과 바코드의 종류는 무엇이 다릅니까?
- GTIN은 상품 식별 코드이고, EAN/UPC, ITF, GS1-128, GS1 DataMatrix, GS1 QR 코드는 그 표현 방식(데이터 캐리어)입니다. 이 둘을 섞으면 설계가 무너집니다. GTIN에는 GTIN-8 / 12 / 13 / 14가 있고, 일본에서는 GTIN-13과 GTIN-8이 JAN 코드로 널리 쓰입니다. GTIN-13은 단품이나 최소 거래 단위, GTIN-14는 케이스나 중포장 등 집합 포장에 사용됩니다. GTIN은 '어느 상품인가'를 나타내는 키이며, 로트나 기한을 겸하지 않습니다.
- GS1 애플리케이션 식별자(AI)란 무엇입니까?
- GTIN에 추가로 담을 속성의 의미와 포맷을 정하는 2자리에서 4자리 숫자입니다. 대표 예는 (01)GTIN, (00)SSCC, (10)로트/배치 번호, (17)유효기간, (21)시리얼 번호입니다. AI가 있으면 여러 데이터를 바코드 하나에 넣어도 수신 측이 의미를 잘못 해석하기 어렵습니다. AI에는 고정 길이와 가변 길이가 있고, 가변 길이 AI 뒤에 다른 요소를 이을 때는 FNC1로 구분해야 합니다.
- GS1-128은 Code 128과 같은 것입니까?
- 같지 않습니다. GS1-128은 Code 128의 GS1용 subset이며, GS1 규칙을 따른다는 표시로 FNC1을 쓰고 AI 구문으로 데이터를 배열합니다. 마찬가지로 GS1 DataMatrix는 Data Matrix의, GS1 QR 코드는 QR 코드의 GS1용 subset입니다. 즉 'Code 128을 만들 수 있다'와 'GS1-128을 올바르게 만들 수 있다'는 같은 의미가 아닙니다.
- 한 번 사용한 GTIN을 다른 상품에 재사용할 수 있습니까?
- 일본에서는 2019년 이후, 한 번 사용한 GTIN의 재사용은 원칙적으로 할 수 없습니다. GTIN을 '비면 재사용할 수 있는 사내 코드'처럼 다루면 옛 상품 정보나 EC 이력과 충돌합니다. 또한 GS1 Japan은 'GTIN이 바뀌는 10가지 기준'을 정리해 두었고, 크기·내용량·포장 형태·판매 단위·표시 책임과 관련된 변경에서는 새 GTIN이 필요할 수 있습니다. 상품 마스터와 외부 공개 데이터까지 포함해, GTIN은 장기적으로 의미를 유지하는 키로 보아야 합니다.