개발 slecs

쇼핑몰 상품 옵션·주문 트랜잭션 안정성 개선

목차

feat: 쇼핑몰 플랫폼 상품 리스트 및 상세 UI 개선

상품 목록부터 주문까지 이어지는 흐름을 정비했음. 특히 상품 옵션 처리와 페이징, 카테고리 필터가 한 번에 엮이는 부분이 까다로웠음.

상품 옵션 처리 구조

// 옵션 유무 분기
if (product.hasOption()) {
    model.addAttribute("options", productMapper.selectOptions(productSn));
} else {
    model.addAttribute("directOrder", true);
}

주문 트랜잭션

단계 처리
재고 차감 FOR UPDATE 락으로 동시성 처리
포인트 차감 무상 → 유상 순서
수수료 생성 PENDING 상태로 INSERT
알림 발송 트랜잭션 외부에서 비동기 처리

결제 완료 시점에 재고 차감, 포인트 소비, 알림 발송이 한 트랜잭션 안에서 처리되도록 묶음. 중간에 실패하면 전체 롤백.

개발 원칙 정리

이 작업을 진행하면서 재확인한 원칙들:

작은 커밋: 변경 단위를 작게 유지해서 코드 리뷰와 롤백이 쉽게.

테스트 먼저: 변경 전 현재 동작을 파악하고, 변경 후 동일하게 동작하는지 확인.

문서 동기화: 코드가 바뀌면 관련 주석과 문서도 같이 업데이트.

원칙 이유
단일 책임 하나의 함수/클래스는 하나의 역할만
명시적 코드 영리한 코드보다 읽기 쉬운 코드
실패 우선 처리 happy path보다 에러 케이스 먼저 설계

댓글 0

첫 댓글 달아줘.