TECH 으로 돌아가기
TECH HACKER NEWS 오늘 10분 읽기 31 READS

바코드가 사라진다? 50년 만의 세대교체 'GS1 선라이즈 2027'과 2D 바코드 이야기

바코드가 사라진다? 50년 만의 세대교체 'GS1 선라이즈 2027'과 2D 바코드 이야기
SOURCE IMAGE · HACKER NEWS
바코드가 사라진다? 50년 만의 세대교체 'GS1 선라이즈 2027'과 2D 바코드 이야기

1974년, 껌 한 팩에서 시작된 이야기

마트 계산대에서 '삑' 소리와 함께 찍히는 검은 줄무늬가 바코드죠. 이 바코드가 실제 계산대에서 처음 찍힌 건 1974년 6월 26일이에요. 미국 오하이오주의 한 슈퍼마켓에서 리글리 껌 한 팩이 첫 주인공이었어요. 그 뒤로 50년 넘게 바코드는 전 세계 유통을 받쳐 온 기본 인프라가 됐어요. 한국은 1988년에 국가 코드 880을 받으면서 본격적으로 도입했는데요, 집에 있는 과자 봉지 바코드가 880으로 시작하면 한국에서 등록된 상품이라는 뜻이에요.

그런데 이 익숙한 바코드가 슬슬 세대교체를 준비하고 있어요. 전 세계 바코드 표준을 관리하는 비영리 기관 GS1이 '선라이즈 2027(Sunrise 2027)'이라는 목표를 내걸었거든요. 2027년 말까지 소매점 계산대(POS)가 QR코드 같은 2D 바코드를 읽을 수 있게 준비하자는 거예요. 50년 동안 거의 바뀌지 않았던 인프라가 바뀌는 일이라, 유통·커머스 쪽 개발자라면 한 번쯤 짚고 넘어갈 만해요.

1D 바코드의 한계: 숫자 13개가 전부

우리가 아는 줄무늬 바코드(UPC, EAN-13)는 '1차원(1D)' 바코드예요. 이게 뭐냐면, 가로 한 방향으로만 정보를 담는 방식이라 넣을 수 있는 게 12~13자리 숫자 정도가 전부예요. 이 숫자를 GTIN(Global Trade Item Number, 국제 상품 식별 번호)이라고 부르는데요, 쉽게 말해 "이건 ○○회사의 △△ 과자 500g짜리"라는 상품의 종류만 알려줘요.

문제는 같은 과자라도 언제 만들었는지, 몇 번째 생산분('로트'라고 해요)인지, 소비기한이 언제인지는 바코드에 없다는 거예요. 그래서 특정 생산분에 문제가 생겨 리콜할 때 그 로트만 골라내기가 어렵고, 소비기한이 임박한 상품을 할인하려면 직원이 일일이 스티커를 붙여야 했어요. 시스템 입장에서는 'GTIN이 같으면 다 똑같은 물건'이었던 셈이에요.

2D 바코드와 'GS1 디지털 링크'

QR코드나 데이터매트릭스(DataMatrix) 같은 2D 바코드는 가로와 세로 양방향으로 정보를 담아서 훨씬 많은 데이터를 넣을 수 있어요. 참고로 QR코드는 1994년 일본 덴소 웨이브가 자동차 부품을 추적하려고 만든 기술이에요.

GS1이 밀고 있는 핵심은 GS1 디지털 링크(Digital Link)라는 표준이에요. 상품 정보를 아예 웹 주소(URL) 형태로 QR코드에 담는 방식인데요, 예를 들면 이렇게 생겼어요.

https://id.gs1.org/01/09506000134352/10/ABC123/21/12345?17=271231

여기 나오는 01, 10, 21, 17 같은 숫자를 AI(Application Identifier, 응용 식별자)라고 불러요. 인공지능 AI가 아니니까 헷갈리지 마세요. 01은 GTIN, 10은 로트 번호, 21은 일련번호, 17은 소비기한이에요. 소비기한은 YYMMDD 형식이라 위 예시는 2027년 12월 31일이고요.

이 방식이 똑똑한 건 코드 하나가 두 가지 역할을 동시에 하기 때문이에요. 계산대 스캐너는 이 URL에서 상품 정보만 뽑아서 결제에 쓰고, 소비자가 스마트폰 카메라로 찍으면 브랜드 웹페이지로 연결돼서 성분이나 알레르기 정보, 재활용 방법을 볼 수 있어요. 지금처럼 결제용 바코드와 마케팅용 QR을 포장지에 따로 넣을 필요가 없어지는 거죠.

개발자 관점: 파싱 자체는 어렵지 않아요

결국 URL이라서 기본적인 파싱은 생각보다 간단해요. 경로(path)에는 식별 키와 로트·일련번호 같은 한정자가, 쿼리스트링에는 소비기한 같은 속성 정보가 들어가요. 아주 단순하게 만든 파이썬 예시를 보면 감이 오실 거예요.

from urllib.parse import urlparse, parse_qs

def parse_digital_link(url):
u = urlparse(url)
parts = u.path.strip("/").split("/")
data = dict(zip(parts[0::2], parts[1::2]))
for key, values in parse_qs(u.query).items():
data[key] = values[0]
return data

link = "https://id.gs1.org/01/09506000134352/10/ABC123/21/12345?17=271231"
print(parse_digital_link(link))
# {'01': '09506000134352', '10': 'ABC123', '21': '12345', '17': '271231'}

물론 실무에서는 도메인 뒤에 회사마다 다른 경로가 더 붙을 수 있고, GTIN 체크 디지트나 AI별 형식도 검증해야 해요. GS1이 GitHub에 디지털 링크 툴킷과 바코드 문법 검증 라이브러리를 공개해 두었으니, 직접 만들기보다 그걸 참고하는 편이 안전해요.

'멸종'은 과장이고, 당분간은 '공존'

제목과 달리 바코드가 당장 사라지지는 않아요. 선라이즈 2027은 그때까지 계산대가 2D 코드를 읽을 수 있게 하자는 목표이지, 1D 바코드를 금지하는 규정이 아니거든요. 한동안은 포장지에 줄무늬 바코드와 QR코드가 나란히 찍히는 전환기가 이어질 거예요.

가장 큰 걸림돌은 하드웨어예요. 오래된 레이저 스캐너는 빛을 한 줄로 쏘아 반사되는 패턴을 읽는 방식이라 QR 같은 2D 코드를 못 읽어요. 카메라로 이미지를 찍어서 해석하는 '이미저' 방식 스캐너로 바꿔야 하죠. 소프트웨어도 바뀌어야 해요. GTIN 하나만 받던 POS가 로트, 소비기한, 일련번호까지 받아서 처리해야 하니까요.

사실 2D 전환은 의약품 분야가 먼저 겪었어요. 미국과 유럽은 위조 의약품을 막으려고 포장에 데이터매트릭스로 일련번호를 넣게 하고 있고, 한국도 의약품 일련번호 제도를 운영하면서 이미 2D 바코드를 쓰고 있어요. 식품과 생활용품 유통이 그 길을 뒤따라가는 셈이에요.

한국 개발자에게 주는 시사점

먼저 데이터 모델이 달라질 수 있어요. 지금까지 상품 테이블의 키가 GTIN 하나였다면, 앞으로는 로트나 소비기한 단위로 재고를 나눠서 관리해야 할 수도 있거든요.

다음은 소비기한 연동이에요. 한국은 2023년부터 유통기한 대신 소비기한 표시제를 시행하고 있는데요, 2D 바코드에 소비기한이 들어가면 계산대에서 임박 상품을 자동으로 할인하거나 기한이 지난 상품은 결제를 막는 기능을 쉽게 만들 수 있어요.

마지막은 모바일 앱이에요. ZXing, Google ML Kit, 애플 Vision 프레임워크처럼 2D 코드를 잘 읽는 라이브러리는 이미 충분해요. 여기에 디지털 링크 파싱만 더하면 알레르기 체크 앱이나 냉장고 관리 앱 같은 서비스를 만들어볼 수 있어요.

마무리

한줄 정리: 바코드는 사라지는 게 아니에요. '상품 종류'만 알려주던 숫자에서 '바로 이 상품 한 개'를 알려주는 URL로 진화하는 중이에요.

여러분 회사의 POS나 재고 시스템은 로트나 소비기한 단위로 관리할 준비가 되어 있나요? 2D 바코드가 흔해지면 어떤 서비스를 만들어보고 싶으세요?


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://thehustle.co/originals/why-barcodes-are-about-to-go-...
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...