분류 전체보기 (5) 썸네일형 리스트형 Local Token 0.4 Release Note 로컬 생성 결제 토큰이 처음이라면, 이전 글을 먼저 읽어주세요! 최근 앱과 백엔드에서 로컬 생성 결제 토큰 구현을 시작했는데, 구현 중에서 치명적인 논리적 오류 찾아 사양 일부를 수정해야 했어요.하지만 이번 업데이트는 단순히 이 오류만 고치는 것이 아니라, 암호화 알고리즘 교체, TLV 포맷 도입, 키 유도 함수 등 보안적으로도 큰 변경이 이루어졌어요.TL;DR사양 논리 오류 수정HKDF로 암호 키 유도오프라인 무차별 대입 공격(Offline brute-force attack) 대응AES-GCM 사용 중지 및 XChaCha20-Poly1305 도입16 바이트를 줄여 QR 버전 5 사용 가능 (이전: 버전 6)TLV 포맷 도입Nonce 값으로 UUIDv7 사용Additional Data 필드 추가 HMAC.. QR 코드에 최대한 많이 때려넣기 결제용 QR 코드는 단순히 일회용 토큰으로만 구성될 수 있지만, 로컬 생성 결제 토큰처럼 사용자 ID나 결제 수단 정보 등 추가적인 데이터가 충분히 담길 수 있어요. 네이버 페이에서 사용되고 있는 EMV-QR 표준은 이미 탬플릿 지시자나 결제 수단 정보(Track 2 Equivalent Data)와 인증 코드 같은 부가 정보를 담고 있어요. 하지만 QR 코드로 전달할 수 있는 데이터의 양은 훨씬 제한적이에요. 이론상 가장 큰 QR 코드는 약 2,900자 까지 담을 수 있지만, 이 경우 QR 코드의 크기가 너무 거대해져서 특히 모바일 앱에서 사용하기엔 적절하지 않아요. 바코드도 하나의 디자인 요소로 볼 수 있기 때문에 QR 코드의 크기에 대한 제한도 필요해요. 특히 로컬 생성 결제 토큰은 사용자 기기에서 .. 🤫오프라인이지만 온라인이어야 해요 - 로컬 생성 결제 토큰 디미페이는 네이버페이와 카카오페이처럼 사용자 휴대폰에서 제시되는 QR 코드로 오프라인 결제를 제공해요. 그런데 디미페이를 포함한 이런 대중적인 오프라인 결제 서비스를 사용하기 위해 공통적으로 필요한 게 있어요. 바로 "인터넷"이에요. 오프라인 결제를 하는데, 온라인이어야 한다니, 뭔가 모순적이지 않나요? 사실 요즘 밖에서 인터넷을 사용하지 못하는 사람은 많이 없다고 생각해요. 그래서 크게 중요하게 생각하지 않을 수도 있는데, 저희가 인터넷 환경에 신경쓰는 이유는 디미페이가 학생들을 위한 결제 서비스이기 때문이에요. 학생들은 상대적으로 모바일 데이터가 부족한 경우가 많아요. 인터넷이 안돼서 친구가 대신 결제해 주고 나중에 송금해 준다는 걸 저희 팀원에게 들었을 때 꾀 충격적이었어요. 모든 학생이 차별 없이.. 🔩Nest.js로 견고한 백엔드 만들기 이번 글에서는 디미페이 2.0 백엔드 개발 과정에 집중해서 v2 백엔드가 어떻게 구성되고, QR 코드 결제 과정을 따라가 보며 DDD 빌딩 블록으로 비즈니스 로직을 추상화한 사례를 이야기해볼게요.기술 스택디미페이 v2 백엔드는 Bun 런타임과 타입스크립트, Nestjs(express), Mikro ORM으로 개발되었어요. 제가 선택한 도구들은 이전 글에서 자세한 소개와 그 이유를 읽어보실 수 있어요. 폴더 구조백엔드는 헥사고날 이케틱처와 클린 아키텍처를 기반으로 해요. 그래서 크게 도메인 계층, 애플리케이션 계층, 인터페이스 계층, 인프라 계층의 네 레이어로 구성돼요. 저는 폴더 구조가 아키텍처 못지않게 중요하다고 생각해요. 잘 조직된 구조는 아키텍처가 잘 성장할 수 있는 뿌리가 되고, 신중하게 구성되지.. 🐣백지에서 시작하는 디미페이 v2 백엔드 리팩터링 저는 디미페이 v2 프로젝트를 시작하면서 백엔드를 처음부터 다시 개발하기로 결정했어요. 이 글에선 왜 이런 선택을 하게 되었고, 타입스크립트 백엔드를 개발하기 위해 어떤 도구들을 선택했는지 공유해보려 해요. 이전 백엔드는 어땠는대요?디미페이 v1 백엔드는 TypeScript와 Expressjs 바탕의 디미고인 v3 백엔드 코드 베이스를 기반으로 개발되었어요. 디미고인(교내 인트라넷)과 다른 점은 데이터 모델 도구로 Prisma와 Postgresql을 사용했다는 점이 있고, 나머진 매우 비슷한 모습이에요. 디미고인 백엔드 아키텍처는 간단한 CRUD 서버를 만들기에 간결하고 체계적인 구조를 가지고 있어요. 디미페이도 처음엔 이 구조에 잘 적응했어요. 하지만 복잡한 로직을 처리하는 일이 늘어나면서 점점 CUR.. 이전 1 다음