Skip to content

Latest commit

ย 

History

652 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

โœˆ๏ธ TripFit-server

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-Native Backend Engineering

์ด ํ”„๋กœ์ ํŠธ๋Š” AI Coding Agent๊ฐ€ ์‹ค์ œ ๋ฐฑ์—”๋“œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ํ’ˆ์งˆยท์•ˆ์ „์„ฑยทAPI ๊ณ„์•ฝ์„ ๋ณด์žฅํ•˜๋Š” Engineering ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•œ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

์ƒ์„ธํ•œ ํ•˜๋„ค์Šค(Harness) ์‹œ์Šคํ…œ ์ž‘๋™ ์›๋ฆฌ๋Š” docs/harness/README.md ๋ฐ docs/harness/architecture-diagrams.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

1. End-to-End Control Loop

AI์˜ ํŒ๋‹จ๊ณผ ์‹คํ–‰์„ ๋ถ„๋ฆฌํ•˜๊ณ , ์‚ฌ๋žŒ์˜ ์Šน์ธ์ด ํ•„์š”ํ•œ ์˜์—ญ๊ณผ ์‹œ์Šคํ…œ์ด ๊ฐ•์ œํ•ด์•ผ ํ•˜๋Š” ์˜์—ญ์„ ๊ตฌ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

End-to-End Control Loop
  • Probabilistic Layer: AI๊ฐ€ ๊ทœ์น™๊ณผ ์Šคํ‚ฌ์„ ๋ถ„์„ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ œ์•ˆ.
  • Human Decision Layer: ๋ฌธ์„œ์™€ ์ฝ”๋“œ์˜ ๋ถˆ์ผ์น˜ ๋“ฑ ์ค‘์š” ํŒ๋‹จ ์‹œ AI๊ฐ€ ์‚ฌ๋žŒ์—๊ฒŒ ์Šน์ธ์„ ์š”์ฒญ.
  • Deterministic Layer (Local): AI๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๋กœ์ปฌ ํ›…(Hooks)์ด ๊ฐœ์ž…ํ•˜์—ฌ, ํŒŒ๊ดด์ ์ธ ์‰˜ ๋ช…๋ น์–ด ๋ฐ ์Šน์ธ๋˜์ง€ ์•Š์€ ์ž‘์—… ํ™•์ •์„ ์‚ฌ์ „์— ์ฐจ๋‹จ.
  • Mechanical Verification (CI): ์ž‘์„ฑ๋œ ์ฝ”๋“œ๊ฐ€ ๊ธฐ์กด ์‹œ์Šคํ…œ์˜ ๋กœ์ง์ด๋‚˜ API ๊ณ„์•ฝ์„ ๋ง๊ฐ€๋œจ๋ฆฌ์ง€ ์•Š์•˜๋Š”์ง€ JUnit๊ณผ CI ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ๋ณ€๊ฒฝ ํ›„ ๊ฒ€์ฆ.

2. AI-Safe API Contract Validation

AI๊ฐ€ ์ƒ์„ฑํ•œ ์ฝ”๋“œ๋กœ ์ธํ•ด Frontend์™€์˜ API ๊ณ„์•ฝ์ด ๊นจ์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด 3์ค‘์œผ๋กœ ๊ต์ฐจ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

API ๊ณ„์•ฝ ์•ˆ์ „์„ฑ ๊ฒ€์ฆ
  • oasdiff: OpenAPI ์Šคํ‚ค๋งˆ์˜ Breaking Change ๊ฒ€์ฆ.
  • ErrorCode Trailer: ํ•ฉ์˜๋˜์ง€ ์•Š์€ ๋น„์ฆˆ๋‹ˆ์Šค ์˜ˆ์™ธ ์ฝ”๋“œ ๋ณ€๊ฒฝ์„ Git ๋ ˆ๋ฒจ์—์„œ ํ†ต์ œ.
  • @ApiResponse: ์‹ค์ œ API ๋ฐ˜ํ™˜ ํƒ€์ž…๊ณผ ๋ช…์„ธ ๋ถˆ์ผ์น˜ ๊ฒ€์ฆ.

3. Incident-driven Evolution

์ดˆ๊ธฐ์—๋Š” ์„œ๋ธŒ์—์ด์ „ํŠธ์—๊ฒŒ 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 ๊ทœ์•ฝ

About

๐Ÿฅˆ CMC 19th ์ตœ์šฐ์ˆ˜์ƒ ๐Ÿฅˆ ๋ณต์žกํ•œ ์—ฌํ–‰ ๋‚ ์งœ ์กฐ์œจ์„ ์‰ฝ๊ฒŒ! TripFit โœˆ๏ธ

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages