https://github.com/TheOne-team-1/TheOne-Bottle-Shop
GitHub - TheOne-team-1/TheOne-Bottle-Shop: 주류 커머스 플랫폼 백엔드 구현하기
주류 커머스 플랫폼 백엔드 구현하기. Contribute to TheOne-team-1/TheOne-Bottle-Shop development by creating an account on GitHub.
github.com
1. [Troubleshooting] DB 정밀도 및 컬럼 길이 제한으로 인한 런타임 예외 해결
문제 상황
주문 생성 API 호출 시 Data truncation: Data too long for column 'order_num' 에러와 함께 400 Bad Request 발생.
초기 설계 시 order_num 컬럼의 길이를 20자로 제한했으나, 시스템 내부에서 생성하는 주문 번호 형식이 이를 초과하여 DB 무결성 제약 조건을 위반함.
원인 분석
기존 주문 번호 생성 로직인 "order_" + UUID.randomUUID()가 약 42자의 문자열을 생성함.
엔티티(Order.java) 내 @Column(length = 20) 설정으로 인해 최대 길이를 초과하는 데이터 삽입 시 DataIntegrityViolationException 발생.
해결 및 조치
DB 스키마 확장: 향후 주문 번호 체계의 확장성을 고려하여 order_num의 길이를 그대로 두고
로직 최적화: UUID 방식은 가독성이 떨어지고 인덱스 성능에 불리할 수 있어, 비즈니스 요구사항에 맞는 날짜 기반 순차 번호 체계로 개편.
2. [System Design] Redis를 활용한 분산 환경에서의 순차적 주문 번호 생성기
설계 목표
YYYYMMDD-00000001 형태의 가독성 높은 주문 번호 생성.
다중 서버 인스턴스 환경에서도 번호 중복이 발생하지 않는 원자성(Atomicity) 보장.
기술 선택 근거
Redis INCR 명령 활용: Redis는 싱글 스레드로 동작하며 원자적 연산을 지원하므로, 동시 요청이 몰려도 중복 없는 순차 번호 발행이 가능함.
자동 만료(TTL) 설정: 매일 새로운 날짜로 키(order:count:20260317)가 생성되도록 설계하고, 24시간 후 자동 삭제되게 하여 메모리 효율성 관리.
결과: 자릿수 문제 해결(총 17자) 및 초당 수만 건의 주문 요청에도 안정적으로 대응할 수 있는 고성능 번호 생성 체계 구축.
3. [Refactoring] API 데이터 무결성 강화를 위한 입력값 검증(Validation) 고도화
배경
부적절한 입력값이 서비스 레이어까지 전파되는 것을 방지하고, 프론트엔드와의 협업 효율을 위해 명확한 에러 응답이 필요함.
적용 내용
계층별 검증 분리: Controller 계층에 @Valid를 적용하여 잘못된 요청을 진입 단계에서 차단.
사용자 정의 에러 메시지: DTO 내 각 필드에 @NotBlank, @Min, @Max와 함께 비즈니스 언어로 된 메시지를 명시하여 API 사용성 개선.
데이터 무결성 확보: 특히 리뷰 시스템에서 평점 범위를 1~5점으로 엄격히 제한하여 잘못된 통계 데이터 누적 방지.
Elide 처리 (UI/UX 최적화): 리뷰 목록 조회 시 대량의 텍스트 데이터를 효율적으로 전송하기 위해 DTO 레벨에서 문자열을 요약 처리하는 'Elide' 로직 설계.
'spring_2기[본캠프] > 과제' 카테고리의 다른 글
| KODEKATA알고리즘 CODEKATA DAY41 (0) | 2026.03.18 |
|---|---|
| [과제] Spring 플러스 프로젝트 Day 7 (0) | 2026.03.18 |
| [과제] Spring 플러스 프로젝트 Day 5 (0) | 2026.03.16 |
| [과제] Spring 플러스 프로젝트 Day 4 (0) | 2026.03.13 |
| [과제] Spring 플러스 프로젝트 Day 3 (0) | 2026.03.11 |