마켓플레이스 형태의 커머스 프로젝트입니다. 서버 관련 학습에 집중하기 위해 클라이언트는 카카오 오븐을 이용해 프로토타입으로 제작했습니다.
자세한 구현 내용은 Pull Requests에서 확인해주시면 감사하겠습니다.
Java11, Spring Boot 2.x, Gradle, JPA, Redis, MySQL, OAuth 2.0, Docker, Jenkins, Naver Cloud Platform
- 관심사를 분리하여 코드의 유지보수성을 향상시키기 위해 노력했습니다.
- 대용량 트래픽의 상황을 가정하여 서버 성능을 개선하기 위해 노력했습니다.
- 성공하는 테스트 뿐만 아니라, 실패 테스트를 작성하여 테스트 커버리지를 향상시켰습니다.
- 특정 기술을 도입하는데 명확한 이유와 근거를 기반으로 하였습니다.
- 기술에 적용된 다양한 디자인 패턴을 학습하여 객체지향 원리를 이해하기 위해 노력했습니다.
- N+1 문제 해결
- DataBase Replication 필요성과 적용과정
- 낙관적 락을 활용한 동시성이슈 해결과정
- 전략패턴을 활용한 중복코드 제거
- 분산서버 환경의 세션 스토리지 선택 고려사항
- FetchJoin, 1차캐시를 활용해 DB와의 통신 줄이기(In Progress)
- CompletableFuture를 활용해 결제로직 비동기 처리과정 (Todo)
- 데이터베이스 부하를 줄이기 위해 캐시서버 도입과정(Todo)
브랜치 전략은 Git-flow를 사용했습니다. Git-flow에는 항상 유지되는 메인 브랜치(main
, develop
)와 일정 기간 동안 유지되는 보조 브랜치(feat
, release
, hotfix
)로 총 5가지 종류의 브랜치가 있습니다.
해당 프로젝트는 서비스 운영을 목적의 목적이 아니었기 때문에 develop
, release
, hotfix와
같이 불필요한 브랜치를 사용하지 않고 feat
브랜치를 직접 main
브랜치로 병합하는 방식을 사용했습니다.
또한 병합 과정에서 rebase를 사용하여 커밋 트리를 단순화시켰습니다. 자세한 내용은 wiki를 참고해주시면 감사하겠습니다.
