요구 사항 |
기술 |
기술 선택 이유 |
자세한 내용 |
동시성 제어 |
선택한 기술 : |
|
|
선택지 :
- Pessimistic Locking
- Redisson 분산락
- Lettuce 스핀락 | Lettuce 스핀락
- Version2에서 시간대별 예약 현황 테이블을 만듦으로써 성능적인 면의 상승이 있었지만, 동시성 제어가 실패하게 되면 코어 로직에서 이전 Version1보다 치명적인 문제가 발생할 수 있음
- Pessimistic Locking이 속도면에서 더 좋은 성능을 갖고 있지만, 다음과 같은 단점이 존재
• 동시에 많은 요청이오면 데드락(deadlock)이 발생할 가능성
• 특정 데이터에 락을거는 특성상 해당 로직의 추가적인 수정이 발생시 락의 위치를 바꾸거나 추가적인 락을 걸어야 함
• 완벽한 동시성 제어가 되지 않을 수 있음
→ 동시성 제어의 속도면에서는 Pessimistic Locking이 더 좋은 성능일지라도, 전체적인 프로젝트의 안정성을 위해 Lettuce의 스핀락 사용 | 기본 개념 :
‣
성능 테스트 :
‣
트러블 슈팅 :
‣
‣ |
| CI/CD 자동화 | 선택한 기술 :
선택지 :
- GitHub Actions
- Jenkins | GitHub Actions
- 무료이거나 비용이 저렴할 것
- 짧은 기간에 사용해야하기 때문에 러닝커브 및 예상 리소스가 낮을 것
- EC2에 배포가 가능해야하고 GIT과 연동이 될 것 | 기본 개념 :
‣
‣ |
| Test | 선택한 기술 :
- Jmeter, JUnit5 | Jmeter
- 대용량 트래픽을 시뮬레이션할 수 있는 테스트 도구로써 Jmeter를 선정
- 이를 통해 시스템이 정상적으로 대량의 요청을 처리할 수 있는지 확인, 병목 현상 발견
JUnit5
- 자바 언어를 기반으로 하는 유닛 테스트 도구
- 단위 테스트 : 단위테스트를 통해 해당 메서드가 정상 작동하는지 확인
- 통합 테스트 : 동시성 제어 기능을 테스트하고 다중 스레드 환경에서 안정성을 확인 | 기본 개념:
‣
‣
트러블 슈팅:
‣
‣
|
| 검색 성능 개선 | 선택한 기술 :
- Fetch Join
- QueryDSL
- Fulltext index | Fetch Join(N+1 문제)
- 부모 엔티티를 조회한 후 연관된 자식 엔티티를 조회하는 과정에서 부모 엔티티 수만큼 자식 엔티티를 조회하는 문제 해결
QueryDSL
- 자바 코드와 유사한 형태로 쿼리를 작성 가능
→ 가독성 향상, 코드 재사용성 향상, 컴파일시 문법 오류 확인 가능
- 런타임에 쿼리를 조건에 따라 다르게 생성하고 실행해야 하는 동적쿼리 생성 가능
Fulltext index(ngram)
ParkInfo
의 name 컬럼에 index를 걺으로써 검색 속도 향상
- 특정 단어, 구 검색 정확성 향상 | 기본 개념 :
‣
‣
‣
‣
트러블 슈팅 :
‣ |
| API | 선택한 기술 :
선택지 :
- Kakao map API
- Naver map API | Kakao map API
- 선택기준 : 검색 시 다양한 조건에 의해 검색이 가능해야함 ( 건물명, 도로명, 주소 등)
- Naver map API : 주소에 대한 위도, 경도만 검색가능 ( 강남구, 서울시 등 )
- Kakao map API : 검색어에 대한 위도, 경도를 검색가능( 63빌딩, 강남구 등 ) | 트러블 슈팅 :
‣ |