|
· 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안: 영역과 선형 전략 마무리 그리고 다음 스텝에 대하여 예비 개발자분들에게 드리는 말 |
|
* 이 책에서 다루는 내용 *
· 요구사항의 맥락을 파악하고 더 나은 질문을 찾아내는 방법 · 요구사항이 코드로 구현되는 과정과 선택의 근거를 살펴보는 방법 · 요구사항을 구현하는 여러 방법과 각 선택에 따르는 트레이드오프 · 핵심 개념을 통해 지금 만들고 있는 소프트웨어의 구조와 흐름을 느끼는 방법 · 작성된 코드를 되짚으며 설계 의도와 구현 과정을 정리하는 방법 · 상품 목록과 상품 상세 기능의 모델링 및 구현 · 리뷰와 Q&A, 찜하기 기능의 설계 · 포인트와 쿠폰의 정책 및 데이터 처리 · 장바구니와 주문 흐름의 구현 · 결제와 취소 과정에서 고려해야 할 사항 · 커머스 정산의 기본 구조와 설계 |