Skip to content

Latest commit

ย 

History

History
96 lines (74 loc) ยท 6 KB

AGENTS.md

File metadata and controls

96 lines (74 loc) ยท 6 KB

AGENTS.md

๋ ˆ์ผ๋กœ(Raillo)๋Š” KTX ์Šน์ฐจ๊ถŒ ์˜ˆ๋งค ์„œ๋น„์Šค์˜ ๋ฐฑ์—”๋“œ๋‹ค. ์ด ํŒŒ์ผ์€ AI๊ฐ€ ์ €์žฅ์†Œ์—์„œ ์ž‘์—…ํ•  ๋•Œ ์ฒ˜์Œ ์ฝ๋Š” ์ง€๋„๋‹ค. CLAUDE.md๋Š” ์ด ํŒŒ์ผ์˜ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋‹ค.

๋ฌธ์„œ ์ง€๋„

์ž‘์—…ํ•  ๋„๋ฉ”์ธ์˜ ๋ฌธ์„œ๋ฅผ ๋จผ์ € ์ฝ๋Š”๋‹ค. ๋ฌธ์„œ๋Š” ๋„๋ฉ”์ธ ์„ค๋ช…, ์šฉ์–ด, ๋ชจ๋ธ(์†์„ฑ, ํ–‰์œ„, ๊ทœ์น™), ์„ค๊ณ„ ๊ฒฐ์ •์œผ๋กœ ๋˜์–ด ์žˆ๋‹ค.

๋ฌธ์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ
docs/train ์—ด์ฐจ, ๊ฐ์ฐจ, ์ขŒ์„, ์šดํ–‰, ์ •์ฐจ์—ญ, ์šด์ž„, ๊ฒ€์ƒ‰, ์—ด์ฐจ ์บ์‹œ
docs/reservation ์˜ˆ์•ฝ(Redis), ์ขŒ์„ ์ ์œ , Lua ์Šคํฌ๋ฆฝํŠธ, ์˜ˆ๋งค, ์Šน์ฐจ๊ถŒ
docs/order ์ฃผ๋ฌธ, ์˜ˆ์•ฝ ์Šค๋ƒ…์ƒท
docs/payment ๊ฒฐ์ œ ์ค€๋น„์™€ ์Šน์ธ, ๊ฒฐ์ œ ์‹œ๋„, Toss ์—ฐ๋™
docs/batch raillo-batch Job
docs/worker ๊ฒฐ์ œ Outbox Worker, ์Šค์ผ€์ค„๋Ÿฌ
docs/infra ๋นŒ๋“œ, ๋ฐฐํฌ, OKE ํด๋Ÿฌ์Šคํ„ฐ, ์ ‘์†, ์—์ด์ „ํŠธ ์ ‘๊ทผ ์ œํ•œ, ๋ฏผ๊ฐํ•œ ๊ฐ’ ์Šค์บ”, ๋ชจ๋‹ˆํ„ฐ๋ง

์ฝ”๋“œ ๊ทœ์น™์€ .agents/rules/์— ์žˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์“ฐ๊ธฐ ์ „์— ์ฝ๋Š”๋‹ค.

๊ทœ์น™ ๋‹ค๋ฃจ๋Š” ๊ฒƒ
code-convention.md ๋ ˆ์ด์–ด, ์˜ˆ์™ธ, ์—๋Ÿฌ ์ฝ”๋“œ, ๋„ค์ด๋ฐ, ์ฃผ์„, ํŠธ๋žœ์žญ์…˜, Redis
test.md ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ, ๊ธˆ์ง€ ์‚ฌํ•ญ, ์ž‘์„ฑ ์ปจ๋ฒค์…˜, ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ
docs.md ๋ฌธ์„œ ์œ„์น˜, ์–ธ์ œ ๊ณ ์น˜๋Š”๊ฐ€, ์–ด๋–ป๊ฒŒ ์“ฐ๋Š”๊ฐ€

๊ธฐ์ˆ  ์Šคํƒ

  • Java 25, Spring Boot 4.1, Gradle ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ
  • Spring Data JPA, QueryDSL 5, Spring Security, Spring Batch
  • MySQL 8.4, Valkey 9 (Redis ํ˜ธํ™˜, Hash field ๋งŒ๋ฃŒ ์‚ฌ์šฉ)
  • ๊ฒฐ์ œ: ํ† ์ŠคํŽ˜์ด๋จผ์ธ 
  • ํ…Œ์ŠคํŠธ: JUnit 5, AssertJ, Testcontainers, ArchUnit
  • ์šด์˜: Oracle Cloud OKE (Kubernetes), GHCR, GitHub Actions

๋ชจ๋“ˆ

raillo-domain   Entity, VO, Enum, ๋„๋ฉ”์ธ ๊ทœ์น™, Redis ํ‚ค ๊ณ„์•ฝ. ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
raillo-api      REST API ์•ฑ
raillo-batch    Spring Batch ์•ฑ. Job ํ•˜๋‚˜๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋๋‚œ๋‹ค

์˜์กด ๋ฐฉํ–ฅ์€ raillo-domain โ† raillo-api / raillo-batch๋‹ค. raillo-api์™€ raillo-batch๋Š” ์„œ๋กœ ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋„๋ฉ”์ธ์€ auth, member, train, booking(์˜ˆ์•ฝ, ์˜ˆ๋งค), order, payment๋‹ค. ํŒจํ‚ค์ง€๋Š” ๋„๋ฉ”์ธ ์•„๋ž˜์— ๋ ˆ์ด์–ด๋ฅผ ๋‘”๋‹ค.

raillo-domain/.../{domain}/   domain/  cache/  exception/  util/
raillo-api/.../{domain}/      presentation/  application/{service,facade,validator,dto,...}/  infrastructure/
raillo-api/.../payment/       ํ—ฅ์‚ฌ๊ณ ๋‚ : adapter/{webapi,persistence,integration,scheduling}/  application/{provided,required}/
raillo-batch/.../{domain}/    job/  application/  infrastructure/  config/

๋นŒ๋“œ์™€ ํ…Œ์ŠคํŠธ

./gradlew build                                   # ์ „์ฒด ๋นŒ๋“œ์™€ ํ…Œ์ŠคํŠธ
./gradlew :raillo-api:test --tests "{FQCN}"      # ํ…Œ์ŠคํŠธ ํ•˜๋‚˜
./gradlew :raillo-api:bootRun                     # API ์‹คํ–‰. .env์˜ DB๋ฅผ ์“ฐ๊ณ  Valkey๋Š” compose๋กœ ๋œฌ๋‹ค
./gradlew :raillo-batch:bootRun -Pjob={Job ์ด๋ฆ„}   # Batch Job ์‹คํ–‰

ํ…Œ์ŠคํŠธ๋Š” Docker๊ฐ€ ํ•„์š”ํ•˜๋‹ค. Docker๋ฅผ ์“ธ ์ˆ˜ ์—†์œผ๋ฉด ์ปดํŒŒ์ผ๊นŒ์ง€๋งŒ ํ™•์ธํ•˜๊ณ  ๊ทธ ์‚ฌ์‹ค์„ ์•Œ๋ฆฐ๋‹ค.

์ž‘์—… ํ๋ฆ„

์Šคํ‚ฌ์€ .agents/skills/์— ์žˆ๋‹ค.

/issue โ†’ /branch โ†’ /implement [ ๊ตฌํ˜„ โ†’ /test โ†’ /commit ] ร— n โ†’ /review โ†’ /docs โ†’ /tidy-commits โ†’ /pr
์Šคํ‚ฌ ํ•˜๋Š” ์ผ
/issue ํŒ€ ํ˜•์‹์œผ๋กœ ์ด์Šˆ๋ฅผ ์“ฐ๊ณ  ์Šน์ธ ํ›„ ๋งŒ๋“ ๋‹ค
/branch {label}/{์ด์Šˆ๋ฒˆํ˜ธ}-{์„ค๋ช…} ๋ธŒ๋žœ์น˜๋ฅผ ์›๊ฒฉ ์ตœ์‹  ๊ธฐ์ค€์œผ๋กœ ํŒ๋‹ค
/implement ์ด์Šˆ๋ฅผ ์ปค๋ฐ‹ ๋‹จ์œ„ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ  ๋‹จ๊ณ„๋งˆ๋‹ค ๊ฒ€ํ† ๋ฅผ ๋ฐ›๊ณ  ์ปค๋ฐ‹ํ•œ๋‹ค
/test ๊ทœ์น™์— ๋งž๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์“ฐ๊ณ  ์‹คํ–‰ํ•œ๋‹ค
/commit type: ์„ค๋ช… (#N) ํ˜•์‹์œผ๋กœ ์ปค๋ฐ‹ํ•œ๋‹ค
/review ๋Œ€ํ™” ๋งฅ๋ฝ์ด ์—†๋Š” ์„œ๋ธŒ์—์ด์ „ํŠธ๊ฐ€ ๋ณ€๊ฒฝ์„ ๋ฆฌ๋ทฐํ•œ๋‹ค. --deep์ด๋ฉด ๊ด€์ ๋ณ„๋กœ ๋‚˜๋ˆˆ๋‹ค
/docs ๊ธธ์–ด์ง„ ๋ฌธ์„œ์—์„œ ์„ธ์…˜ ๋งฅ๋ฝ, ์ค‘๋ณต์„ ๊ฑท์–ด๋‚ธ๋‹ค
/tidy-commits PR ์ „์— ์ˆ˜์ • ์ปค๋ฐ‹์„ ํ•ฉ์น˜๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ์ •๋ฆฌํ•œ๋‹ค. ์ฝ”๋“œ๋Š” ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค
/pr ์ด์Šˆ ๊ธฐ์ค€์œผ๋กœ PR์„ ์“ฐ๊ณ  ์Šน์ธ ํ›„ ๋งŒ๋“ ๋‹ค
/db-reset .env์˜ DB์—์„œ ์—ด์ฐจ, ํšŒ์› ๋ฐ์ดํ„ฐ๋งŒ ๋‚จ๊ธฐ๊ณ  ํ…Œ์ด๋ธ”์„ ์ง€์šด๋‹ค

์ง€์ผœ์•ผ ํ•  ๊ฒƒ

  • ์ด์Šˆ, PR ์ƒ์„ฑ์ฒ˜๋Ÿผ ํŒ€์— ๋ณด์ด๋Š” ์ผ๊ณผ push๋Š” ์‚ฌ์šฉ์ž ์Šน์ธ์„ ๋ฐ›๊ณ  ํ•œ๋‹ค.
  • ์ž‘์—…์„ ๋งˆ์น˜๋ฉด(๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹ ํ›„, /review ์ „) bash .claude/hooks/run-tests.sh๋กœ ์ „์ฒด ๋นŒ๋“œ์™€ ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ฆฐ๋‹ค. ์ผ๋ถ€ ํ…Œ์ŠคํŠธ๋งŒ ๋Œ๋ฆฌ๊ณ  ๋๋‚ด์ง€ ์•Š๋Š”๋‹ค. ํ†ต๊ณผ ๊ธฐ๋ก์ด ์—†๋Š” ์ปค๋ฐ‹์€ require-tests.sh ํ›…์ด push์™€ PR ์ƒ์„ฑ์„ ๋ง‰๋Š”๋‹ค.
  • develop, main์—์„œ ์ปค๋ฐ‹ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • develop์— ๋จธ์ง€๋˜๋ฉด ์Šน์ธ ์—†์ด ์šด์˜์— ๋ฐฐํฌ๋œ๋‹ค. ์šด์˜ DB๋Š” ddl-auto: validate๋ผ ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ์€ ๋ฐฐํฌ ์ „์— DB์— ๋ฐ˜์˜ํ•ด์•ผ ํ•œ๋‹ค.
  • ์šด์˜ ํด๋Ÿฌ์Šคํ„ฐ์™€ DB๋Š” ์กฐํšŒ๋งŒ ํ•œ๋‹ค. kubectl์€ get, describe, logs ๊ฐ™์€ ์กฐํšŒ ๋ช…๋ น๋งŒ ์“ฐ๊ณ , DB๋Š” qa/db-scripts/readonly-query.sh๋กœ ์กฐํšŒํ•œ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ๋ณ€๊ฒฝ, DB ์“ฐ๊ธฐ, ํ„ฐ๋„ ์—ด๊ธฐ๊ฐ€ ํ•„์š”ํ•˜๋ฉด ๋ช…๋ น์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ์‹œํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์‹คํ–‰ํ•œ๋‹ค. ์˜ˆ์™ธ๋Š” ์‚ฌ์šฉ์ž ์Šน์ธ ํ›„ .env์˜ DB์— ์‹คํ–‰ํ•˜๋Š” /db-reset์ด๋‹ค. Claude Code์—์„œ๋Š” ๊ฐ€๋“œ ํ›…์ด ๊ฐ•์ œํ•œ๋‹ค. โ†’ ์—์ด์ „ํŠธ ์ ‘๊ทผ ์ œํ•œ
  • .env๋Š” ์ฝ๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋‚ด์šฉ ๊ฒ€์ƒ‰์€ .gitignore๋ฅผ ๋”ฐ๋ฅด๋Š” git grep์ด๋‚˜ rg๋กœ ํ•œ๋‹ค. ํ›…์— ๋ง‰ํžˆ๋ฉด ์šฐํšŒํ•˜์ง€ ๋ง๊ณ  ์ด์œ ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด๊ณ ํ•œ๋‹ค.
  • ๋ฏผ๊ฐํ•œ ๊ฐ’ pre-commit ํ›…์€ ์‚ฌ๋žŒ์ด ํด๋ก ๋งˆ๋‹ค ํ•œ ๋ฒˆ ์ผ ๋‹ค(brew install gitleaks && git config core.hooksPath .githooks). ํ›…์— ๋ง‰ํžˆ๋ฉด File๊ณผ Line์„ ๋ณด๊ณ ํ•˜๊ณ  ํ—ˆ์šฉ ๋ชฉ๋ก์„ ์Šค์Šค๋กœ ๋„“ํžˆ์ง€ ์•Š๋Š”๋‹ค. โ†’ ๋ฏผ๊ฐํ•œ ๊ฐ’ ์Šค์บ”
  • ์ฝ”๋“œ์˜ ๊ณ„์•ฝ(API, ์ƒํƒœ ์ „์ด, ์ €์žฅ ํ˜•์‹, Redis ํ‚ค)์„ ๋ฐ”๊พธ๋ฉด ๊ฐ™์€ PR์—์„œ ํ•ด๋‹น ๋„๋ฉ”์ธ ๋ฌธ์„œ๋ฅผ ๊ณ ์นœ๋‹ค.