본 레파지토리는 넘블 딥 다이브 프로젝트인 "방문자 수 트래킹 서비스 구축하기"의 결과물입니다.
본 프로젝트는 url의 조회수를 관리하는 기능을 제공합니다.
- url 정보를 등록하고 조회수를 증가시킬 수 있습니다.
- url의 일일 조회수와 총 조회수를 조회할 수 있습니다.
- url의 7일간의 조회수를 조회할 수 있습니다.
다음 4 가지의 기능을 제공합니다.
2023/10/05 ~ 2023/10/18 (2주)
- Back-end
: Java, Spring, JPA, Mysql, Swagger - 버전 관리
: Git, Github actions(CI)
Github Actions를 이용하여 main branch에 pull request가 들어오면 프로그램을 자동으로 테스트와 빌드합니다. (코드)
- main branch: 구현이 완료된 사항을 합하는 용도
- develop branch: 구현 중인 사항을 저장하는 용도
| ERD |
|---|
- 대용량 데이터 처리 성능 향상
- 오늘 조회수 업데이트 기능에서 자정마다 모든 당일 조회수를 history에 저장하고 0으로 변경하는 대용량 업데이트를 진행
- jpa의 updateAll 함수를 jdbctemplete batch update로 변경하여 문제 해결
- 10,000개의 데이터에 대한 대용량 업데이트의 실행시간을 24초에서 2.541초로 단축
- 조회수 증가 요청의 동시성 문제 개선
- 조회수 증가 요청 시 동시성 문제가 발생
- Redis의 Redisson을 이용하여 url별로 분산락을 구성
- API 프로토타입 만들기
- ERD 그리기 및 요구사항 정의
- 프로토타입 작성
- 단위 테스트 코드 작성 (테스트 DB 분리, 테스트 전 DB 초기화)
- Swagger 사용하기 & CI 적용하기
- Swagger 적용하기
- 통합 테스트 코드 작성, Github Actions를 이용한 CI 적용
- 대용량 데이터 처리와 동시성 문제 처리
- 대용량 처리 성능 향상(paging + jdbctemplete)
- 조회수 증가 동시성 문제 해결(Redis redisson)