TripFit์ ๊ทธ๋ฃน ์ฌํ์์ ์ฐธ์ฌ์๋ค์ ์ผ์ ์ ์กฐ์จํ๊ณ ์ต์ ์ ์ฌํ ๋ ์ง๋ฅผ ์ถ์ฒํ๋ ์๋น์ค์ ๋๋ค.
์ค์ ์๋น์ค ๊ตฌ์ถยท์ด์ ๊ณผ์ ์ AI Coding Agent๋ฅผ ๋์ ํ๊ณ , AI์ ํ๋ฅ ์ ํ๋จ์๋ง ์์กดํ์ง ์๊ณ ํ์ง๊ณผ API ๊ณ์ฝ์ ๋ณด์ฅํ๋ ๊ฒฐ์ ๋ก ์ ๊ฒ์ฆ ์์คํ ์ ๊ตฌ์ถํ์ต๋๋ค.
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ํ๋ก์ ํธ | TripFit |
| ์ญํ | Backend ์ ๋ด (API ์ค๊ณยท๊ฐ๋ฐ, ์ธํ๋ผ ๋ฐฐํฌ, ํ์ดํ๋ผ์ธ ๊ตฌ์ถ) |
| ์ฃผ์ ๊ธฐ๋ฅ | ์ฌํ ์ผ์ ์กฐ์จ ๋ฐ ์ต์ ์ ๋ ์ง ์ถ์ฒ |
| Swagger UI | Swagger ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ |
| OpenAPI ์ค๋ ์ท | docs/api/openapi.json |
| ๋ชจ๋ํฐ๋ง | Grafana ๋์๋ณด๋ |
| ํ๋ก ํธ์๋ (Web) | https://tripfit.online |
| App Store (iOS) | ๏ฃฟ App Store ๋งํฌ |
| Google Play | โถ๏ธ Google Play ๋งํฌ |
- ๊ฐ์ค์น ๊ธฐ๋ฐ ์ถ์ฒ ์์ง โ ๊ฐ์ธ ๊ทผ๋ฌด์ผ์ ยท์ฐ์ฐจ ์กฐ๊ฑด์ ๋ฐ์ํ ํ๋ํฐ ์ค์ฝ์ด๋ง์ผ๋ก 4๊ฐ์ง ๋ชจ๋๋ณ TOP 3 ๋ ์ง ํ๋ณด๋ฅผ ์ฐ์ถํ๋ ๋ก์ง์ ๊ตฌํํ์ต๋๋ค.
- ๊ทธ๋ฃน ์ผ์ ์กฐ์จ โ ์ฐธ์ฌ์๋ณ ์ค์ /์คํ/์ ๋ ์ผ์ ์ ์ข ํฉํ์ฌ ๊ทธ๋ฃน ์ ์ฒด์ ๊ฐ๋ฅํ ์๊ฐ๋๋ฅผ ๊ต์ฐจ ๊ฒ์ฆํ๊ณ ์๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์์ ๋ก๊ทธ์ธ 3์ข ํตํฉ โ ์นด์นด์คยท๊ตฌ๊ธยท์ ํ ๋ก๊ทธ์ธ๊ณผ Provider๋ณ ํ ํฐ ๊ฒ์ฆ ๋ฐฉ์์ ํตํฉํ๊ณ , ํ์ ํํด ์ Revoke ์ ์ฑ ์ ์ผ๊ด๋๊ฒ ์ฒ๋ฆฌํฉ๋๋ค.
- ์๋ฆผ ์ค์ผ์ค๋ฌ โ FCM(Firebase Cloud Messaging) ์ฐ๋ ๋ฐ ๋ฐฐ์น ์ค์ผ์ค๋ฌ๋ฅผ ํตํด ์ผ์ ๋ฆฌ๋ง์ธ๋๋ฅผ ๋ฐ์กํฉ๋๋ค.
- Backend: Java 21 ยท Spring Boot 4.1 ยท Spring Data JPA ยท Gradle
- Database: MySQL 8.0 ยท Flyway ยท Testcontainers
- Infrastructure: Docker ยท GHCR ยท AWS EC2 ยท Nginx
- Testing / Quality: JUnit 5 ยท ArchUnit ยท oasdiff
- Observability: Prometheus ยท Grafana ยท Loki
- AI Engineering: Claude Code ยท Skills ยท Hooks ยท Subagents
ํ๋ก ํธ์๋(Vercel)์ ๋ฐฑ์๋(EC2)๋ก ๋ถ๋ฆฌ๋ ๋ฐฐํฌ ์ํคํ ์ฒ์ ๋๋ค.
com.tripfit.tripfit
โโโ auth/ # ์์
๋ก๊ทธ์ธ 3์ข
ยทJWTยทOAuth
โโโ user/ # ํ๋กํยท์จ๋ณด๋ฉยท๊ฐ์ธ ์ผ์
โโโ trip/ # ์ฌํ๋ฐฉยทmembershipยทrecommendationยทschedule
โโโ notification/ # FCMยท๋ฐฐ์น ์ค์ผ์ค๋ฌ
โโโ common/ # ์๋ต envelopeยท์์ธยท๋ฒ ์ด์ค ์ํฐํฐ
๋๋ฉ์ธ ๋ด๋ถ ๊ตฌ์กฐ ๋ฑ ์์ธํ ๋ด์ฉ์ docs/architecture.md์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
์ด ํ๋ก์ ํธ๋ AI Coding Agent๊ฐ ์ค์ ๋ฐฑ์๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฐ๋ฐ ํ๊ฒฝ์์ ํ์งยท์์ ์ฑยทAPI ๊ณ์ฝ์ ๋ณด์ฅํ๋ Engineering ์์คํ ์ ๊ตฌ์ถํ ์ฌ๋ก์ ๋๋ค.
์์ธํ ํ๋ค์ค(Harness) ์์คํ
์๋ ์๋ฆฌ๋ docs/harness/README.md ๋ฐ docs/harness/architecture-diagrams.md๋ฅผ ์ฐธ๊ณ ํ์ธ์.
AI์ ํ๋จ๊ณผ ์คํ์ ๋ถ๋ฆฌํ๊ณ , ์ฌ๋์ ์น์ธ์ด ํ์ํ ์์ญ๊ณผ ์์คํ ์ด ๊ฐ์ ํด์ผ ํ๋ ์์ญ์ ๊ตฌ๋ถํ์ต๋๋ค.
- Probabilistic Layer: AI๊ฐ ๊ท์น๊ณผ ์คํฌ์ ๋ถ์ํ๊ณ ์ฝ๋๋ฅผ ์ ์.
- Human Decision Layer: ๋ฌธ์์ ์ฝ๋์ ๋ถ์ผ์น ๋ฑ ์ค์ ํ๋จ ์ AI๊ฐ ์ฌ๋์๊ฒ ์น์ธ์ ์์ฒญ.
- Deterministic Layer (Local): AI๊ฐ ์ฝ๋๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ช ๋ น์ ์คํํ๊ธฐ ์ ์ ๋ก์ปฌ ํ (Hooks)์ด ๊ฐ์ ํ์ฌ, ํ๊ดด์ ์ธ ์ ๋ช ๋ น์ด ๋ฐ ์น์ธ๋์ง ์์ ์์ ํ์ ์ ์ฌ์ ์ ์ฐจ๋จ.
- Mechanical Verification (CI): ์์ฑ๋ ์ฝ๋๊ฐ ๊ธฐ์กด ์์คํ ์ ๋ก์ง์ด๋ API ๊ณ์ฝ์ ๋ง๊ฐ๋จ๋ฆฌ์ง ์์๋์ง JUnit๊ณผ CI ํ์ดํ๋ผ์ธ์ ํตํด ๋ณ๊ฒฝ ํ ๊ฒ์ฆ.
AI๊ฐ ์์ฑํ ์ฝ๋๋ก ์ธํด Frontend์์ API ๊ณ์ฝ์ด ๊นจ์ง๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด 3์ค์ผ๋ก ๊ต์ฐจ ๊ฒ์ฆํฉ๋๋ค.
- oasdiff: OpenAPI ์คํค๋ง์ Breaking Change ๊ฒ์ฆ.
- ErrorCode Trailer: ํฉ์๋์ง ์์ ๋น์ฆ๋์ค ์์ธ ์ฝ๋ ๋ณ๊ฒฝ์ Git ๋ ๋ฒจ์์ ํต์ .
- @ApiResponse: ์ค์ API ๋ฐํ ํ์ ๊ณผ ๋ช ์ธ ๋ถ์ผ์น ๊ฒ์ฆ.
์ด๊ธฐ์๋ ์๋ธ์์ด์ ํธ์๊ฒ API Diff ํ๋จ๊น์ง ๋งก๊ฒผ์ผ๋, AI ์คํ์ผ๋ก ์ ์์ ์ธ ์ปค๋ฐ์ด ์ฐจ๋จ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ด๋ฅผ ๊ณ๊ธฐ๋ก "AI๋ ํ๋จ(Advisory)์ ์ฐ๊ณ , ํต์ (Blocking)๋ ๊ฒฐ์ ๋ก ์ ์คํฌ๋ฆฝํธ์ ๋งก๊ธด๋ค"๋ ์์น์ผ๋ก ํ๋ค์ค๋ฅผ ์ฌ์ค๊ณํ์ต๋๋ค.
cp .env.example .env # ์ต์ด 1ํ โ Auth env ๋ฑ ์ค์
docker compose up -d # MySQL ์คํ
./gradlew bootRun # Spring ๋ก์ปฌ ์คํ
./gradlew test # ์ ์ฒด ํ
์คํธ ์คํ๋ฐฐํฌยท๊ฒ์ฆ ์คํฌ๋ฆฝํธ๋ deploy/README.md๋ฅผ ์ฐธ๊ณ ํ์ธ์.
| ๊ฒฝ๋ก | ์ค๋ช |
|---|---|
docs/harness-engineering.md |
AI Harness ์ค๊ณ ๋ฐฐ๊ฒฝ ๋ฐ Incident ๋ถ์ ๋ฆฌํฌํธ |
docs/product/release-milestones.md |
๋ฆด๋ฆฌ์ฆ Milestone ๋ฐ ์ฐ์ ์์ ์ด์ยทํ๋จ SSOT |
docs/specs/ |
์ฃผ์ ๊ธฐ๋ฅ๋ณ ์๊ตฌ์ฌํญ ๋ฐ ์ค๊ณ ์คํ |
docs/decisions/ |
์ธํ๋ผ ๋ฐ ์ํคํ ์ฒ ๊ฒฐ์ ๊ธฐ๋ก (ADR) |
docs/architecture.md |
๋ ์ด์ดยทํจํค์งยท๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ ์์ฝ |
deploy/README.md |
๋ฐฐํฌ ํ์ดํ๋ผ์ธ ๋ฐ ์๋ฒ ๊ตฌ์ฑ ๊ฐ์ด๋ |
.github/CONTRIBUTING.md |
์ปค๋ฐ, ๋ธ๋์น ์ ๋ต ๋ฐ PR ๊ท์ฝ |


