본문 바로가기
BackEnd/Project

[PharmNav] Ch03. 프로젝트 설계

by 개발 Blog 2024. 9. 1.

공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.

이번 시간에는 프로젝트 설계를 해보고 어떤 기술 스택을 사용할지 어떤 기능들이 구현되어야 할지 살펴본다.

 

Pharmacy Recommendation Process

  • 주소 변환
    사용자가 입력한 주소는 문자열 기반이기 때문에, 이를 위치 기반 데이터인 위도와 경도로 변환해야 한다. 이 과정에서는 Kakao API를 이용한다.
  • Redis를 통한 성능 최적화
    각 요청마다 DB에서 약국 현황 데이터를 조회하고 계산하는 대신, Redis를 사용하여 캐싱을 통해 성능을 최적화한다.
  • 약국 현황 데이터 조회 및 거리 계산
    Redis나 DB에 저장된 약국 현황 데이터를 조회하고, 하버사인 포뮬러 알고리즘을 이용해 거리 계산을 수행한다. 이후 결과를 소팅하여 가까운 약국을 추출한다.
  • Shorten URL 생성
    결과값은 Shorten URL을 생성하기 위해 사용되며, 고객에게 전달된다.

Direction Shorten Url Process

 

  • 길안내 요청
    고객이 길안내를 요청하면, 인코딩된 ID값과 매핑된 결과값들을 조회한다.
  • URL 리다이렉트
    조회된 결과값을 바탕으로 고객에게 카카오 길안내 URL을 생성하여 리다이렉트하는 프로세스를 진행한다.

Feature List

  • Spring Data JPA를 이용한 CRUD 메서드 구현
  • Spock를 이용한 테스트 코드 작성
  • Testcontainers를 이용하여 독립 테스트 환경 구축
  • 카카오 주소검색 API 연동하여 주소를 위도, 경도로 변환
  • 추천 결과를 카카오 지도 URL로 연동하여 제공
  • 공공 데이터를 활용하여 약국 현황 데이터 개발
  • Handlebars를 이용한 간단한 View 제작
  • Docker를 사용하여 다중 컨테이너 애플리케이션 구축
  • 애플리케이션을 클라우드 서비스에 배포
  • Spring retry를 이용한 재처리 구현 (카카오 API 네트워크 오류 등)
  • base62를 이용한 shorten URL 개발 (길안내 URL)
  • Redis를 이용하여 성능 최적화

사용 기술 

  • JDK 17
  • Spring Boot 3.3.3
  • Spring Data JPA
  • Gradle
  • Handlebars (프론트엔드 개발을 빠르게 하기 위해 사용)
  • Lombok
  • Docker (클라우드 서비스를 빠르게 배포하기 위해 다중 컨테이너 사용)
  • AWS EC2
  • Redis
  • MariaDB
  • Spock (JUnit에 비해 간편하게 테스트 코드를 작성할 수 있음)
  • Testcontainers (독립적인 환경에서 테스트 코드를 작성하기 용이함)