- hee-commerce는 티몬 과 같은 이커머스 서비스에서 운영될 수 있는 타임딜 서버로, 10분동안 TPS 3000를 감당할 수 있도록 구현 중입니다.
- 서버 시나리오를 구글 Docs에 상황을 구체화한 후 프로젝트를 시작하였고, 특히 “주문 API”에 집중하여 프로젝트를 진행했습니다.
- JAVA 17, SpringBoot 3, MyBatis 3.5, MySQL 8, Redis 7.0, Flyway 9.5.1, RestDocs, Docker
1. Redis 저장 구조 변경(딜 상품과 재고 통합형 -> 분리형), DECR 명령어와 사후 검증 로직으로 재고 차감에 대한 동시성 문제 해결 (관련 상세 내용 링크)
2. 영속성이 불필요한 필드 제거로 재고에 따라 상품의 상태 변경에 대한 동시성 이슈 해결 및 TX 필요없는 로직으로 개선 (관련 상세 내용 링크)
3. 비정규화, 컬럼명 변경 및 Null 허용으로 로직 및 테이블 구조 단순화 (Tx 또는 Join 필요 O -> X) (관련 상세 내용 링크)
- RestDocs를 이용하여 API 개발 시 TDD 원칙 적용 (초기 주문 완료 API, 주문 사전 저장 API, 주문 승인 API, 딜 상풍 목록 조회 API, 딜 상품 상세보기 API)
테스트 코드
로비즈니스 로직의 문서화
를 위해서비스 클래스
가 아닌도메인 모델
에게비즈니스 로직 책임
변경(#167)가독성
과유지보수성
을 고려해서fixture
과함수
활용해서 테스트 코드 리팩토링(#146)
유지보수성
을 고려해서 재고 증가/감소 및 재고 히스토리 저장 로직을응집력
있게 묶어서 관리(#158)유지보수성
을 고려해서 RedisUtils 클래스를 만들어서 Redis의 key를 한 곳에서응집력
있게 관리 (#153)유연한 코드
를 위해의존성 주입
을 활용하여 인증 로직 구현(#171)- int 대신 Integer 사용하여
동적쿼리
를 단순한정적 쿼리
로 변경(#133, #144)
- PR에 이 작업이 무엇인지, 왜 그렇게 했는지 등 맥락을 전달하기 위해 노력했습니다. (예시 : #72)