Giter VIP home page Giter VIP logo

pharmacy-explorer's Introduction

pharmacy-explorer

특정 위치에서 가까운 약국 탐색기 서비스

데모페이지 링크

요구사항

약국 찾기 서비스 요구사항

  • 위도, 경도가 포함된 약국 현황 데이터를 기반으로 주소 정보를 입력 시 해당 데이터 기반 가까운 3곳의 정보를 반환한다.
    • 입력 데이터인 주소는 도로명주소 혹은 지번주소로 한다.
      • 데이터 입력 시 카카오 우편번호 서비스를 이용할 예정이다.
      • 동, 호수는 불필요하니 지번, 혹은 도로명까지만 입력한다.
    • 가까운 3곳에 대한 정보 추출 시 아래의 방법으로 구분한다.
      • 구체의 두 점 사이의 거리 관련 알고리즘 (Haversine Formula)
      • 반경 10km 내에 없을 경우 아무것도 반환하지 않는다.
      • 추출한 약국 정보에 대한 길안내 URL을 반환한다
        • URL 가독성을 위해 shortcut url 활용 예정

제한사항

  • 공공데이터 추출을 목적으로 하였기에, 의정부 지역 내 약국으로 한정함

수행 흐름

sequenceDiagram
    actor User
    participant Service
    participant Cache
    participant RDB
    participant KakaoAPI
    User ->> Service: 1. 주소 입력 (도로명 or 지번)
    Service ->> KakaoAPI: 2. 입력 데이터 기반 위치 정보 조회 요청
    KakaoAPI ->> Service: 3. 입력 데이터 기반 위치 정보 조회 반환 (위도, 경도 포함)
    Service ->> Cache: 4-a-1. 현재 위치 기반 약국 정보 조회 요청
    Cache ->> Service: 4-a-2. 캐싱된 데이터가 존재할 시 데이터 반환
    Service ->> RDB: 4-b-1. 캐싱된 데이터가 없을 시 저장된 약국 현황 DB에 조회 요청
    RDB ->> Service: 4-b-2. 현재 위치 기반 약국 정보 데이터 반환
    Service ->> Service: 5. 알고리즘을 통해 근방 3곳의 약국 정보 추출
    Service ->> RDB: 6. 추출된 약국들에 대한 길찾기 URL 및 shortcut URL 매핑 저장
    Service ->> User: 7. 조회된 약국들에 대해 구성된 shortcut URL 출력

프로젝트 구성 항목

  • Java 11
  • Spring boot 2.7.16
  • Spring boot JPA
  • Spring boot Web
  • Spring boot Devtools
  • Spring boot Configuration Processor
  • Lombok
  • h2
  • mariaDB

ERD

erDiagram
    PHARMACY {
        bigint id PK
        varchar[255] address
        varchar[255] name
        double longtitude
        double latitude
        timestamp created_date
        timestamp modified_date
    }

    SEARCH_INFO {
        bigint id PK
        varchar[255] base_address
        double base_lng UK
        double base_lat UK
        timestamp created_date
        timestamp modified_date
    }

    SEARCH_INFOS_PHRAMACIES {
        bigint id PK
        bigint search_info_id FK
        bigint pharmacy_id FK
    }

    SHORTEN_URL {
        bigint id PK
        varchar[500] originalUrl
    }

    PHARMACY || -- o{ SEARCH_INFOS_PHRAMACIES: pharmacy_id
    SEARCH_INFOS_PHRAMACIES }o -- || SEARCH_INFO: search_info_id

약국 데이터 수집 제한 사항

  • 공공데이터 포탈 내 위도, 경도 정보가 포함되지 않는 데이터들이 있어 경기도 의정부시 기준의 약국 정보들로 제한함

테이블 정보

PHARMACY

약국 정보

  • address : 약국 주소
  • name : 약국명
  • longtitude : 경도
  • latitude : 위도
  • created_time : 생성 일자
  • modified_time : 마지막 수정 일자

SEARCH_INFO

검색 결과 저장 정보

  • base_address : 검색 요청 주소
  • base_lng : 검색 요청 경도
  • base_lat : 검색 요청 위도
  • created_time : 생성 일자
  • modified_time : 마지막 수정 일자

SEARCH_INFOS_PHRAMACIES

SEARCH_INFO와 PHARMACY 간의 연결테이블

  • search_info_id : SEARCH_INFO에 대한 외래키
  • pharmacy_id : PHARMACY에 대한 외래키

SHORTEN_URL

검색된 약국의 거리뷰, 길찾기뷰 URL 관리 테이블

  • originalUrl : 원본 URL

pharmacy-explorer's People

Contributors

guardjo avatar

Watchers

 avatar

pharmacy-explorer's Issues

[pharmacy-explorer] 거리 계산 관련 기능 개발

사용자가 입력한 주소의 위도, 경도를 기반으로 주변 약국들의 위도, 경도와 비교하여 최대 3개의 약국을 가까운 순으로 반환하는 기능 구현

  • Haversine 알고리즘 조사 및 적용
  • 해당 알고리즘을 기반으로 약국 검색 서비스 구현
  • 관련 테스트 코드 구성

[pharmacy-explorer] 외부 API 예외 처리 추가

외부 호출 API (ex : 카카오 로컬 API)에서 예기치 못한 에러나 통신 장애 등 발생에 대비한 예외 처리 구현

  • spring retry를 활용한 장애 발생 시 처리 로직 설정
  • 관련 테스트 구성

[Dart-02] DataTypes

Dart에서 사용하는 데이터타입들에 대한 학습

  • 기본 타입 학습
  • List 타입 학습
  • String Interpolation
  • Collection
  • Maps
  • Sets

[pharmacy-explorer] 단축 URL 기능 개발

주변 약국 조회 시 조회 결과에 나오는 거리뷰, 길찾기 관련 URL이 무척 길어질 수 있으며, 이에 대한 편의 제공을 위해 단축 URL 기능 구현

  • 기존 URL 별 고유 식별 단축 URL 기능 구현
  • 관련 테스트 코드 구성

[pharmacy-explorer] 뷰 페이지 개발

사용자에게 보여질 브라우저 화면 개발

  • 메인 페이지 구현
  • 검색 서비스 연동
    • 카카오 주소 검색 서비스 활용
  • 결과 페이지 구현
  • 관련 컨트롤러 구현 및 테스트 진행

[pharmacy-explorer] 도메인 설계 및 구현

약국 조회 관련 도메인 설계 및 구현

  • 약국 관련 필요 스키마 설계 및 구현
  • 스키마 설계를 통해 도출된 테이블에 대한 엔티티 구현
  • 관련 테스트 데이터 적재 및 테스트 진행
    • TestContainers 환경 구성
  • 약국 데이터 적재

[pharmacy-explorer] 운영 환경 컨테이너 구성 및 배포

클라우드 환경에 운영 서버용 컨테이너 구성 및 배포

  • -app, redis, postgre 도커 컨테이너 구성 및 docker-compose 작성-
  • cloudtype 은 docker-compose를 지원안하기에 별도 서버로 구성
  • 클라우드 환경 설정 및 배포
  • github action 구성

[pharmacy-explorer] 컨테이너 환경 구성

서비스가 수행되는 application, DB 및 redis 등을 전부 Docker 기반 컨테이너로 관리 및 수행하기 위한 환경 구성

  • application 도커 이미지 구성
  • redis, DB 등의 개발 환경 이미지 구성
  • 다중 컨테이너 환경 구성 및 배포

[pharmacy-explorer] 주소 검색 기능 개발

사용자 입력으로 주어지는 도로명/지번 주소에 대해 위도, 경도값을 반환해주는 기능 개발

  • Kakao 주소 검색 API 문서 확인 및 적용
  • kakao 주소 검색 API 호출 및 가공 서비스 구현
  • 관련 테스트 구성

[pharmacy-explorer] 뷰 페이지 및 서비스 연동

뷰 페이지와 기능 서비스 연동

  • 페이지 별 필요 기능 연동
    • 검색 요청한 주소 기반 약국 추천 기능 연동
    • 검색 결과 약국들에 대한 거리뷰, 길찾기 URL 연동
    • 검색 결과 저장 기능 연동
  • 관련 테스트 진행

[pharmacy-explorer] 요구사항 정리

약국 탐색 서비스에 대한 요구사항 수립 및 기초 설계 정리

  • 요구사항 정리
  • 기본 뼈대 구조 설계
  • 기본 프로젝트 구성

[pharmacy-explorer] 검색 결과 저장 기능 개발

사용자가 입력한 위치 기반에 대한 추천 약국 검색 결과 저장 기능 개발

  • 검색 결과 관련 스키마 설계 및 구현
  • 설계사항에 대한 Entity 매핑 및 Repository 구현
  • 검색 결과 저장 서비스 구현
  • 관련 테스트 구성

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.