Skip to content

Latest commit

ย 

History

History
91 lines (81 loc) ยท 4.91 KB

File metadata and controls

91 lines (81 loc) ยท 4.91 KB

MOGAK_Spring Agent Guide

๋ชฉ์ 

  • ์ด ์ €์žฅ์†Œ์—์„œ Codex์™€ ์„œ๋ธŒ์—์ด์ „ํŠธ๊ฐ€ ๋”ฐ๋ผ์•ผ ํ•  ๊ณต๊ฐœ ์šด์˜ ๊ทœ์น™์„ ์ •์˜ํ•œ๋‹ค.
  • ์„œ๋น„์Šค ์ •์ฑ…, ๋น„์ฆˆ๋‹ˆ์Šค ์ •์ฑ…, ์šด์˜ ํŒ๋‹จ ๊ธฐ์ค€์˜ ๋ณธ๋ฌธ์€ ์ €์žฅ์†Œ์— ๋‘์ง€ ์•Š๋Š”๋‹ค.
  • ์ €์žฅ์†Œ ์•ˆ์—๋Š” ๊ตฌํ˜„ ๊ทœ์•ฝ, ์›Œํฌํ”Œ๋กœ, ๊ฒ€์ฆ ์ ˆ์ฐจ, ์—ญํ•  ๋ถ„๋ฆฌ ์›์น™๋งŒ ๋‘”๋‹ค.

์ ์šฉ ๋ฒ”์œ„

  • ์ด ๋ฌธ์„œ๋Š” ์ €์žฅ์†Œ ์ „์ฒด์— ์ ์šฉ๋œ๋‹ค.
  • ํ•˜์œ„์— ๋” ๊ตฌ์ฒด์ ์ธ AGENTS.md๊ฐ€ ์ƒ๊ธฐ๋ฉด ํ•ด๋‹น ๋ฒ”์œ„์—์„œ ์šฐ์„ ํ•œ๋‹ค.
  • ๋น„๊ณต๊ฐœ ์ •์ฑ…์ด ํ•„์š”ํ•œ ์ž‘์—…์€ ๋กœ์ปฌ ๋น„๊ณต๊ฐœ ์ •์ฑ… ๋ฌธ์„œ๋ฅผ consultํ•ด์•ผ ํ•˜๋ฉฐ, ๊ณต๊ฐœ ๋ฌธ์„œ๋งŒ์œผ๋กœ ํŒ๋‹จ์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฉด ์‚ฌ์šฉ์ž ํ™•์ธ์ด ํ•„์š”ํ•˜๋‹ค.

์šฐ์„  ์ฐธ์กฐ ๋ฌธ์„œ

  • ๊ณต๊ฐœ ์šด์˜ ๋ฌธ์„œ ์ธ๋ฑ์Šค: docs/README.md
  • Claude ํ˜ธํ™˜ ์ง„์ž…์ : CLAUDE.md
  • ๊ตฌํ˜„ ๊ทœ์•ฝ ์ •๋ณธ: docs/operations/policies/PROJECT_CONVENTIONS.md
  • ์™ธ๋ถ€ ๋ฆฌ๋ทฐ ๊ทœ์น™: docs/operations/policies/EXTERNAL_REVIEW_WORKFLOW.md
  • ๋„๋ฉ”์ธ ๋ฌธ์„œ ์ง€๋„: docs/operations/policies/DOMAIN_DOCUMENT_REGISTRY.md
  • Codex ์‹คํ–‰ ๋ฌธ์„œ: .codex/rules/*, .codex/subagents/*, .codex/workflows/*, .codex/skills/README.md
  • Claude ์‹คํ–‰ ์ž์‚ฐ: .claude/agents/*

ํ˜„์žฌ ์ƒํƒœ์™€ ๋ชฉํ‘œ ์ƒํƒœ

  • ํ˜„์žฌ ์ƒํƒœ:
    • Java 25
    • Spring Boot 4.0.2
    • Gradle 9.1.0
    • ๋‹จ์ผ ๋ชจ๋“ˆ Gradle ํ”„๋กœ์ ํŠธ
    • JPA ๊ธฐ๋ฐ˜
    • MySQL / H2 ํ”์  ์กด์žฌ
  • ๋ชฉํ‘œ ์ƒํƒœ:
    • Java 25
    • Spring Boot 4.x ์œ ์ง€
    • PostgreSQL
    • Jakarta ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ธฐ์ค€
  • ์ƒˆ ์ฝ”๋“œ์™€ ๋ฆฌํŒฉํ„ฐ๋ง์€ ๋ชฉํ‘œ ์ƒํƒœ ๋ฐฉํ–ฅ์„ ์šฐ์„ ํ•œ๋‹ค.
  • ๋Œ€๊ทœ๋ชจ ์Šคํƒ ์—…๊ทธ๋ ˆ์ด๋“œ๋Š” Spring Boot 2.7.x -> 3.5.x -> 4.x์˜ ๋‹จ๊ณ„ํ˜• ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋กœ ๋ณธ๋‹ค.
  • ํ˜„์žฌ ๊ธฐ์ค€์„ ์€ Java 25 + Spring Boot 4.0.2 + Gradle 9.1.0์ด๋‹ค.
  • Java 25 ๊ธฐ์ค€์„ ์˜ jdeps ์ž”์—ฌ๋Š” ํ—ˆ์šฉ ๋ฆฌ์Šคํฌ๋กœ ๊ธฐ๋กํ•˜๋˜, Spring Boot 4 ๊ธฐ์ค€์œผ๋กœ ์žฌํ‰๊ฐ€ํ•œ๋‹ค.
  • storage ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๋น„ํ™œ์„ฑ ๊ธฐ๋ณธ๊ฐ’(feature.storage.enabled=false)์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ/์‚ญ์ œ ์š”์ฒญ์€ 503 fail-fast ์ •์ฑ…์„ ๋”ฐ๋ฅธ๋‹ค.
  • ๋‹จ, ์ด๋ฒˆ ์ €์žฅ์†Œ ์…‹์—…์€ ์‹ค์ œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.

Java / Spring ํ•ต์‹ฌ ์›์น™

  • ์ƒ์„ฑ์ž ์ฃผ์ž…๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.
  • Controller๋Š” HTTP ์ž…์ถœ๋ ฅ, ์ธ์ฆ ์ปจํ…์ŠคํŠธ, ์‘๋‹ต ์กฐ๋ฆฝ๋งŒ ๋‹ด๋‹นํ•œ๋‹ค.
  • Service๋Š” ์œ ์Šค์ผ€์ด์Šค ์กฐํ•ฉ๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ํ๋ฆ„์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • Repository๋Š” ์กฐํšŒ์™€ ์ €์žฅ๋งŒ ๋‹ด๋‹นํ•˜๊ณ  ์ •์ฑ… ํŒ๋‹จ์„ ๋„ฃ์ง€ ์•Š๋Š”๋‹ค.
  • API ๊ฒฝ๊ณ„์—์„œ๋Š” DTO๋ฅผ ์šฐ์„ ํ•˜์ง€๋งŒ, ์„œ๋น„์Šค ๋‚ด๋ถ€ ๋ฐ˜ํ™˜ ํƒ€์ž…์€ ์œ ์Šค์ผ€์ด์Šค ๋ณต์žก๋„์™€ ๊ฒฝ๊ณ„ ์„ฑ๊ฒฉ์— ๋งž๊ฒŒ ์„ ํƒํ•œ๋‹ค.
  • ํŠธ๋žœ์žญ์…˜ ๊ฒฝ๊ณ„๋Š” ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ ๋ช…์‹œํ•˜๋˜, ์กฐํšŒ๋ผ๊ณ  ํ•ญ์ƒ ํŠธ๋žœ์žญ์…˜์„ ์—ฌ๋Š” ๋ฐฉ์‹์€ ์ง€์–‘ํ•œ๋‹ค.
  • ์„œ๋น„์Šค ๊ฐ„ ์ˆœํ™˜์ฐธ์กฐ์™€ ์—”ํ‹ฐํ‹ฐ ์ง๋ ฌํ™” ์ˆœํ™˜์ฐธ์กฐ๋ฅผ ํ•ญ์ƒ ๊ฒฝ๊ณ„ํ•œ๋‹ค.
  • ๋ชฉ๋ก/์ƒ์„ธ/๋ฐฐ์น˜ ์กฐํšŒ์—์„œ๋Š” N+1 ์œ„ํ—˜์ด ์—†๋Š”์ง€ ์ ๊ฒ€ํ•œ๋‹ค.
  • ์ž‘์€ ๊ตญ์†Œ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋ฉด ์ƒˆ ์ถ”์ƒํ™”๋ณด๋‹ค ๊ตญ์†Œ ์ˆ˜์ •์„ ์šฐ์„ ํ•œ๋‹ค.
  • ํ˜„์žฌ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋ ˆ๊ฑฐ์‹œ ํŒจํ„ด์€ ๊ด€์ฐฐ ๋Œ€์ƒ์ด์ง€ ์‹ ๊ทœ ๊ธฐ์ค€์ด ์•„๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ฒ€์ฆ ๋ช…๋ น

  • ํ˜„์žฌ ๊ธฐ๋ณธ ๊ฒ€์ฆ: sh gradlew test
  • gradlew ์‹คํ–‰ ๋น„ํŠธ๋ฅผ ๋ณต๊ตฌํ•œ ๋’ค์—๋Š” ./gradlew test๋ฅผ ๊ธฐ๋ณธ ๊ฒ€์ฆ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  • ํ™•์žฅ ๊ฒ€์ฆ: sh gradlew clean test
  • Gradle/JDK/์ปดํŒŒ์ผ ํ™˜๊ฒฝ ๋ฌธ์ œ๋กœ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „์— ๋ง‰ํžˆ๋ฉด ๊ทธ ์›์ธ์„ ๊ฒ€์ฆ ๊ฒฐ๊ณผ์— ํ•จ๊ป˜ ๋ณด๊ณ ํ•œ๋‹ค.
  • ๋ฌธ์„œ/์šด์˜์ฒด๊ณ„ ๋ณ€๊ฒฝ์ด๋ผ๋„ ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„์—์„œ ๊ธฐ๋ณธ ๊ฒ€์ฆ์„ ์‹œ๋„ํ•œ๋‹ค.

์ž‘์—… ๋ถ„๋ฅ˜

  • ์ „์ฒด ํ๋ฆ„:
    • ์ƒˆ ๊ธฐ๋Šฅ
    • ๊ตฌ์กฐ ๋ณ€๊ฒฝ
    • ์ธ์ฆ/๋ณด์•ˆ ๋ณ€๊ฒฝ
    • DB ์˜ํ–ฅ ๋ณ€๊ฒฝ
    • ์—ฌ๋Ÿฌ production ํŒŒ์ผ์— ๊ฑธ์นœ ๋น„๊ตญ์†Œ ๋ณ€๊ฒฝ
  • ๋ฒ„๊ทธ ์ˆ˜์ • ํ๋ฆ„:
    • ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋‹จ์ผ ๋ฒ„๊ทธ
    • ๋ฒ”์œ„๊ฐ€ ์ž‘์€ ๋‹จ์ผ ์ฑ…์ž„ ์ˆ˜์ •
  • ๋ฆฌํŒฉํ„ฐ๋ง ํ๋ฆ„:
    • ๊ตฌ์กฐ ์ •๋ฆฌ
    • ์ค‘๋ณต ์ œ๊ฑฐ
    • ํŒจํ‚ค์ง€/ํด๋ž˜์Šค ์ฑ…์ž„ ์ •๋ˆ

์ƒ๋žต ๋ถˆ๊ฐ€ ๋‹จ๊ณ„

  • ๊ตฌํ˜„ ์ „์— ์ตœ์†Œํ•œ ์žฌํ˜„ ์ผ€์ด์Šค ๋˜๋Š” ์‹คํŒจ ํ…Œ์ŠคํŠธ๋ฅผ ์ •์˜ํ•œ๋‹ค.
  • ๊ตฌํ˜„ ํ›„ ๋ฆฌ๋ทฐ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นœ๋‹ค.
  • ์™„๋ฃŒ ์ „์— ๊ฒ€์ฆ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•œ๋‹ค.
  • ๊ณต๊ฐœ ๊ทœ์น™๋งŒ์œผ๋กœ ํŒ๋‹จํ•  ์ˆ˜ ์—†๋Š” ์ •์ฑ…์„ฑ ๋ณ€๊ฒฝ์€ ์‚ฌ์šฉ์ž ํ™•์ธ ์—†์ด๋Š” ์™„๋ฃŒ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

์„œ๋ธŒ์—์ด์ „ํŠธ ์šด์˜

  • ์—ญํ•  ๋ถ„๋ฆฌ ์›์น™๊ณผ primary Codex role ๋งคํ•‘์€ .codex/subagents/README.md๋ฅผ ๋”ฐ๋ฅธ๋‹ค.
  • Claude Code ์‚ฌ์šฉ์ž๋Š” ์‹ค์ œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์„œ๋ธŒ์—์ด์ „ํŠธ๋ฅผ .claude/agents/*์—์„œ ์šฐ์„  ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ณ‘๋ ฌํ™”๋Š” ์ฑ…์ž„ ๋ฒ”์œ„๊ฐ€ ๊ฒน์น˜์ง€ ์•Š์„ ๋•Œ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์—ญํ•  ๋ฌธ์„œ์— ์—†๋Š” ์ž„์˜์˜ ์ „์šฉ ์—ญํ• ์„ ๋งŒ๋“ค๊ธฐ๋ณด๋‹ค ๊ธฐ์กด ์—ญํ•  ๋ฌธ์„œ๋ฅผ ์šฐ์„  ์žฌ์‚ฌ์šฉํ•œ๋‹ค.

๋น„๊ณต๊ฐœ ์ •์ฑ… ๊ฒฝ๊ณ„

  • ์ €์žฅ์†Œ์—๋Š” ๋น„๊ณต๊ฐœ ์ •์ฑ…์˜ ์ œ๋ชฉ, ๋‚ด์šฉ, ์˜ˆ์‹œ ๊ทœ์น™, ํŒ๋‹จ ๊ธฐ์ค€์„ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.
  • ๊ณต๊ฐœ ๋ฌธ์„œ์—๋Š” private-policy: yes/no ์ˆ˜์ค€์˜ consult ํ•„์š” ์—ฌ๋ถ€๋งŒ ๊ธฐ๋กํ•œ๋‹ค.
  • ๋น„๊ณต๊ฐœ ์ •์ฑ…์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ณ  ๊ทธ ์ •์ฑ…์ด ์ž‘์—… ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์œผ๋ฉด ์ž‘์—…์„ ์ค‘๋‹จํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ํ™•์ธํ•œ๋‹ค.