O2O 주문 배달 플랫폼을 스프링 부트 기반의 모놀리식 아키텍처로 개발한 팀 프로젝트 입니다.
- 주제: 배달 및 포장 음식 주문 관리 플랫폼 개발
- 목표: 광화문 근처에서 운영될 음식점들의 배달 및 포장 주문 관리, 결제, 그리고 주문 내역 관리 기능을 제공하는 플랫폼 개발

Name | Role | Domain |
---|---|---|
조원호(팀장) | 백엔드 개발, 배포 | BE: Order , Payment , OrderHistory , Review , AI Prompt , AI History |
신유섭 | 백엔드 개발 | BE: User , Auth , Address |
김소이 | 백엔드 개발 | BE: Store , Category , Menu , Delivery Area |
임수진 | 백엔드, 프론트(BackOffice)개발 | BE: Report , AI History , FE: BackOffice |
- Backend: Spring Boot 3.x, Java 17
- Frontend: Vue.js
- DB: PostgreSQL
- Build Tool: Gradle
- Version Control: Git
- Monolithic Application
- Layered Architecture: Controller, Service, Repository 계층으로 구성된 클린 아키텍처
- Entity 및 DTO: 각 기능별로 Entity와 DTO(Data Transfer Object)를 분리하여 관리
- API 설계: RESTful API 원칙에 따라 설계
- Exception Handling: 글로벌 예외 처리 (ExceptionHandler 사용)



도메인 주도 설계(DDD, Domain-Driven Design) 의 원칙에 따라 도메인을 모델링하였으며, 값 객체(Value Object) 를 사용하여 도메인에 대한 추상화를 구현하였습니다.
값 객체를 적극 활용하여 코드의 가독성과 유지보수성을 높이고, 도메인 로직을 보다 명확하게 표현하였습니다.

기능 요구사항에 따라서 page의 size는 10, 30, 50 중 하나로 설정해야 하고, 이는 paging 처리하는 로직에서 page의 size 검증이 동일하게 진행됩니다. 따라서 모든 도메인에 중복되는 관심사가 발생하고, 이는 코드의 중복으로 이어집니다. 이를 해결하기 위해 page size 검증 로직을 인터페이스 기반의 AOP를 통해 통합하여 관리하였습니다.
SecurityFilterChain에서 전역적인 보안 정책을 적용하여 공통적인 접근 제어 및 보안 정책을 설정하였습니다. 하지만 공통된 루트라도 권한이 다르게 부여되는 경우 SecurityFilterChain에서 설정이 복잡해집니다.
따라서 @PreAuthorize
어노테이션을 사용하여 메소드 레벨의 권한 검사를 추가적으로 진행하여, 특정 비즈니스 로직에 맞추어 세밀한 권한 제어가 가능하도록 구현했습니다.

- 가게 주인은 배달 가능한 지역을 등록할 수 있습니다.
- 고객은 법정동 위치 기반으로 배달 가능한 가게 목록을 조회할 수 있습니다.


- 고객이 작성한 신고 내용을 확인하고 답변을 작성할 수 있는 문의 게시판입니다.
- 고객은 자신이 작성한 신고만 볼 수 있고 관리자는 모든 신고 내역을 확인할 수 있습니다.


- AI API를 연동하여 가게 사장님이 상품 설명을 쉽게 작성할 수 있도록 지원합니다.


- 카테고리로 분류하여 스토어를 추가하고 스토어 주인은 주문내역, 스토어 정보, 주문 처리 및 메뉴 수정이 가능합니다.


- 사용자 권한을 CUSTOMER, OWNER, MANAGER, MASTER로 분류하고 Spring Security와 JWT를 이용해 권한 관리가 가능하도록 했습니다.