| 항목 | 상세 |
|---|---|
| 소개 | 졸업스냅 작가 탐색부터 문의 · 채팅 · 예약까지 하나로 연결하는 매칭 플랫폼 |
| 기간 | 26년 06월 ~ 08월 |
| 인원 | 기획 1, 디자인 1, 프론트엔드 2, 백엔드 1 |
| 서비스 링크 | iOS / Android |
| 기능 | 상세 |
|---|---|
| 멀티 역할 계정 | 토큰 activeRole 전환, 역할별 커스텀 ArgumentResolver 3종 |
| 작가 일정 관리 | 규칙만 저장(sparse), 24비트 마스크 합성, 연속 슬롯 시프트 검증 |
| 문의·예약 | 상태 단일화로 슬롯 잠금, append-only 이력, 시점 스냅샷 보존 |
| 대학교 자동완성 | Redis Sorted Set ZRANGEBYLEX, 한글 초성 매칭 |
| 작품 탐색 | QueryDSL 동적 필터, 커서 페이지네이션, 첫 화면 캐시 + 이벤트 무효화 |
| 조회수 어뷰징 방지 | Redis SETNX+TTL 중복 제거, 증분 누적 후 주기 flush |
| 소셜 로그인 | OAuth2 구글·애플 (네이티브/웹), JWT, HttpOnly 쿠키 |
| 실시간 채팅 | WebSocket·STOMP, 구독 시점 인가, 읽음 상태 브로드캐스트 |
| 푸시 알림 | FCM HTTP v1 직접 호출, iOS·Android 단일 요청 분기 |
| 이미지 업로드 | S3 Presigned URL 클라이언트 직접 업로드, CloudFront |
| 애플 토큰 revoke | .p8 client_secret 생성, 앱 심사 대응 |
| 안내 메일 | AWS SES SMTP, 온보딩 완료 이벤트 |
| 설계 기록 | ADR 25편, Swagger 공통 에러 자동 문서화 |
| 구분 | 기술 | 비고 |
|---|---|---|
| Language | Java 21 (LTS) | |
| Framework | Spring Boot 4.1, Spring Web MVC | |
| Build | Gradle | |
| ORM | Spring Data JPA (Hibernate), QueryDSL 5.0 | 동적 필터 + 커서 기반 무한스크롤 |
| Database | MySQL 8.4 | |
| Cache / Store | Redis 7.2 (Spring Data Redis) | 리프레시 토큰 세션 · 작품 탐색 페이지 캐시 · 대학교 검색 자동완성 인덱스 |
| Security | Spring Security, OAuth 2.0 (Google · Apple), JWT | 뷰어/고객/작가 역할 기반 인가 |
| Realtime | WebSocket + STOMP | 실시간 채팅, 메시지·읽음 실시간 브로드캐스트 |
| Push | Firebase Cloud Messaging (HTTP v1) | iOS · Android, Admin SDK 없이 직접 호출 |
| API Docs | springdoc-openapi (Swagger UI) | 공통 에러 응답 자동 문서화 |
| Spring Boot Starter Mail, AWS SES (SMTP) |
안내 메일 전송 |
| 서비스 | 용도 |
|---|---|
| AWS EC2 | 애플리케이션 서버 (t4g, ARM64 Graviton) |
| AWS S3 | 이미지·파일 저장 (Presigned URL로 클라이언트 직접 업로드) |
| AWS CloudFront | 정적 파일 CDN 배포 |
| AWS Route 53 | 도메인 · DNS |
| AWS SES | 메일 발송 |
| Firebase Cloud Messaging | 푸시 알림 (iOS · Android, HTTP v1 API) |
| 구분 | 기술 | 비고 |
|---|---|---|
| Container | Docker, Docker Compose | |
| CI/CD | GitHub Actions (self-hosted runner) | 운영 / 개발 환경 분리 |
| Web Server | Nginx | 리버스 프록시 |
| SSL | Certbot (Let's Encrypt) | 인증서 자동 갱신 |
| 구분 | 기술 | 비고 |
|---|---|---|
| IDE | IntelliJ IDEA | 백엔드 개발 환경 |
| DB GUI | DataGrip | MySQL 스키마·쿼리 확인용 |
| Cache GUI | RedisInsight | Redis 키·TTL·자료구조 확인용 (세션·캐시·자동완성 인덱스) |
| API Client | Postman | API 호출·테스트 (Swagger로 어려운 경우들에서) |
도메인 주도 패키지 구조 — ERD 색상의 핵심 도메인 8개를 기준으로 스프링 부트 패키지를 구성
kr.co.dearbloom
├── DearbloomServerApplication.java
│
├── domain/
│ ├── artist/
│ ├── artwork/
│ ├── auth/
│ ├── board/
│ ├── chat/
│ ├── customer/
│ ├── inquiry/
│ ├── member/
│ ├── notification/
│ ├── report/
│ ├── review/
│ └── university/
│
└── global/
├── auth/
├── config/
├── dev/
├── dto/
├── entity/
├── file/
├── health/
├── properties/
├── push/
├── swagger/
├── util/
└── validation/
| 환경 | Swagger |
|---|---|
| 운영 | https://api.dearbloom.co.kr/swagger-ui/index.html |
| 개발 | https://dev-api.dearbloom.co.kr/swagger-ui/index.html |