Skip to content

joo-chang/BalloonDelivery

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

151 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

프로젝트 개요

프로젝트 명: 풍선 딜리버리

프로젝트 설명: ‘풍선 딜리버리’는 주문 관리 플랫폼입니다. 사용자는 이 플랫폼을 통해 배달 및 포장 주문을 손쉽게 처리할 수 있으며, 가게 주인은 가게와 메뉴를 관리할 수 있습니다. 또한, AI가 자동으로 메뉴 설명을 추천해주는 기능을 제공하여 사용 편의성을 높였습니다.

프로젝트 기간: 2024년 8월 22일 - 2024년 9월 2일


팀원

박주창 김진선 이지선
joo-chang kimzinsun easyxun
Image Description Image Description Image Description
Leader
주문, 결제 유저(인증/인가), 고객센터 가게, 메뉴, AI

프로젝트 목적 

이번 프로젝트의 주요 목적은 MSA(Microservices Architecture)를 실습하며, Redis를 이용한 빠른 권한 체크, 서비스 간의 통신을 관리하는 Eureka 서버 및 Gateway 서버를 직접 구현해보는 것입니다. 이를 통해 분산 시스템 환경에서의 개발 역량을 높이고, 성능 최적화 및 서비스 간의 효율적인 통신 방법을 익히고자 하였습니다.


프로젝트 구성

시스템 아키텍처

image


ERD

Pasted image 20240902164001


기술 스택

  • Framework: SpringBoot, SpringSecurity, SpringDataJPA, Spring Cloud
  • Language: JAVA 17
  • Database: PostgreSQL, Redis
  • Login: JWT
  • Deploy: Docker, AWS EC2
  • AI: Gemini AI
  • API doc: �Postman
  • Communication Tools : Github, Notion, Slack

API docs

Postman Documentation

API Document


주요 기능

  1. 주문 및 결제 기능: 주문 및 결제를 진행하고, 주문 상태를 관리할 수 있습니다.

  2. 가게 등록 및 메뉴 관리: 가게 등록, 메뉴 추가, 수정, 삭제, 검색 기능을 제공하여 가게 운영의 효율성을 높였습니다.

  3. 사용자 권한 관리: 사용자 역할에 따라 권한을 부여하고 관리할 수 있는 기능을 제공합니다.

  4. AI 기반 메뉴 설명 추천: AI 기반 메뉴 설명 추천 기능으로 사용자의 편의성을 극대화했습니다.

  5. 공지사항 : 관리자 권한으로 공지사항을 등록하고 관리할 수 있는 기능을 제공합니다.

  6. 신고 및 답변 : 사용자 및 가게 주인이 신고 글을 작성할 수 있으며, 관리자는 이에 대한 답변을 관리할 수 있습니다.


프로젝트 실행 방법

  • Java 17, PostgreSQL, Redis 설치
  • 프로젝트 클론 및 docker 설치 후 로컬 환경에서 순차적으로 실행
  1. 프로젝트 클론

     git clone https://github.com/yourusername/balloon-delivery.git
    
  2. application-private.yml 파일 생성

    (private.yml 작성 예시)
    jwt:
      secret: <your-jwt-secret>
      expiration: <your-expiration-time>
    ADMIN_TOKEN: <your-admin-token>
    ai:
      url: <your-ai-url>
  3. application-datasource.yml 파일 생성

    (datasource.yml 작성 예시)
    spring:
      datasource:
         driver-class-name: org.postgresql.Driver
         url: jdbc:postgresql://<your-database-url>:<your-port>/<your-database-name>
         name: <your-username>
         password: <your-password>
    data:
      redis:
         host: <your-redis-host>
         port: <your-redis-port>
         username: <your-redis-username>
         password: <your-redis-password>
      jpa:
         hibernate:
           ddl-auto: update
         properties:
           hibernate:
             dialect: org.hibernate.dialect.PostgreSQLDialect
             format_sql: false
  4. 프로젝트 빌드 및 실행

     ./gradlew clean build
    
  5. 도커 컴포즈로 서비스 실행

     docker-compose up --build
    
  6. 서비스 확인

  • Gateway:8080
  • Eureka:19090
  • BalloonDelivery:19093

트러블 슈팅

배포

문제 상황

  • Eureka 서버, 게이트웨이, API 어플리케이션을 도커 컴포즈 파일로 만들어 배포
  • 동작시켜보니 서비스간 통신 실패로 토큰 검증이 제대로 이루어 지지 않아 401 에러 발생

해결 방안

  • Feign Client는 Eureka에 등록된 서비스 이름을 기반으로 서비스를 호출
  • 하지만 개발 환경에서 localhost를 사용하여 서비스가 등록되어, Feign Client가 이를 올바르게 인식하지 못하고, 서비스 디스커버리가 제대로 작동하지 않음
  • localhost로 설정된 부분을 Eureka 서버에 등록된 서비스 이름으로 호출 되도록 설정 변경

Custom Exception Handler 적용 문제 해결

문제 상황

  • Custom Exception Handler를 만들었지만, 파일 이름 때문에 핸들러의 적용 순서가 예상과 다르게 동작
  • 그 결과, 예외가 발생했을 때 예외 처리 로직이 원하는 순서로 적용되지 않음

해결 방안

  • 스프링에서 예외 처리 핸들러의 적용 순서는 기본적으로 클래스의 이름 순서에 따라 결정
  • 이를 해결하기 위해 @Order 애노테이션을 사용하여 Exception Handler의 적용 순서를 명시적으로 설정
  • @Order 애노테이션을 통해 예외 핸들러의 우선 순위를 지정하여, 예외 처리 로직이 의도한 대로 순차적으로 적용되도록 설정

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages