Skip to content

위치 기반 서울시 맛집 추천과 음식 관련 소통을 지원하는 서비스 🍽️

Notifications You must be signed in to change notification settings

ryuneng/tasty-track

 
 

Repository files navigation

🍽️ TastyTrack

🔍 목차

  1. 서비스 소개
  2. R&R 및 주요 소스 코드
  3. 프로젝트 일정
  4. 프로젝트 환경
  5. ERD
  6. 협업 및 커뮤니케이션
  7. Github Issue & Jira 를 통한 Task 트래킹 관리 (WBS)
  8. Discord 를 활용한 소통 및 PR 알림 봇
  9. 트러블 슈팅
  10. 고민한 흔적
  11. 디렉토리 구조

📋 서비스 소개

  • 서울시 음식점 공공데이터를 활용하여 서울의 맛집 목록을 자동으로 업데이트하고, 이를 기반으로 서비스를 제공합니다. 사용자의 위치에 맞춰 맛집 및 메뉴를 추천함으로써 다양한 음식을 더욱 풍부하게 경험할 수 있도록 돕고, 음식을 좋아하는 사람들 간의 소통과 공유를 지원하는 애플리케이션의 API 서버입니다.

  • 🔗 활용한 공공데이터 | https://data.seoul.go.kr/


🧑🏻‍💻 R&R

담당자 담당 업무
오예령 사용자 기능 구현 (로그인, 회원가입, 회원정보 조회, 회원정보 수정)
유리빛나 데이터 파이프라인 구축 (서울시 공공데이터 수집, 전처리, 저장, 자동화)
김은정 맛집 조회 기능 구현 (상세 조회, 위치 기반 맛집 추천, 평가 생성)
배서진 맛집 조회 기능 구현 (목록 조회, 지역명 기준 맛집 추천, 시군구 조회), 디스코드 점심메뉴 추천

담당 업무 소스 코드

  1. Spring Batch 주요 소스 코드 보기
  2. 공공데이터를 수집하고 저장하는 로직의 주요 소스 코드 보기
  3. 배치 작업 스케줄링 주요 소스 코드 보기

🗓 프로젝트 일정



🛠️ 프로젝트 환경

Stack Version
Spring Spring Boot 3.3.x
Gradle Gradle 8.8
Java JDK 17
MySQL MySQL 8.0
Redis Redis 6.0

⛓️ ERD



🗣️ 협업 및 커뮤니케이션

문서화 작업

☑️ 1) 회의록


☑️ 2) 개인 Daily TODO


☑️ 3) 전체 TODO



🏃‍♀️‍➡️ Github Issue & Jira 를 통한 Task 트래킹 관리 (WBS)

개발일정 관리
image

☑️ 1) Github Issues


☑️ 2) Jira



🤖 Discord를 활용한 소통 및 PR 알림 봇

소통 및 PR 알림 확인
Alt text


💥 트러블 슈팅

  • 원본 데이터를 가공 데이터에 저장하는 과정에서 발생한 6가지 주소 관련 문제 - WIKI 이동
  • Spring Batch 구현 중에 발생한 오류 - WIKI 이동
  • Docker 실행 과정에서 발생한 오류 - WIKI 이동

🤔 고민한 흔적


🗂️ 디렉토리 구조

직관적인 구조 파악과 관리를 위해 도메인형 구조를 채택하였습니다.

🗂️ 전체 구조

    Folder PATH listing
Volume serial number is D6B6-EE51
C:.
│   .env
│   .gitignore
│   .gitmessage.txt
│   build.gradle
│   docker-compose.yml
│   Dockerfile
│   gradlew
│   gradlew.bat
│   README.md
│   settings.gradle
│   structure.txt
│   
├───.github
│   │   PULL_REQUEST_TEMPLATE.md
│   ├───ISSUE_TEMPLATE
│   │       issue_form.yml
│   └───workflows
│           create-jira-issue.yml
├───.gradle
│
├───build
├───gradle
│   └───wrapper
│           gradle-wrapper.jar
│           gradle-wrapper.properties
└───src
    ├───main
    │   ├───java
    │   │   └───com
    │   │       └───allclear
    │   │           └───tastytrack
    │   │               │   TastytrackApplication.java
    │   │               │   
    │   │               ├───domain
    │   │               │   ├───auth
    │   │               │   │   └───token
    │   │               │   ├───region
    │   │               │   │   ├───controller
    │   │               │   │   ├───dto
    │   │               │   │   ├───entity
    │   │               │   │   ├───repository
    │   │               │   │   └───service
    │   │               │   │           
    │   │               │   ├───restaurant
    │   │               │   │   ├───controller
    │   │               │   │   ├───coordinate
    │   │               │   │   │   ├───dto
    │   │               │   │   │   └───service
    │   │               │   │   ├───dto
    │   │               │   │   ├───entity
    │   │               │   │   ├───repository
    │   │               │   │   └───service
    │   │               │   ├───review
    │   │               │   │   ├───controller
    │   │               │   │   ├───dto
    │   │               │   │   ├───entity
    │   │               │   │   ├───repository
    │   │               │   │   └───service
    │   │               │   └───user
    │   │               │       ├───controller
    │   │               │       ├───dto
    │   │               │       ├───entity
    │   │               │       ├───repository
    │   │               │       └───service
    │   │               │               
    │   │               └───global
    │   │                   ├───config
    │   │                   ├───domain
    │   │                   ├───entity
    │   │                   └───exception
    │   │                       └───handler
    │   └───resources
    │       │   application.yml
    │       └───db
    │               region.sql
    └───test
        └───java
            └───com
                └───allclear
                    └───tastytrack
                        │   TastytrackApplicationTests.java
                        ├───domain
                        │   ├───region
                        │   │   └───service
                        │   │           RegionServiceImplTest.java
                        │   └───user
                        │       ├───controller
                        │       │       UserControllerTest.java
                        │       └───service
                        │               TokenVerifyTest.java
                        │               UserServiceImplTest.java
                        ├───reivew
                        │       ReviewControllerTest.java
                        │       ReviewServiceImplTest.java
                        └───restaurant
                                RestaurantControllerTest.java
                                RestaurantServiceImplTest.java                                


📂 상세 구조

📦src
 ┣ 📂main
 ┃ ┣ 📂java
 ┃ ┃ ┗ 📂com
 ┃ ┃ ┃ ┗ 📂allclear
 ┃ ┃ ┃ ┃ ┗ 📂tastytrack
 ┃ ┃ ┃ ┃ ┃ ┣ 📂domain
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂auth
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂token
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜JwtTokenUtils.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RefreshToken.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RefreshTokenCleanupScheduler.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RefreshTokenManager.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RefreshTokenRepository.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TokenProvider.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜JwtAuthenticationFilter.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜UserAuth.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜UserAuthImpl.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜UserDetailsImpl.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserDetailsServiceImpl.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂region
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜RegionController.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RegionGroupResponse.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜RegionResponse.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂entity
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜Region.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂repository
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜RegionRepository.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂service
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RegionService.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜RegionServiceImpl.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂restaurant
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜RestaurantController.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂coordinate
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜Coordinate.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CoordinateAddress.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CoordinateMeta.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CoordinateResponse.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CoordinateRoadAddress.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜Documents.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂service
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CoordinateService.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜CoordinateServiceImpl.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜LocalData.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜LocalDataResponse.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RawRestaurantResponse.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RestaurantDetail.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RestaurantListRequest.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RestaurantSearch.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜Result.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂entity
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RawRestaurant.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜Restaurant.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂repository
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RawRestaurantRepository.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜RestaurantRepository.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂service
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜DataProcessingService.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RawDataService.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RestaurantService.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜RestaurantServiceImpl.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂review
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ReviewController.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ReviewRequest.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ReviewResponse.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂entity
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜Review.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂repository
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ReviewRepository.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂service
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ReviewService.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ReviewServiceImpl.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂user
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜TokenController.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserController.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜LoginRequest.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜UserCreateRequest.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜UserInfo.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜UserLocationInfo.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserUpdateRequest.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂entity
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜User.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂repository
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserRepository.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂service
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜UserService.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserServiceImpl.java
 ┃ ┃ ┃ ┃ ┃ ┣ 📂global
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂config
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜JpaConfig.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜SwaggerConfig.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜WebSecurityConfig.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂domain
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂entity
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜Timestamped.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂exception
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂handler
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜RestApiExceptionHandler.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CustomException.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ErrorCode.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ErrorResponse.java
 ┃ ┃ ┃ ┃ ┃ ┗ 📜TastytrackApplication.java
 ┃ ┗ 📂resources
 ┃ ┃ ┣ 📂db
 ┃ ┃ ┃ ┗ 📜region.sql
 ┃ ┃ ┗ 📜application.yml
 ┗ 📂test
 ┃ ┗ 📂java
 ┃ ┃ ┗ 📂com
 ┃ ┃ ┃ ┗ 📂allclear
 ┃ ┃ ┃ ┃ ┗ 📂tastytrack
 ┃ ┃ ┃ ┃ ┃ ┣ 📂domain
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂region
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂service
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜RegionServiceImplTest.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂user
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserControllerTest.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂service
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜TokenVerifyTest.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜UserServiceImplTest.java
 ┃ ┃ ┃ ┃ ┃ ┣ 📂reivew
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ReviewControllerTest.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ReviewServiceImplTest.java
 ┃ ┃ ┃ ┃ ┃ ┣ 📂restaurant
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜RestaurantControllerTest.java
 ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜RestaurantServiceImplTest.java
 ┃ ┃ ┃ ┃ ┃ ┗ 📜TastytrackApplicationTests.java

About

위치 기반 서울시 맛집 추천과 음식 관련 소통을 지원하는 서비스 🍽️

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 99.7%
  • Dockerfile 0.3%