Project Overview
가변 암호화 기반 정품 인증 및 보안 관제 시스템, 인팩토리
정품에 부착된 QR을 소비자가 스캔하면 진위를 판정해 정품 페이지로 연결하고, 모든 스캔과 공격 시도를 암호화해 저장·집계하는 풀스택 시스템을 2026년 7월부터 8월까지 기획·UX 디자인·프론트엔드·백엔드·인프라까지 한 흐름으로 구축했습니다. 하나의 Next.js 앱이 소비자 인증 웹과 관리자 보안 관제 대시보드라는 두 얼굴을 가집니다.
QR 코드에는 공개 식별자를 AES-256-GCM으로 암호화한 토큰이 담깁니다. 위·변조된 코드는 복호화 단계에서 걸러지고, 정상 코드도 유효기간·상태·인증 횟수 조건을 통과해야 정품 페이지로 이동합니다. Next.js 16·TypeScript·Tailwind CSS·MySQL(Drizzle ORM)로 개발했고, 클라이언트 IP를 위조할 수 없도록 Node 커스텀 서버로 감쌌습니다.
Key Contributions
1. 다단계 인증 판정 파이프라인
Task스캔 한 번에 레이트 리밋 → 블랙리스트 → 봇 탐지 → 토큰 복호화 → 코드 상태·기간 → 인증 횟수 순으로 검사하고, 하나라도 걸리면 즉시 차단하며 결과를 남기는 흐름
Insight동시 스캔에서 인증 횟수를 초과 발급하지 않도록 조건부 원자적 UPDATE 하나로 횟수 제한을 강제했습니다. 인증 결과는 정상·중복·무효·위조·봇·블랙리스트·레이트리밋 일곱 가지로 구분되어 관제 화면의 집계 축이 됩니다.
Result위조 QR은 정품 페이지에 닿지 못하고, 병행유통은 코드별 예상 유통 국가와 스캔 국가를 대조한 위치 이상 플래그로 드러납니다.
2. 위조 불가 클라이언트 IP와 개인정보 암호화
Problem레이트 리밋·블랙리스트·위치 판정이 모두 IP를 신뢰하는데, X-Forwarded-For를 돌려 보내면 전부 우회할 수 있었습니다.
Solution커스텀 서버가 모든 요청에서 내부 전용 헤더를 실제 TCP 접속 주소로 덮어쓰고, 프록시 헤더는 등록된 신뢰 프록시를 거친 경우에만 인정하게 했습니다. IP와 위치는 AES-256-GCM 암호문으로만 저장하고, 조회는 HMAC-SHA256 결정적 해시로 처리해 평문이 어디에도 남지 않게 했습니다.
3. 관제 대시보드
Description총 스캔·정상·중복·차단·위치 이상·블랙리스트·발급 코드 통계, 14일 추이와 인증 결과 비율 차트, 최근 이상 징후, 위협 지도를 한 화면에 모은 개요 페이지를 만들었습니다.
Approach인증코드 발급·수정·폐기(유효기간·예상 국가·횟수 제한·엑셀 다운로드), 스캔 로그(전체/정상/중복/차단/위치 이상 탭, 지도 보기, 처음 보는 이상 로그 강조), 블랙리스트 수동 차단·해제, 관리자 계정과 권한(super/viewer)까지 운영에 필요한 화면을 빠짐없이 갖추고, PC 고정 사이드바와 모바일 드로어로 반응형을 맞췄습니다.
4. 운영 안정성
Solution스캔 로그는 1초·50건 단위 배치 INSERT로 DB 쓰기 폭주를 막고, 실패 누적 IP는 자동으로 1시간 블랙리스트에 올립니다. dev/stage/production 3환경 도커 구성과 마이그레이션 절차, 고객사용 서버 구축 안내서, AWS 이관 가이드를 문서로 함께 인수했습니다.
Process
"어떤 공격이 가능한가"를 먼저 목록으로 만들고, 각 위협에 대한 방어를 코드 위치와 함께 표로 대응시킨 뒤 개발했습니다. 시연용 샘플 데이터 시더를 만들어 대시보드가 실제 운영 상태처럼 보이도록 검수했고, 중간·최종 기능 보고서로 진행을 공유했습니다.
Outcome
소비자에게는 스캔 한 번으로 끝나는 단순한 경험을, 운영자에게는 위조·병행유통·공격 시도가 한눈에 보이는 관제 화면을 제공하는 시스템이 되었습니다. 보안 설계와 화면 설계를 같은 흐름에서 다뤄, 방어 로직이 관제 화면의 정보 구조로 그대로 이어진 프로젝트입니다.