Skip to content

Latest commit

ย 

History

1,410 Commits

Folders and files

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

Repository files navigation

๐Ÿš… Raillo

๐Ÿ™Œ๐Ÿป ๋ฉค๋ฒ„

๊น€๋ฏผ์•„
์‹ ์ง€๋ฏผ
์ด์ฐฌ์›
๊น€๋ฏผ์•„ ์‹ ์ง€๋ฏผ ์ด์ฐฌ์›

๐Ÿ“‹ ๋ชฉ์ฐจ

๐Ÿ“– ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

Raillo๋Š” ์ฝ”๋ ˆ์ผ(KORAIL) ์˜ˆ๋งค ์‹œ์Šคํ…œ์„ ํด๋ก ์ฝ”๋”ฉํ•œ ๊ธฐ์ฐจ ์˜ˆ์•ฝ ํ”Œ๋žซํผ์œผ๋กœ,
์‹ค์ œ ์„œ๋น„์Šค์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ๋“ค์„ ์ตœ๋Œ€ํ•œ ์œ ์‚ฌํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜์—ฌ ํ˜„์—…์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ  ์Šคํƒ๊ณผ ์„ค๊ณ„ ํŒจํ„ด์„ ํ•™์Šตํ•˜๊ณ  ์ ์šฉํ•œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

๐Ÿ“… ์ง„ํ–‰ ๊ธฐ๊ฐ„

  • v1 : 2025. 05. 28. ~ 2025. 08. 08.
  • v2 : 2025. 10. 11. ~ now

๐ŸŽฏ ํ•ต์‹ฌ ๋ชฉํ‘œ

  • ์‹ค์ œ ์„œ๋น„์Šค์™€ ์œ ์‚ฌํ•œ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๊ตฌํ˜„ : ์‹ค์ œ ์ฝ”๋ ˆ์ผ์—์„œ ์ œ๊ณตํ•˜๋Š” ํšŒ์› ์ธ์ฆ ๋ฐ ์ฃผ์š” ์˜ˆ๋งค ํ๋ฆ„์„ ์ตœ๋Œ€ํ•œ ๋น„์Šทํ•˜๊ฒŒ ๊ตฌํ˜„
  • ํ™œ๋ฐœํ•œ ํ˜‘์—…๊ณผ ์—ญํ•  ๋ถ„๋‹ด ๊ฒฝํ—˜ : ํŒ€ ๋‚ด๋ถ€์—์„œ ์—ญํ• ์„ ๋ถ„๋‹ด, ํ˜‘์—…ํˆด์„ ์ด์šฉํ•œ ๋ฒ„์ „๊ด€๋ฆฌ, ์ด์Šˆ ํŠธ๋ž˜ํ‚น, ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋“ฑ ํ˜‘์—… ๋ฐฉ์‹์„ ์ ์šฉ
  • ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ  ์Šคํƒ ํ•™์Šต ๋ฐ ๊ฒฝํ—˜ : ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ  ์Šคํƒ์„ ํ•™์Šต, ๊ฒฝํ—˜ํ•˜๊ณ  ๊ด€๋ จ ํŒจํ„ด์„ ์ ์šฉ

๐Ÿ”ง ๊ธฐ์ˆ  ์Šคํƒ

Backend

backend

  • Language : Java
  • Framework : Spring Boot, Spring Security
  • ORM : Spring Data JPA, QueryDSL
  • DB : MySQL
  • Cache : Redis
  • Authentication : JWT
  • Build Tool : Gradle

Infrastructure & DevOps

infra,devops

  • Cloud Platform : AWS (EKS, RDS, Route53, Load Balancer)
  • Container : Docker, Kubernetes
  • CI/CD : GitHub Actions, ArgoCD (GitOps)
  • Monitoring : Prometheus, Grafana
  • VCS : Git, GitHub

Testing

  • Framework : JUnit, Spring Boot Test
  • Test Environment : Testcontainers (MySQL 8.4.10, Redis 7.4) โ€” ์šด์˜๊ณผ ๋™์ผ ๋ฒ„์ „, Docker ํ•„์š”
  • Test Utils : AssertJ
  • Performance Testing : K6
  • Email Testing : GreenMail

๐Ÿ‘ค ์œ ์ € ํ”Œ๋กœ์šฐ

Raillo-User-Flow

๐Ÿ—๏ธ ์•„ํ‚คํ…์ฒ˜

Raillo-Server-Architecture

๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ (DDD)

src/main/java/com/sudo/raillo/
โ”œโ”€โ”€ auth/       # ์ธ์ฆ
โ”œโ”€โ”€ booking/    # ์˜ˆ์•ฝยท์˜ˆ๋งค
โ”œโ”€โ”€ member/     # ํšŒ์›
โ”œโ”€โ”€ order/      # ์ฃผ๋ฌธ
โ”œโ”€โ”€ payment/    # ๊ฒฐ์ œ
โ”œโ”€โ”€ train/      # ์—ด์ฐจ
โ””โ”€โ”€ global/     # ๊ณตํ†ต ์ธํ”„๋ผ

Layer ์•„ํ‚คํ…์ฒ˜

Controller โ†’ Facade โ†’ Service โ†’ Repository
  • Facade : ๋„๋ฉ”์ธ ๋‹จ์ผ ์ง„์ž…์ ์œผ๋กœ ์—ฌ๋Ÿฌ Service๋ฅผ ์กฐํ•ฉํ•˜๋ฉฐ, Facade โ†’ Facade ํ˜ธ์ถœ์€ ๊ธˆ์ง€
  • Service : ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ํŠธ๋žœ์žญ์…˜ ๊ฒฝ๊ณ„ ๋‹ด๋‹น
  • Validator / Calculator / Generator : ๊ฒ€์ฆ, ๊ณ„์‚ฐ, ์‹๋ณ„์ž ์ƒ์„ฑ ๋“ฑ ์ฑ…์ž„์ด ๋ถ„๋ฆฌ๋œ ๋ณด์กฐ ์ปดํฌ๋„ŒํŠธ

๐Ÿš€ ์ฃผ์š” ํŠน์ง•

๐Ÿ”‘ Auth ๋„๋ฉ”์ธ

  • JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ : Access Token๊ณผ Refresh Token์„ ํ™œ์šฉํ•œ Stateless ์ธ์ฆ ๋ฐ ์ธ๊ฐ€
  • ์ด๋ฉ”์ผ ์ธ์ฆ : Redis๋ฅผ ํ™œ์šฉํ•œ ์ธ์ฆ ์ฝ”๋“œ ๋ฐœ์†ก ๋ฐ ๊ฒ€์ฆ ์‹œ์Šคํ…œ
  • ๋ณด์•ˆ ๊ฐ•ํ™” : ๋กœ๊ทธ์•„์›ƒ๋œ ํ† ํฐ Redis ๊ด€๋ฆฌ, ์ฟ ํ‚ค ๊ธฐ๋ฐ˜ Refresh Token ๊ด€๋ฆฌ

๐Ÿ‘ค Member ๋„๋ฉ”์ธ

  • ๊ณ ์œ  ํšŒ์›๋ฒˆํ˜ธ ์‹œ์Šคํ…œ : Redis ๊ธฐ๋ฐ˜ ์ผ์ผ ์ฆ๋ถ„ ์นด์šดํ„ฐ๋ฅผ ํ™œ์šฉํ•œ ํšŒ์›๋ฒˆํ˜ธ ์ž๋™ ์ƒ์„ฑ (yyyyMMddCCCC ํ˜•์‹)
  • Soft-Delete : ์‹ค์ œ ํšŒ์› ์‚ญ์ œ๊ฐ€ ์•„๋‹Œ ๋น„ํ™œ์„ฑํ™” ์ฒ˜๋ฆฌ
  • ๋งŒ๋ฃŒ ํšŒ์› ์ผ๊ด„ ์‚ญ์ œ : ๋งŒ๋ฃŒ๋œ ํšŒ์› ๋ฐ์ดํ„ฐ ์ •๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ํ™œ์šฉ

๐ŸŽซ Booking ๋„๋ฉ”์ธ

  • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์‹œ์Šคํ…œ: ์˜ˆ์•ฝ ํ›„ ๊ฒฐ์ œ ์ „ ์ž„์‹œ ์ €์žฅ ๋ฐ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ
  • ์ขŒ์„ ์˜ˆ์•ฝ ๊ด€๋ฆฌ: ์Šน๊ฐ ์œ ํ˜•๋ณ„ ์ขŒ์„ ๋ฐฐ์ • ๋ฐ ์˜ˆ์•ฝ ์ƒํƒœ ๊ด€๋ฆฌ
  • ์š”๊ธˆ ๊ณ„์‚ฐ: ๊ฑฐ๋ฆฌ๋ณ„, ์Šน๊ฐ ์œ ํ˜•๋ณ„, ์ฐจ๋Ÿ‰ ๋“ฑ๊ธ‰๋ณ„ ์š”๊ธˆ ์ž๋™ ๊ณ„์‚ฐ
  • Redis Lua ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜ ์ขŒ์„ ์„ ์ : ์ขŒ์„ ๊ตฌ๊ฐ„ ์ถฉ๋Œ ๊ฒ€์‚ฌ์™€ ์ž„์‹œ ์ขŒ์„ ์ ์œ ๋ฅผ Lua ์Šคํฌ๋ฆฝํŠธ๋กœ ์›์ž์  ์ฒ˜๋ฆฌํ•˜์—ฌ ๋™์‹œ ์˜ˆ์•ฝ ๋ฐฉ์ง€
  • ์ขŒ์„ ์ ์œ  ์ธ๋ฑ์Šค ์ตœ์ ํ™”: ์ขŒ์„๋ณ„, ๊ฐ์ฐจ๋ณ„ ๋‹ค์ค‘ ์ธ๋ฑ์Šค ๊ตฌ์กฐ๋กœ ์ขŒ์„ ์กฐํšŒ ์„ฑ๋Šฅ๊ณผ ์ •ํ™•์„ฑ ํ™•๋ณด
  • TTL ๊ธฐ๋ฐ˜ ์ž๋™ ๋งŒ๋ฃŒ: ์ผ์ • ์‹œ๊ฐ„ ๋‚ด ๊ฒฐ์ œํ•˜์ง€ ์•Š์€ ์ž„์‹œ ์˜ˆ์•ฝ๊ณผ ์ขŒ์„ ์ ์œ ๋Š” ์ž๋™์œผ๋กœ ํ•ด์ œ๋˜์–ด ์ขŒ์„์„ ์˜ˆ๋งค ๊ฐ€๋Šฅ ์ƒํƒœ๋กœ ์ „ํ™˜

๐Ÿ“ฆ Order ๋„๋ฉ”์ธ

  • ์ฃผ๋ฌธ ํ†ตํ•ฉ ๊ด€๋ฆฌ: ์˜ˆ์•ฝ๊ณผ ๊ฒฐ์ œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์ฃผ๋ฌธ ๋‹จ์œ„ ๊ด€๋ฆฌ
  • ์ฃผ๋ฌธ ์ƒํƒœ ๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€๋ฆฌ: ๊ฒฐ์ œ ๋Œ€๊ธฐ โ†’ ๊ฒฐ์ œ ์™„๋ฃŒ โ†’ ์ทจ์†Œ๊นŒ์ง€์˜ ์ฃผ๋ฌธ ์ƒํƒœ ํ๋ฆ„์„ ๋„๋ฉ”์ธ ๋‹จ์—์„œ ์ผ๊ด€๋˜๊ฒŒ ๊ด€๋ฆฌ
  • ๊ฒฐ์ œ ํ๋ฆ„ ์ผ๊ด€์„ฑ ๋ณด์žฅ: ์ฃผ๋ฌธ ๋‹จ๊ณ„๋ณ„ ์ƒํƒœ ๊ฒ€์ฆ์œผ๋กœ ์ค‘๋ณต ๊ฒฐ์ œ์™€ ์ž˜๋ชป๋œ ์ƒํƒœ ์ „์ด ์ฐจ๋‹จ

๐Ÿ’ต Payment ๋„๋ฉ”์ธ

  • Toss Payments ๊ธฐ๋ฐ˜ ๊ฒฐ์ œ ์—ฐ๋™: Toss Payments์˜ ๊ฒฐ์ œ UI๋ฅผ ํ†ตํ•ด ๊ฒฐ์ œ ํ”Œ๋กœ์šฐ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์ฒ˜๋ฆฌ
  • ๊ฒฐ์ œ ํ‚ค ์ƒ์„ฑ: ๊ณ ์œ ํ•œ ๊ฒฐ์ œ ์‹๋ณ„์ž ์ž๋™ ์ƒ์„ฑ
  • ๊ธˆ์•ก ๋‹ค์ค‘ ๊ฒ€์ฆ ๋ฐ ์ค‘๋ณต๊ฒฐ์ œ ๋ฐฉ์ง€: ๊ฒฐ์ œ ๋‹จ๊ณ„๋ณ„ ๊ธˆ์•ก์„ ๋น„๊ต ๊ฒ€์ฆํ•˜๊ณ , ์ด๋ฏธ ์ฒ˜๋ฆฌ๋œ ์ฃผ๋ฌธ์— ๋Œ€ํ•œ ์žฌ๊ฒฐ์ œ ์‹œ๋„ ์ฐจ๋‹จ
  • ์ž๋™ ํ‹ฐ์ผ“ ๋ฐœ๊ธ‰: ๊ฒฐ์ œ ์™„๋ฃŒ ์‹œ ํ‹ฐ์ผ“ ์ƒ์„ฑ
  • ์ทจ์†Œ ๋ฐ ํ™˜๋ถˆ: ๊ฒฐ์ œ ์ทจ์†Œ ๋ฐ ํ™˜๋ถˆ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ

๐Ÿš… Train ๋„๋ฉ”์ธ

  • ์‹ค์ œ ๋ฐ์ดํ„ฐ ํ™œ์šฉ: ์ฝ”๋ ˆ์ผ์˜ ์‹ค์ œ ์šด์˜ ์Šค์ผ€์ค„ Excel ํŒŒ์ผ์„ ํŒŒ์‹ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ตฌ์ถ•
  • ์—ด์ฐจ ๊ฒ€์ƒ‰ ์ตœ์ ํ™”: ๋ฐฐ์น˜ ์ฟผ๋ฆฌ๋ฅผ ํ™œ์šฉํ•œ ๋Œ€์šฉ๋Ÿ‰ ์Šค์ผ€์ค„ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ ์ตœ์ ํ™”
  • ์šดํ–‰ ์บ˜๋ฆฐ๋” ์บ์‹ฑ: Redis ์บ์‹œ๋กœ ๋ฐ˜๋ณต ์กฐํšŒ๋˜๋Š” ์šดํ–‰ ์บ˜๋ฆฐ๋” ์‘๋‹ต ์ตœ์ ํ™”
  • ์ขŒ์„ ํ˜„ํ™ฉ ๊ด€๋ฆฌ: ์‹ค์‹œ๊ฐ„ ์ขŒ์„ ์˜ˆ์•ฝ ํ˜„ํ™ฉ ๋ฐ ์—ฌ์œ ์„ ์ •๋ณด ์ œ๊ณต
  • ์—ญ ๊ฐ„ ์š”๊ธˆ ์‹œ์Šคํ…œ: ๊ตฌ๊ฐ„๋ณ„ ์„ธ๋ถ„ํ™”๋œ ์š”๊ธˆ ์ฒด๊ณ„ ๊ตฌํ˜„

๐Ÿ“Š ๋ชจ๋‹ˆํ„ฐ๋ง & ์šด์˜

์ธํ”„๋ผ & ๋ฐฐํฌ

  • GitHub Actions์™€ ArgoCD๋ฅผ ํ™œ์šฉํ•ด GitOps ๊ธฐ๋ฐ˜ CI/CD ํ™˜๊ฒฝ ๊ตฌ์„ฑ
  • Public / Private ์„œ๋ธŒ๋„ท์„ ๋ถ„๋ฆฌํ•˜๊ณ , ALB๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๋‚ด๋ถ€ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๋„๋ก ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ
  • topologySpreadConstraints ๊ธฐ๋ฐ˜ Pod ๋ถ„์‚ฐ ๋ฐฐ์น˜์™€ ๋‹ค์ค‘ Replica ์šด์˜์„ ํ†ตํ•ด ๊ณ ๊ฐ€์šฉ์„ฑ์„ ํ™•๋ณดํ•˜๊ณ , readinessProbe ๊ธฐ๋ฐ˜ Rolling Update๋กœ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ๊ตฌ์„ฑ
  • Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ Redis๋Š” Kubernetes(EKS) ๊ธฐ๋ฐ˜์œผ๋กœ ์šด์˜ํ•˜๊ณ , DB๋Š” AWS ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค(RDS)๋กœ ๊ตฌ์„ฑ

๊ด€์ธก (Observability)

  • Spring Boot Actuator + Micrometer โ†’ Prometheus โ†’ Grafana ๊ธฐ๋ฐ˜ ๋ฉ”ํŠธ๋ฆญ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•
  • NodeยทJVMยทHTTP ์š”์ฒญยท์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฉ”ํŠธ๋ฆญ์„ ์‹ค์‹œ๊ฐ„ ์ˆ˜์ง‘ ๋ฐ ์‹œ๊ฐํ™”
  • ์˜ˆ๋งค, ์ขŒ์„ ์ถฉ๋Œ, ๊ฒฐ์ œ ํ๋ฆ„ ๋“ฑ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ๊ธฐ๋ฐ˜ ์ปค์Šคํ…€ ๋ฉ”ํŠธ๋ฆญ์„ ์„ค๊ณ„ํ•˜๊ณ  Grafana ๋Œ€์‹œ๋ณด๋“œ๋กœ ์‹œ๊ฐํ™”
  • AOP ๊ธฐ๋ฐ˜ ๊ณ„์ธก์„ ์ ์šฉํ•ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜์ • ์—†์ด ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘

๐Ÿงช ํ…Œ์ŠคํŠธ

์ž๋™ํ™” ํ…Œ์ŠคํŠธ ์ „๋žต

  • ๋„๋ฉ”์ธ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ : Entity, VO, Calculator, Validator์˜ ํ•ต์‹ฌ ๊ทœ์น™์„ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ฆ
  • ์„œ๋น„์Šค ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ : @ServiceTest ๊ธฐ๋ฐ˜์œผ๋กœ Testcontainers MySQL/Redis๋ฅผ ์‚ฌ์šฉํ•ด ์šด์˜๊ณผ ๋™์ผํ•œ ์—”์ง„์—์„œ DB/Redis ์—ฐ๋™ ํ๋ฆ„ ๊ฒ€์ฆ
  • ๋™์‹œ์„ฑ ํ…Œ์ŠคํŠธ : ์ขŒ์„ ์„ ์ , ์ค‘๋ณต ์˜ˆ๋งค, ๊ฒฐ์ œ ์Šน์ธ์ฒ˜๋Ÿผ ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ํ๋ฆ„์„ ๋ณ„๋„ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ๊ฒ€์ฆ
  • ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ : Fixture์™€ Test Helper๋ฅผ ๋ถ„๋ฆฌํ•ด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ ์ค€๋น„ ์ฑ…์ž„์„ ๊ตฌ๋ถ„
  • BDD ์Šคํƒ€์ผ : given / when / then ์ฃผ์„๊ณผ ํ•œ๊ตญ์–ด @DisplayName์œผ๋กœ ํ…Œ์ŠคํŠธ ์˜๋„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„

Test Helper ํด๋ž˜์Šค

์„œ๋น„์Šค ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๋ฐ˜๋ณต๋˜๋Š” DB ์ €์žฅ ๋กœ์ง์„ Test Helper๋กœ ๋ถ„๋ฆฌํ•ด ํ…Œ์ŠคํŠธ ๋ณธ๋ฌธ์ด ๊ฒ€์ฆ ์˜๋„์— ์ง‘์ค‘ํ•˜๋„๋ก ๊ตฌ์„ฑํ•œ๋‹ค.

  • Fixture : DB ์ €์žฅ ์—†์ด ์ˆœ์ˆ˜ ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ
  • Test Helper : DB ์ €์žฅ์ด ํ•„์š”ํ•œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ
Helper ์—ญํ• 
TrainTestHelper ํ…Œ์ŠคํŠธ์šฉ ์—ด์ฐจ, ๊ฐ์ฐจ, ์ขŒ์„ ์ƒ์„ฑ ๋ฐ ์˜ˆ์•ฝ ๊ฐ€๋Šฅํ•œ ์ขŒ์„ ์กฐํšŒ
TrainScheduleTestHelper ๊ธฐ๋ณธ/์ปค์Šคํ…€ ์šดํ–‰ ์Šค์ผ€์ค„, ์ •์ฐจ์—ญ, ์—ญ ๊ฐ„ ์š”๊ธˆ ์ƒ์„ฑ
BookingTestHelper ํ™•์ • ์˜ˆ๋งค, ์ขŒ์„ ์˜ˆ๋งค, ํ‹ฐ์ผ“ ๋ฐœ๊ธ‰๊นŒ์ง€ ํฌํ•จํ•œ ์˜ˆ๋งค ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ
OrderTestHelper ์ฃผ๋ฌธ, OrderBooking, OrderSeatBooking ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ

๋กœ์ปฌ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ (compose-test.yaml)

์šด์˜ ํ™˜๊ฒฝ๊ณผ ์œ ์‚ฌํ•œ ์Šคํƒ์„ Docker Compose๋กœ ๋„์›Œ, ์™ธ๋ถ€ ๋น„์šฉยท์ œ์•ฝ ์—†์ด ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ๊ตฌ์ถ•

  • Spring Boot (CPU/๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์œผ๋กœ ์šด์˜ Pod ์ŠคํŽ™ ๋ชจ์‚ฌ)
  • Redis + redis-exporter (์ขŒ์„ ์„ ์ , ์บ์‹œ, ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘)
  • WireMock : Toss Payments ์™ธ๋ถ€ API ๋ชจํ‚น โ†’ ๊ฒฐ์ œ ํ๋ฆ„๊นŒ์ง€ ์ „์ฒด ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ
  • Prometheus + Grafana : Spring Boot Actuator / Redis ๋ฉ”ํŠธ๋ฆญ ์‹ค์‹œ๊ฐ„ ์ˆ˜์ง‘ยท์‹œ๊ฐํ™” (qa/grafana/dashboards)

๐Ÿค– AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ ๊ฐ€์ด๋“œ

ํŒ€์€ Claude CodeยทCodex ๋“ฑ AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ์ผ๊ด€๋œ ์ปจ๋ฒค์…˜์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ๋ฌธ์„œยท๋„๊ตฌ๋ฅผ ํ•จ๊ป˜ ์ œ๊ณตํ•œ๋‹ค. ์–ด๋–ค ๋„๊ตฌ๋ฅผ ์“ฐ๋“  ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋„๋ก ๋‹จ์ผ ์ปจํ…์ŠคํŠธ(AGENTS.md)๋ฅผ ๊ณต์œ ํ•œ๋‹ค.

์ƒ์„ธ ๋ฌธ์„œ (docs/)

๋ฌธ์„œ ๋‚ด์šฉ
seat-hold-architecture.md Redis Lua ๊ธฐ๋ฐ˜ ์ขŒ์„ ๋™์‹œ ์„ ์  ์•„ํ‚คํ…์ฒ˜, Hold Index, Train Search ํ†ตํ•ฉ
seat-conflict-validation.md 4-Layer ์ขŒ์„ ์ถฉ๋Œ ๋ฐฉ์–ด (Lua โ†’ SQL โ†’ Re-validation โ†’ TTL)
domain-model.md ์—”ํ‹ฐํ‹ฐ ๊ด€๊ณ„๋„, Booking Flow, ํ•œ๊ตญ์–ด ๋„๋ฉ”์ธ ์šฉ์–ด
testing-guide.md Helper/Fixture ์‚ฌ์šฉ ์˜ˆ์ œ์™€ @ServiceTest ์ƒ์„ธ
deployment.md K8s, ArgoCD, Docker, CI/CD ๋ฐฐํฌ ์ƒ์„ธ

์ปค์Šคํ…€ Skills (.agents/skills/)

ํŒ€ ์ปจ๋ฒค์…˜์„ ์ฝ”๋“œํ™”ํ•œ ์ปค์Šคํ…€ skill. ์‹ค์ œ ํŒŒ์ผ์€ .agents/skills/์— ๋‘๊ณ  .claude/skills๋Š” ์ด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋‹ค โ€” Claude Code๋Š” .claude/skills, Codex ๋“ฑ์€ .agents/skills๋ฅผ ์ฐธ์กฐํ•˜๋ฏ€๋กœ ์–ด๋–ค ๋„๊ตฌ์—์„œ๋„ ๋™์ผํ•œ skill์„ ์‚ฌ์šฉํ•œ๋‹ค.

Skill ์šฉ๋„
/issue ํŒ€ Issue ์ปจ๋ฒค์…˜์— ๋งž์ถ˜ ์ œ๋ชฉยท๋ณธ๋ฌธยท๋ผ๋ฒจ ํ…์ŠคํŠธ ์ƒ์„ฑ
/branch ์ด์Šˆ ๋ฒˆํ˜ธ ๊ธฐ๋ฐ˜ ๋ธŒ๋žœ์น˜๋ช… ์ž๋™ ์ƒ์„ฑ
/commit ๋ธŒ๋žœ์น˜๋ช…์—์„œ ์ด์Šˆ ์ถ”์ถœ ํ›„ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ƒ์„ฑ (Co-Authored-By ๊ธˆ์ง€)
/pr ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ถ„์„ ํ›„ ํŒ€ PR ํ…œํ”Œ๋ฆฟ์œผ๋กœ PR ์ƒ์„ฑ (์‚ฌ์šฉ์ž ๊ฒ€์ˆ˜ ํ›„ ์‹คํ–‰)
/test ๋„๋ฉ”์ธ/์„œ๋น„์Šค/Validator ํ…Œ์ŠคํŠธ ์ž๋™ ์ž‘์„ฑ (BDD, @DisplayName ํ•œ๊ตญ์–ด)
/validator application/validator/{Domain}Validator.java ํด๋ž˜์Šค/๋ฉ”์„œ๋“œ ์ƒ์„ฑ
/api-doc Controller ๊ธฐ๋ฐ˜ Swagger {Domain}ControllerDoc ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ

ํ‘œ์ค€ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ (superpowers ๊ธฐ๋ฐ˜)

ํŒ€์€ superpowers ์‹œ๋ฆฌ์ฆˆ๋ฅผ ๊ธฐ๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

  1. superpowers:brainstorming โ€” ์š”๊ตฌ์‚ฌํ•ญ/๋””์ž์ธ ํƒ์ƒ‰
  2. superpowers:writing-plans โ€” ๊ตฌํ˜„ ๊ณ„ํš ์ˆ˜๋ฆฝ
  3. superpowers:test-driven-development โ€” TDD ๊ตฌํ˜„
  4. /test <๋Œ€์ƒ> โ€” ํ”„๋กœ์ ํŠธ ์ปจ๋ฒค์…˜ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ
  5. superpowers:verification-before-completion โ€” ./gradlew test ๋“ฑ ์ฆ๊ฑฐ ๊ธฐ๋ฐ˜ ๊ฒ€์ฆ
  6. ๋ฌธ์„œ ๋ฐ˜์˜ โ€” ๋ฐ”๋€ ๋‚ด์šฉ์„ ๊ด€๋ จ ๋ฌธ์„œ(AGENTS.md, README.md, docs/*)์— ๋ฐ˜์˜. ๊ธฐ์กด ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ํ•„์š”ํ•˜๋ฉด ์ ์ ˆํ•œ ๋ฌธ์„œ๋ฅผ ์‹ ๊ทœ ์ƒ์„ฑํ•˜๊ณ , ๊ฐ™์€ PR์— ํฌํ•จํ•œ๋‹ค
  7. /pr โ€” PR ์ƒ์„ฑ (์‚ฌ์šฉ์ž ๊ฒ€์ˆ˜ ํ›„ ์‹คํ–‰)
  • ๋ฒ„๊ทธ ๋ฐœ์ƒ ์‹œ โ†’ superpowers:systematic-debugging ์šฐ์„ 
  • ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ›์•˜์„ ๋•Œ โ†’ superpowers:receiving-code-review๋กœ ๋งน๋ชฉ์  ์ ์šฉ ๋ฐฉ์ง€
  • ๋ณ‘๋ ฌ ์ž‘์—… ๊ฐ€๋Šฅ ์‹œ โ†’ superpowers:dispatching-parallel-agents

About

๐Ÿš… ์—ด์ฐจ ์˜ˆ๋งค ์‹œ์Šคํ…œ ํ”„๋กœ์ ํŠธ - Spring Server

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages