- โก ํ๋ก์ ํธ ํต์ฌ ๊ฐ์น
- ๐ฏ ํ๋ก์ ํธ ๊ฐ์
- ๐๏ธ ์์คํ ์ํคํ ์ฒ
- ๐ฆ ๋ชจ๋ ๊ตฌ์กฐ ๋ฐ ์ค๋ช
- ๐ก ํต์ฌ ๊ธฐ๋ฅ
- ๐ ๏ธ ๊ธฐ์ ์คํ
- ๐ ์์ํ๊ธฐ
- ๐ ๊ฐ๋ฐ ๊ฐ์ด๋
- ๐ API ๋ฌธ์
|
DDD + ํฅ์ฌ๊ณ ๋ ์ํคํ
์ฒ๋ก |
๋ฉํฐ๋ชจ๋ ๊ตฌ์กฐ๋ก |
WebSocket + RabbitMQ๋ก |
Vertex AI ๊ธฐ๋ฐ |
RomRom-BE๋ ํ๋์ ์ธ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์ฐจ์ธ๋ ๋ฐฑ์๋ ํ๋ซํผ์ ๋๋ค. ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ(DDD)์ ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์ด ๋์ ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ์ ๊ณตํฉ๋๋ค.
- โ ๋ชจ๋ํ ์ค๊ณ: 11๊ฐ์ ๋ ๋ฆฝ์ ์ธ ๋๋ฉ์ธ ๋ชจ๋๋ก ๊ตฌ์ฑ
- โ ์ค์๊ฐ ํต์ : WebSocket + RabbitMQ ๊ธฐ๋ฐ ์ฑํ ์์คํ
- โ AI ๊ธฐ๋ฐ ์ถ์ฒ: Vertex AI๋ฅผ ํ์ฉํ ๋ฒกํฐ ์๋ฒ ๋ฉ ์ถ์ฒ
- โ ๋ค์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค: PostgreSQL + MongoDB + Redis ํตํฉ
- โ ์๋ฒฝํ ๋ณด์: JWT + Spring Security ๊ธฐ๋ฐ ์ธ์ฆ/์ธ๊ฐ
graph TB
subgraph "Client Layer"
WEB[Web Client]
MOB[Mobile Client]
end
subgraph "API Gateway"
GW[Spring Cloud Gateway]
end
subgraph "Application Layer"
WEB_MODULE[RomRom-Web<br/>REST APIs]
APP[RomRom-Application<br/>Use Cases]
end
subgraph "Domain Layer"
AUTH[Auth Domain]
MEMBER[Member Domain]
ITEM[Item Domain]
CHAT[Chat Domain]
AI[AI Domain]
NOTIF[Notification Domain]
end
subgraph "Infrastructure"
PG[(PostgreSQL)]
MG[(MongoDB)]
RD[(Redis)]
RMQ[RabbitMQ]
end
WEB --> GW
MOB --> GW
GW --> WEB_MODULE
WEB_MODULE --> APP
APP --> AUTH & MEMBER & ITEM & CHAT & AI & NOTIF
AUTH & MEMBER & ITEM --> PG
CHAT --> MG
NOTIF --> RD
CHAT --> RMQ
| ๋ชจ๋๋ช | ํ์ | ์ฃผ์ ๊ธฐ๋ฅ | ํต์ฌ ๊ธฐ์ | ์์กด ๋ชจ๋ |
|---|---|---|---|---|
| RomRom-Common | ๐ง Core | ๊ณตํต ์ ํธ๋ฆฌํฐ, ์์ธ ์ฒ๋ฆฌ | Spring Boot, Swagger, QueryDSL | - |
| RomRom-Domain-Member | ๐ฅ Domain | ํ์ ๊ด๋ฆฌ, ์์น ์๋น์ค | JPA, PostGIS | Common |
| RomRom-Domain-Auth | ๐ Domain | JWT ์ธ์ฆ, ๋ณด์ | Spring Security, JWT | Common, Member |
| RomRom-Domain-Item | ๐ฆ Domain | ์ํ, ๊ฑฐ๋, ์ข์์ | JPA, Hibernate | Common, Member |
| RomRom-Domain-Chat | ๐ฌ Domain | ์ค์๊ฐ ์ฑํ | WebSocket, RabbitMQ, MongoDB | Common, Auth, Item |
| RomRom-Domain-AI | ๐ค Domain | AI ์ถ์ฒ, ์๋ฒ ๋ฉ | Vertex AI, PG Vector | Common, Item |
| RomRom-Domain-Notification | ๐ Domain | ํธ์ ์๋ฆผ | FCM, Redis | Common, Member |
| RomRom-Domain-Storage | ๐พ Domain | ํ์ผ ๊ด๋ฆฌ | FTP, SMB, S3 | Common |
| RomRom-Domain-Report | ๐จ Domain | ์ ๊ณ ๊ด๋ฆฌ | JPA | Common, Member, Item |
| RomRom-Application | โ๏ธ App | ์ ์ค์ผ์ด์ค ์กฐ์ | Spring | All Domains |
| RomRom-Web | ๐ Web | REST API | Spring MVC, WebSocket | Application |
- ์ฑ ์: ๋ชจ๋ ๋ชจ๋์์ ์ฌ์ฉํ๋ ๊ณตํต ๊ธฐ๋ฅ ์ ๊ณต
- ์ฃผ์ ์ปดํฌ๋ํธ:
BaseEntity,BaseTimeEntity- JPA ์ํฐํฐ ๋ฒ ์ด์คGlobalExceptionHandler- ํตํฉ ์์ธ ์ฒ๋ฆฌSwaggerConfig- API ๋ฌธ์ํ ์ค์ FileService- FTP/SMB/S3 ํ์ผ ์ฒ๋ฆฌSuh Librariesํตํฉ - ๋ก๊น , ๋๋ค ์์ง, API ๋ก๊ทธ
- ์ฑ ์: ์ค์๊ฐ ๋ฉ์์ง ๋ฐ ์ฑํ ๋ฐฉ ๊ด๋ฆฌ
- ์ฃผ์ ๊ธฐ๋ฅ:
- WebSocket ๊ธฐ๋ฐ ์ค์๊ฐ ํต์
- RabbitMQ๋ฅผ ํตํ ๋ฉ์์ง ๋ธ๋ก์ปค๋ง
- MongoDB ๊ธฐ๋ฐ ๋ฉ์์ง ์ ์ฅ
- STOMP ํ๋กํ ์ฝ ์ง์
- ํต์ฌ ์ปดํฌ๋ํธ:
ChatRoom- ์ฑํ ๋ฐฉ ์ํฐํฐ (PostgreSQL)ChatMessage- ๋ฉ์์ง ์ํฐํฐ (MongoDB)WebSocketConfig- WebSocket ์ค์ RabbitMqConfig- ๋ฉ์์ง ํ ์ค์
| ๊ธฐ๋ฅ | ์ค๋ช |
|---|---|
| ๐ค AI ๊ธฐ๋ฐ ์ํ ์ถ์ฒ | Vertex AI๋ฅผ ํ์ฉํ ๋ฒกํฐ ์๋ฒ ๋ฉ์ผ๋ก ์ฌ์ฉ์ ๋ง์ถคํ ์ํ ์ถ์ฒ |
| ๐ฌ ์ค์๊ฐ ์ฑํ | WebSocket + RabbitMQ ๊ธฐ๋ฐ์ ํ์ฅ ๊ฐ๋ฅํ ์ค์๊ฐ ๋ฉ์์ง ์์คํ |
| ๐ ์์น ๊ธฐ๋ฐ ์๋น์ค | PostGIS๋ฅผ ํ์ฉํ ์ง๋ฆฌ ๊ณต๊ฐ ๊ฒ์ ๋ฐ ๊ฑฐ๋ฆฌ ๊ณ์ฐ |
| ๐ ํธ์ ์๋ฆผ | Firebase Cloud Messaging์ ํตํ ์ค์๊ฐ ์๋ฆผ ์ ์ก |
| ๐ ๋ณด์ ์ธ์ฆ | JWT ํ ํฐ ๊ธฐ๋ฐ์ Stateless ์ธ์ฆ ์์คํ |
| ๐ ๊ฑฐ๋ ๊ด๋ฆฌ | ์ํ ๋ฑ๋ก, ๊ฑฐ๋ ์์ฒญ, ์ํ ์ถ์ ๋ฑ ์๋ฒฝํ ๊ฑฐ๋ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ |
| ์นดํ ๊ณ ๋ฆฌ | ๊ธฐ์ | ์ฉ๋ ๋ฐ ํน์ง |
|---|---|---|
| ๐จ ํ๋ ์์ํฌ | Spring Boot 3.4.x | ๋ง์ดํฌ๋ก์๋น์ค ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ |
| Spring Security | ์ํฐํ๋ผ์ด์ฆ๊ธ ๋ณด์ ๋ฐ ์ธ์ฆ/์ธ๊ฐ | |
| Spring Data JPA | ORM ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต | |
| Spring WebSocket | ์ค์๊ฐ ์๋ฐฉํฅ ํต์ | |
| ๐พ ๋ฐ์ดํฐ๋ฒ ์ด์ค | PostgreSQL + PostGIS | ๊ด๊ณํ ๋ฐ์ดํฐ + ์ง๋ฆฌ๊ณต๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ |
| MongoDB | ๋น์ ํ ๋ฐ์ดํฐ (์ฑํ ๋ฉ์์ง) ์ ์ฅ | |
| Redis | ์บ์ฑ, ์ธ์ ๊ด๋ฆฌ, ์ค์๊ฐ ๋ฐ์ดํฐ | |
| PG Vector | ๋ฒกํฐ ์๋ฒ ๋ฉ ์ ์ฅ ๋ฐ ์ ์ฌ๋ ๊ฒ์ | |
| ๐ ๋ฉ์์ง | RabbitMQ | ๋ฉ์์ง ๋ธ๋ก์ปค, ์ด๋ฒคํธ ์คํธ๋ฆฌ๋ฐ |
| STOMP | WebSocket ๋ฉ์์ง ํ๋กํ ์ฝ | |
| FCM | ๋ชจ๋ฐ์ผ ํธ์ ์๋ฆผ | |
| ๐ค AI/ML | Google Vertex AI | ํ ์คํธ ์๋ฒ ๋ฉ, AI ๋ชจ๋ธ ์๋น |
| Hibernate Vector | ๋ฒกํฐ ๋ฐ์ดํฐ ORM ๋งคํ | |
| ์๋ฒ ๋ฉ ์๋น์ค | ์ ์ฌ๋ ๊ณ์ฐ ๋ฐ ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ | |
| ๐ง ๊ฐ๋ฐ๋๊ตฌ | Gradle 8.x | ๋ฉํฐ๋ชจ๋ ๋น๋ ๊ด๋ฆฌ |
| Swagger/OpenAPI | API ๋ฌธ์ ์๋ ์์ฑ | |
| Flyway | ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ |
- Java 17+
- Gradle 8.x
- Docker & Docker Compose
- PostgreSQL 14+
- MongoDB 6+
- Redis 7+
- RabbitMQ 3.12+
# 1. ์ ์ฅ์ ํด๋ก
git clone https://github.com/TEAM-ROMROM/RomRom-BE.git
cd RomRom-BE
# 2. ํ๊ฒฝ๋ณ์ ์ค์
cp .env.example .env
# .env ํ์ผ ์์
# 3. ์ธํ๋ผ ์คํ (Docker Compose)
docker-compose up -d
# 4. ๋น๋
./gradlew clean build
# 5. ์ ํ๋ฆฌ์ผ์ด์
์คํ
./gradlew bootRun- ๐ Flyway Migration ๊ฐ์ด๋ - ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ๊ด๋ฆฌ
- ๐ ๋ชจ๋ ๊ฐ๋ฐ ๊ฐ์ด๋ - ์ ๋ชจ๋ ์ถ๊ฐ ๋ฐฉ๋ฒ
- ๐ API ์ค๊ณ ๊ฐ์ด๋ - RESTful API ์ค๊ณ ์์น
- ๐ ๋ณด์ ๊ฐ์ด๋ - ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก
- ๋ธ๋์น ์ ๋ต: Git Flow (main, develop, feature/, hotfix/)
- ์ปค๋ฐ ๋ฉ์์ง: Conventional Commits ๊ท์ฝ ์ค์
- ์ฝ๋ ๋ฆฌ๋ทฐ: ๋ชจ๋ PR์ ์ต์ 1๋ช ์ด์์ ๋ฆฌ๋ทฐ ํ์
- ํ ์คํธ: ๋จ์ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 80% ์ด์ ์ ์ง
| ํ๊ฒฝ | URL |
|---|---|
| Production | https://api.romrom.xyz/docs/swagger |
| Test | https://api.test.romrom.xyz/docs/swagger |
| Local | http://localhost:8080/docs/swagger |
| ๋๋ฉ์ธ | ๊ฒฝ๋ก | ์ค๋ช |
|---|---|---|
| Auth | /api/v1/auth/** |
์ธ์ฆ/์ธ๊ฐ ๊ด๋ จ |
| Member | /api/v1/members/** |
ํ์ ๊ด๋ฆฌ |
| Item | /api/v1/items/** |
์ํ ๊ด๋ฆฌ |
| Chat | /api/v1/chat/** |
์ฑํ ๊ด๋ฆฌ |
| WebSocket | /ws |
WebSocket ์ฐ๊ฒฐ |
| Notification | /api/v1/notifications/** |
์๋ฆผ ๊ด๋ฆฌ |
Made with โค๏ธ by TEAM-ROMROM