Skip to content

Latest commit

 

History

274 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ChapChap Backend

ChapChap 서비스 대표 이미지

Web · iOS (준비 중)

Overview

ChapChap은 일상의 소비를 기록하고, 방문한 동네와 장소를 돌아보며 반복되는 소비 속 나만의 취향을 발견하는 서비스입니다.

ChapChap Backend는 Web·App 클라이언트가 공통으로 사용하는 Spring Boot API 서버입니다.

Gradle Multi-Module 기반의 Modular Monolith 구조를 따르며,
Domain-Driven Design 원칙에 따라 도메인 경계를 정의하고 각 모듈 내부에는 Clean Architecture를 적용했습니다.

아키텍처와 설계 원칙 · Code·Git 컨벤션

Features

Domain Features
계정 Web·iOS 공통 소셜 로그인(PKCE), 약관 동의, JWT 발급·재발급, 프로필·회원탈퇴
소비기록 날짜·시간·금액·카테고리·장소 기록, 방문 장소 조회, 스티커 획득
영수증 OCR 영수증 이미지 인식, 매장명·주소·거래 일시·결제금액 초안 생성
장소 Google Place ID 기반 중복 방지, 방문 장소 사진 조회, SGIS 행정동 변환, 장소 좋아요
추천 지도 중심 좌표 주변의 미방문 인기 장소와 최근 30일 선호 카테고리 장소 추천
리포트 현재 소비 현황과 월간 통계·소비 페르소나 제공
알림 알림 목록·읽음 처리, 월간 리포트 완료 및 금요일 소비 기록 리마인드 FCM 푸시

Tech Stack

Area Technologies
Core Stack Java 21 Spring Boot 3.5.16 Gradle 8.14.3
Web & API Spring Web MVC Jakarta Bean Validation Spring RestClient springdoc-openapi 2.8.17 Swagger UI
Security Spring Security Kakao OAuth 2.0 Google OpenID Connect JWT
Data Spring Data JPA QueryDSL PostgreSQL 17 Flyway
Geospatial PostGIS 3.5 Hibernate Spatial JTS
Cache & Rate Limiting Redis 7.4 Lua Script
Integrations CLOVA General OCR Google Places API SGIS OpenAPI Firebase Cloud Messaging
Infrastructure Amazon EC2 Amazon RDS Amazon ECR Amazon S3 AWS Systems Manager AWS KMS Terraform
Deployment Docker Docker Compose Caddy 2 GitHub Actions
Observability Spring Boot Actuator SLF4J and Logback Amazon CloudWatch Logs
Testing JUnit 5 Mockito Testcontainers ArchUnit

Architecture

System Architecture

AWS 인프라는 Terraform으로 관리하며, 하나의 Application EC2에서 Production과 Development의 애플리케이션·Redis 컨테이너를 분리해 운영합니다.
Caddy는 /api와 /dev/api 요청을 각 환경으로 라우팅하고, Production은 Blue/Green, Development는 단일 컨테이너 교체 방식으로 배포합니다.
RDS는 Private Subnet에 배치하고 데이터베이스와 S3 버킷은 환경별로 분리하며, 로그는 CloudWatch에 수집합니다.

ChapChap 시스템 아키텍처 구성도

Multi-Module Architecture

ChapChap은 하나의 애플리케이션으로 배포하는 Modular Monolith입니다. 도메인마다 Gradle 모듈을 분리하고, app-server가 실행 시점에 모듈을 조립합니다.

flowchart TB
    App["app-server<br/>실행 및 모듈 조립"]

    subgraph DomainModules["도메인 모듈"]
        direction LR
        Account["module-account<br/>계정 및 인증"]
        Report["module-report<br/>현재 현황 및 월간 리포트"]
        Recommendation["module-recommendation<br/>주변 장소 추천"]
        Consumption["module-consumption<br/>소비기록 관리 및 등록"]
        Place["module-place<br/>장소 및 위치 조회"]
        Notification["module-notification<br/>알림 관리 및 Push 발송"]

        Account --> Consumption
        Consumption --> Place
        Report --> Consumption
        Report --> Place
        Report --> Account
        Report --> Notification
        Notification --> Account
        Recommendation --> Consumption
        Recommendation --> Place
    end

    Core["module-core<br/>기술적 공통 요소"]

    App -->|"전체 조립"| DomainModules
    App --> Core
    DomainModules -->|"모든 모듈 참조"| Core
Loading
Module Responsibility
app-server Spring Boot 실행, 전역 Web·Security·Scheduling 설정, 도메인 모듈 조립
module-account 계정·소셜 로그인·토큰 발급 및 사용자 상태 관리
module-consumption 소비기록 관리와 수기·영수증 OCR 기반 등록
module-place 장소·좋아요 관리, 위치 기반 조회와 외부 장소 정보 연동
module-recommendation 방문 이력·선호 카테고리를 조합한 주변 장소 추천
module-report 현재 소비 현황과 월간 소비 리포트 생성·조회
module-notification 알림 조회·읽음 처리와 FCM 푸시 발송
module-core 공통 API 응답·예외·인증 애노테이션, JPA 공통 요소와 테스트 Fixture

도메인 모듈은 api → application → domain, infra → application/domain 방향을 따릅니다.
다른 도메인의 Entity나 Repository를 직접 사용하지 않고, 필요한 모듈의 공개 Application API와 DTO를 통해 연동합니다.
이 규칙은 ArchUnit 테스트로 검증합니다.

Team

오형석 GitHub 프로필
오형석

@dhgudtmxhs
박가영 GitHub 프로필
박가영

@p0o0y

About

15기 5조

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages