[목 차]
▣ 01장: 시작하기
1.1 상황 정의
__1.1.1 서비스 규모와 제약
__1.1.2 인프라 구성
__1.1.3 이 책에서의 학습 관점
1.2 프로젝트 구조
__1.2.1 core-enum 모듈
▣ 02장: 상품 목록
2.1 상품 목록 - 요구사항 느끼기
__2.1.1 요구사항 분석
__2.1.2 기술 방식 결정
__2.1.3 협업과 소통
2.2 상품 목록 - 코드 느끼기
__2.2.1 컨트롤러와 페이징 방식
__2.2.2 서비스 코드와 Finder 설계
__2.2.3 엔티티 설계
__2.2.4 매핑 테이블과 조회 전략
__2.2.5 상품 삭제 전략
2.3 상품 목록 - 개념 정리
__2.3.1 격벽이란?
__2.3.2 개념도 작성 원칙
__2.3.3 개념의 중요도 구분
__2.3.4 참조 관계와 격벽의 목적
▣ 03장: 상품 상세
3.1 상품 상세 - 요구사항 느끼기
__3.1.1 상품 상세 페이지 구성
__3.1.2 검토해야 할 요구사항
__3.1.3 API 설계 전략
__3.1.4 조직 상황별 판단 기준
__3.1.5 기술적 요구사항 검토
3.2 상품 상세 - 코드 느끼기
__3.2.1 쿠폰 조회 시점과 API 분리
__3.2.2 ProductFinder 재사용과 Price 설계
__3.2.3 ProductSectionService 분리
__3.2.4 RateSummary와 rateVisible 설계
__3.2.5 쿠폰 타깃 조회 로직
__3.2.6 갓 오브젝트 안티패턴
3.3 상품 상세 - 개념 정리
__3.3.1 Product와 격벽 구조
__3.3.2 Price의 개념적 위치
__3.3.3 개념 중요도와 계층 구분
▣ 04장: 리뷰
4.1 리뷰 - 요구사항 느끼기
__4.1.1 리뷰 수정·삭제 정책
__4.1.2 리뷰 작성 정책과 고아 리뷰
__4.1.3 별점 산정 기준
__4.1.4 리뷰 보상 정책
__4.1.5 정책 변경에 유연한 설계
4.2 리뷰 - 코드 느끼기
__4.2.1 리뷰 조회와 ReviewTargetType
__4.2.2 ReviewFinder와 확장 구조
__4.2.3 ReviewService와 컴포넌트 분리
__4.2.4 ReviewEntity와 ReviewKey 설계
__4.2.5 ReviewPolicyValidator와 작성 정책
__4.2.6 리뷰 작성·수정·삭제 정책과 ReviewManager
__4.2.7 컴포넌트 분리의 장단점
4.3 리뷰 - 개념 정리
__4.3.1 Order 의존 구조
__4.3.2 포인트 참조와 격벽
__4.3.3 리뷰 기능의 핵심 흐름
▣ 05장: QnA
5.1 QnA - 요구사항 느끼기
__5.1.1 질문 작성 권한과 정책
__5.1.2 대댓글 구조와 운영 방식
__5.1.3 비공개 기능 설계
__5.1.4 API 설계와 데이터 효율
__5.1.5 답변 주체와 운영 방식
5.2 QnA - 코드 느끼기
__5.2.1 QnA 컨트롤러 구조와 Answer 분리
__5.2.2 QnA 개념 설계 - Question과 Answer의 분리
__5.2.3 QnA 서비스와 findQnA 구현
__5.2.4 CRUD 구현과 리포지터리 직접 사용 패턴
__5.2.5 ReviewService와 QnAService 구조 비교
__5.2.6 QuestionEntity와 AnswerEntity 설계
__5.2.7 설계 검토와 대안적 구조
5.3 QnA - 개념 정리
__5.3.1 QnA 개념 구조
__5.3.2 Product 의존 관계
__5.3.3 개념도 작성 관점 - 테이블 구조 vs. 개념적 관계
▣ 06장: 찜하기
6.1 찜하기 - 요구사항 느끼기
__6.1.1 상품 변경 시 데이터 처리 정책
__6.1.2 기능 우선순위와 비용 효율
__6.1.3 찜 항목 유효기간 설정
__6.1.4 더블클릭 이슈와 API 설계
__6.1.5 찜하기와 장바구니의 차이
6.2 찜하기 - 코드 느끼기
__6.2.1 컨트롤러 구조와 따닥 이슈
__6.2.2 FavoriteService 구현
__6.2.3 찜 목록 조회와 30일 기준
__6.2.4 addFavorite 구현
__6.2.5 FavoriteEntity와 favoritedAt 설계
__6.2.6 소프트 딜리트와 removeFavorite
6.3 찜하기 - 개념 정리
__6.3.1 의존 관계 단순화와 순환 의존 방지
__6.3.2 단순성 유지의 중요성
__6.3.3 Product 중심 구조와 사용자 생략 이유
▣ 07장: 포인트
7.1 포인트 - 요구사항 느끼기
__7.1.1 포인트 적립 정책
__7.1.2 포인트 사용과 차감 정책
7.2 포인트 - 코드 느끼기
__7.2.1 PointController와 주요 개념
__7.2.2 PointService 조회 구현
__7.2.3 PointHandler - earn과 deduct
__7.2.4 포인트 적립과 차감 호출 시점
__7.2.5 낙관적 락과 초기 잔액 전제
__7.2.6 PointAmount와 PaymentService 연동
7.3 포인트 - 개념 정리
__7.3.1 PointBalance와 PointHistory의 역할
▣ 08장: 쿠폰
8.1 쿠폰 - 요구사항 느끼기
__8.1.1 쿠폰 개념의 재정의 - 쿠폰과 소유 쿠폰
__8.1.2 유효기간·발급 정책·할인 방식
__8.1.3 쿠폰 사용 정책과 결제 연계
__8.1.4 현재 규모에 맞는 설계 수준
8.2 쿠폰 - 코드 느끼기
__8.2.1 CouponTargetEntity와 타깃 조회
__8.2.2 쿠폰 다운로드와 OwnedCoupon
__8.2.3 download의 책임 소재 - CouponService vs. OwnedCouponService
__8.2.4 중복 다운로드 처리와 개선 방향
__8.2.5 OwnedCoupon 조회와 엔티티 설계
__8.2.6 쿠폰 정보 변경 시 스냅샷 전략
8.3 쿠폰 - 개념 정리
__8.3.1 Coupon과 OwnedCoupon 구분
__8.3.2 OwnedCoupon의 계층적 위치
▣ 09장: 장바구니
9.1 장바구니 - 요구사항 느끼기
__9.1.1 유효기간·가격 변경·수량 관리 정책
__9.1.2 주문 연결 흐름과 다중 상품 처리
__9.1.3 가격 계산 및 수량 변경 API 설계
__9.1.4 재고 관리 연계 여부
9.2 장바구니 - 코드 느끼기
__9.2.1 CartController와 Cart·CartItem 개념
__9.2.2 CartService getCart와 논리적 카트
__9.2.3 addCartItem과 소프트 딜리트 재활용
__9.2.4 수량 수정과 삭제 처리
9.3 장바구니 - 개념 정리
__9.3.1 Cart와 CartItem의 관계
__9.3.2 현실 구조를 활용한 개념 설계
__9.3.3 다중 카트 구조의 확장 가능성
▣ 10장: 주문
10.1 주문 - 요구사항 느끼기
__10.1.1 쿠폰·포인트 적용 정책
__10.1.2 다중 셀러 확장 가능성
__10.1.3 재고 확인 시점
__10.1.4 주문 데이터 저장 시점
__10.1.5 주문 생성 경로 단순화
10.2 주문 - 코드 느끼기
10.3 주문 - 개념 정리
__10.3.1 격벽과 의존성 최소화
__10.3.2 반복적 개념도 접근법
__10.3.3 Cart vs Product 우선순위
__10.3.4 현실 세계를 통한 설계 검증
▣ 11장: 결제
11.1 결제 - 요구사항 느끼기
__11.1.1 결제와 PG사 연동 구조
__11.1.2 타임아웃과 예외 처리 설계
__11.1.3 결제 실패 시나리오와 재시도 처리
11.2 결제 - 코드 느끼기
__11.2.1 PaymentController와 API 구조
__11.2.2 결제 생성과 PaymentDiscount
__11.2.3 PaymentService의 createPayment와 중복 결제 방지
__11.2.4 paidAmount와 0원 결제 처리
__11.2.5 콜백 성공 처리와 주문 검증
__11.2.6 PG 승인 API 호출과 결제 완료 처리
__11.2.7 트랜잭션 히스토리와 주문 중심 설계
__11.2.8 PG 승인 이후 예외 처리 주의사항
__11.2.9 결제 실패 처리와 상태 전략
11.3 결제 - 개념 정리
__11.3.1 주문 vs 결제 중요도
__11.3.2 트랜잭션 히스토리의 위치
__11.3.3 주문·결제 모듈 분리 원칙
__11.3.4 주문 중심 설계의 확장성
▣ 12장: 취소
12.1 취소 - 요구사항 느끼기
__12.1.1 취소 정책 확인 항목
__12.1.2 취소 처리 방식과 요구사항 다시 보기
12.2 취소 - 코드 느끼기
__12.2.1 CancelController와 CancelRequest
__12.2.2 CancelService와 PG 취소 흐름
__12.2.3 Payment 상태 미변경과 Order 중심 처리
__12.2.4 CancelEntity 분리 설계
__12.2.5 삽입 방식 vs 업데이트 방식
__12.2.6 데이터 조회 효율과 스캔 범위
__12.2.7 쿠폰·포인트 복원
__12.2.8 취소 설계의 두 가지 핵심 원칙
12.3 취소 - 개념 정리
__12.3.1 Payment와 Cancel의 격벽 여부
__12.3.2 비즈니스 상황에 따른 설계 유연성
▣ 13장: 정산
13.1 정산 - 요구사항 느끼기
__13.1.1 정산 기준일과 송금 주기
__13.1.2 취소 건 상계 처리
__13.1.3 정산 정책서의 필요성
__13.1.4 수수료율과 슬라이딩 방식
__13.1.5 정산 업무와 개발자의 역할
13.2 정산 - 코드 느끼기
__13.2.1 SettlementBatchController와 배치 구성
__13.2.2 loadTargets와 테이블 분리의 이점
__13.2.3 SettlementTargetLoader와 가맹점 매핑
__13.2.4 시간 기반 배치의 한계와 전략
__13.2.5 calculate 배치와 SettlementCalculator
__13.2.6 transfer 배치와 상계 처리
__13.2.7 배치 분리의 안정성과 디버깅 이점
13.3 정산 - 개념 정리
__13.3.1 SettlementTarget과 격벽 구조
__13.3.2 전처리 계층으로서의 SettlementTarget
__13.3.3 Transfer(지급) 미구현 처리
▣ 14장: 전체 개념 정리
__14.1.1 전체 개념도 분석
__14.1.2 1안: 상품 기준·주문 기준 분리
__14.1.3 2안: 내부·외부 영역 분리
__14.1.4 3안: 영역과 선형 전략
마무리 그리고 다음 스텝에 대하여
예비 개발자분들에게 드리는 말