๊ฐ์ ๊ธฐ๋ก, ๋ํ, ๋ฆฌํฌํธ, ํ์์บก์ ๋ฑ ์ฌ์ฉ์ ๊ฐ์ ๊ฒฝํ์ ๋ค๋ฃจ๋ Mooi ๋ฐฑ์๋ ์๋ฒ์ ๋๋ค. Spring Boot ๊ธฐ๋ฐ์ผ๋ก REST API, ์ธ์ฆ, ๋ฐฐ์น์ฑ ์์ , WebSocket ์ฐ๋, ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์ ๊ตฌ์ฑ์ ํฌํจํฉ๋๋ค.
- Java 17
- Spring Boot 3.4
- Spring Web
- Spring Data JPA
- Spring Security / OAuth2
- JWT
- MySQL
- PostgreSQL
- Redis
- Flyway
- Swagger(OpenAPI)
- WebSocket
- Gradle
- ์์ ๋ก๊ทธ์ธ ๋ฐ ์ธ์ฆ ์ฒ๋ฆฌ
- ๊ฐ์ ๋ํ ๋ฐ ๋ถ์
- ์ผ๊ฐ ๋ฆฌํฌํธ ๋ฐ ์บ๋ฆฐ๋ ์กฐํ
- ํ์์บก์ ์์ฑ, ์กฐํ, ์์ , ์ญ์
- ๋ง์ดํ์ด์ง, ์๋ฆผ, ์ถ์ ๊ธฐ๋ฅ
src/main/java/com/example/emotion_storage
โโโ attendance
โโโ calendar
โโโ chat
โโโ global
โโโ home
โโโ mypage
โโโ notification
โโโ report
โโโ timecapsule
โโโ user
global: ๊ณตํต ์๋ต, ์์ธ ์ฒ๋ฆฌ, ๋ณด์, ํํฐ, ์ค์ , ์ ํธ๋ฆฌํฐuser: ๋ก๊ทธ์ธ, ํ์๊ฐ์ , ์ฌ์ฉ์ ์ธ์ฆ/์ธ๊ฐchat: ๊ฐ์ ๋ํ, ๋ถ์, WebSocket ์ฐ๋report: ์ผ๊ฐ ๋ฆฌํฌํธ ๊ด๋ จ ๊ธฐ๋ฅtimecapsule: ํ์์บก์ ๋๋ฉ์ธ ๊ธฐ๋ฅ
- Java 17
- Docker / Docker Compose
.envํ์ผ
๊ธฐ๋ณธ ํ๋กํ์ local์
๋๋ค.
local: MySQL ๊ธฐ๋ฐ ๋ก์ปฌ ์คํpostgres-local: PostgreSQL ๊ธฐ๋ฐ ๋ก์ปฌ ์คํ
๋ก์ปฌ ์คํ ์ ์์ ํ๊ฒฝ ๋ณ์:
MYSQL_ROOT_PASSWORD=
MYSQL_DATABASE=
MYSQL_USER=
MYSQL_PASSWORD=
POSTGRES_DB=
POSTGRES_USER=
POSTGRES_PASSWORD=
REDIS_PORT=6380
JWT_SECRET=
ACCESS_TOKEN_EXPIRATION_MINUTES=
REFRESH_TOKEN_EXPIRATION_DAYS=
GOOGLE_CLIENT_IDS=
AI_WEBSOCKET_URL=ws://localhost:8000/ws/chat
AI_SERVER_BASE_URL=http://localhost:8000
DISCORD_ERROR_WEBHOOK_URL=docker compose -f docker-compose.local.yml up -d- MySQL:
3308 - PostgreSQL:
5433 - Redis:
6380
./gradlew bootRunPostgreSQL ๊ธฐ์ค์ผ๋ก ๋ก์ปฌ ์คํํ๋ ค๋ฉด:
SPRING_PROFILES_ACTIVE=postgres-local ./gradlew bootRun./gradlew test์ ํ๋ฆฌ์ผ์ด์ ์คํ ํ Swagger UI์์ API๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
/swagger-ui/index.html
Flyway๊ฐ ํ์ฑํ๋์ด ์์ผ๋ฉฐ ๋ง์ด๊ทธ๋ ์ด์
ํ์ผ์ src/main/resources/db/migration ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ ํ์ฑ ํ๋กํ์
local์ ๋๋ค. - ํ
์คํธ๋
Asia/Seoulํ์์กด ๊ธฐ์ค์ผ๋ก ์คํ๋ฉ๋๋ค. - AI ์๋ฒ ๋ฐ OAuth ๊ด๋ จ ํ๊ฒฝ ๋ณ์๊ฐ ์์ผ๋ฉด ์ผ๋ถ ๊ธฐ๋ฅ์ ์ ์ ๋์ํ์ง ์์ ์ ์์ต๋๋ค.