Recipe(레시피)와 Repository(리포지토리)의 합성어로, 회원들이 레시피를 공유하고 리뷰와 댓글을 통해 소통할 수 있는 레시피 공유 사이트입니다. 기본적인 소셜 인증, 컨텐츠에 대한 CRUD, 알림 기능 등이 존재합니다.
- 자바 버전 : JAVA 17, Spring Boot 3.1.2
- 서버 스펙 : vCPU 2코어, 1GB 메모리(GCP e2-micro) Scale-out 구성
- 가용 TPS : 600
- 단순히 구현이 아닌 부하 테스트를 통해 트래픽이 몰리는 상황에서도 안정적인 서비스를 제공하는 것을 목표
- RESTful한 API 설계
- git flow 전략(참고)을 활용한 브랜치 관리
- 객체지향적인 설계와 테스트하기 좋은 코드를 달성
- 각 도메인 기능에 대한 단위 테스트 코드를 작성
- 기획 및 설계부터 클라우드 서버 배포 자동화까지 어플리케이션 서비스가 제작되는 일련의 과정 실습
- UI와 자바스크립트 API 호출 코드를 직접 작성하여 사용자와 협업자 관점에서 서버 코드 이용
- 알림 처리를 위한 ApplicationEventPublisher와 커넥션 데드락 문제
- 검색 고도화를 위한 Elastic Search 사용 (1) : Kafka 인덱싱 비동기 처리
- 검색 고도화를 위한 Elastic Search 사용 (2) : ElasticSearchClient 쿼리 작성
- Artillery를 이용한 부하 테스트
- 다중 서버를 통한 TPS 개선 : 세션 인증 정보가 풀리는 문제
- <단위 테스트>를 읽고 : 과연 테스트 코드가 잘 작성되었다고 할 수 있을까?
- 인덱스 페이지 구성하기 : ES 스크립트 작성과 캐싱을 이용한 성능 개선
- Jenkins와 Docker를 이용한 CI/CD
- 레시피와 연관 관계를 맺는 재료(M:N), 태그(1:N), 단계(1:N), 리뷰와 댓글(1:N)
- 유저와 연관 관계를 맺는 레시피(1:N), 팔로우 관계(M:N), 알림(M:N), 리뷰와 댓글(1:N)
- api 요청에
axios
, UI 구성을 위해bootstrap
을 사용했습니다.