Skip to content

About

πŸš… μ—΄μ°¨ 예맀 μ‹œμŠ€ν…œ ν”„λ‘œμ νŠΈ - Spring Server

Resources

Stars

3 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

1,643 Commits

Folders and files

Repository files navigation

πŸš… Raillo

πŸ™ŒπŸ» 멀버

κΉ€λ―Όμ•„
μ‹ μ§€λ―Ό
이찬원
κΉ€λ―Όμ•„ μ‹ μ§€λ―Ό 이찬원

πŸ“‹ λͺ©μ°¨

πŸ“– ν”„λ‘œμ νŠΈ κ°œμš”

RailloλŠ” μ½”λ ˆμΌ(KORAIL) 예맀 μ‹œμŠ€ν…œμ„ ν΄λ‘ μ½”λ”©ν•œ κΈ°μ°¨ μ˜ˆμ•½ ν”Œλž«νΌμœΌλ‘œ,
μ‹€μ œ μ„œλΉ„μŠ€μ˜ 핡심 κΈ°λŠ₯듀을 μ΅œλŒ€ν•œ μœ μ‚¬ν•˜κ²Œ κ΅¬ν˜„ν•˜μ—¬ ν˜„μ—…μ—μ„œ μ‚¬μš©λ˜λŠ” 기술 μŠ€νƒκ³Ό 섀계 νŒ¨ν„΄μ„ ν•™μŠ΅ν•˜κ³  μ μš©ν•œ ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€.

πŸ“… μ§„ν–‰ κΈ°κ°„

        1. ~ now

🎯 핡심 λͺ©ν‘œ

  • μ‹€μ œ μ„œλΉ„μŠ€μ™€ μœ μ‚¬ν•œ 핡심 κΈ°λŠ₯ κ΅¬ν˜„ : μ‹€μ œ μ½”λ ˆμΌμ—μ„œ μ œκ³΅ν•˜λŠ” νšŒμ› 인증 및 μ£Όμš” 예맀 흐름을 μ΅œλŒ€ν•œ λΉ„μŠ·ν•˜κ²Œ κ΅¬ν˜„
  • ν™œλ°œν•œ ν˜‘μ—…κ³Ό μ—­ν•  λΆ„λ‹΄ κ²½ν—˜ : νŒ€ λ‚΄λΆ€μ—μ„œ 역할을 λΆ„λ‹΄, ν˜‘μ—…νˆ΄μ„ μ΄μš©ν•œ 버전관리, 이슈 νŠΈλž˜ν‚Ή, μ½”λ“œ 리뷰 λ“± ν˜‘μ—… 방식을 적용
  • μ‹€λ¬΄μ—μ„œ μ‚¬μš©λ˜λŠ” 기술 μŠ€νƒ ν•™μŠ΅ 및 κ²½ν—˜ : μ‹€λ¬΄μ—μ„œ μ‚¬μš©λ˜λŠ” λ‹€μ–‘ν•œ 기술 μŠ€νƒμ„ ν•™μŠ΅, κ²½ν—˜ν•˜κ³  κ΄€λ ¨ νŒ¨ν„΄μ„ 적용

πŸ”§ 기술 μŠ€νƒ

Backend

backend

  • Language : Java 25
  • Framework : Spring Boot 4.1, Spring Security, Spring Batch
  • ORM : Spring Data JPA, QueryDSL
  • DB : MySQL 8.4
  • Cache / μ’Œμ„ 점유 : Valkey 9 (Redis ν˜Έν™˜)
  • Authentication : JWT
  • Payment : Toss Payments
  • Build Tool : Gradle (λ©€ν‹° λͺ¨λ“ˆ)

Infrastructure & DevOps

infra,devops

  • Cloud Platform : Oracle Cloud (OKE), AWS
  • Container : Docker, Kubernetes
  • CI/CD : ArgoCD, GitHub Actions, GHCR
  • Monitoring : Prometheus, Grafana
  • VCS : Git, GitHub

Testing

  • Framework : JUnit 5, Spring Boot Test
  • Test Environment : Testcontainers (MySQL 8.4.10, Valkey 9) β€” 운영과 동일 버전, Docker ν•„μš”
  • Test Utils : AssertJ, ArchUnit
  • Performance Testing : K6
  • Email Testing : GreenMail

πŸ‘€ μœ μ € ν”Œλ‘œμš°

Raillo-User-Flow

πŸ—οΈ μ•„ν‚€ν…μ²˜

Raillo-Server-Architecture

λͺ¨λ“ˆ ꡬ쑰

raillo-domain ← raillo-api
              ← raillo-batch
  • raillo-domain: Entity, VO, 도메인 κ·œμΉ™, Redis ν‚€ κ³„μ•½μ˜ 단일 원본
  • raillo-api: REST API. 결제 도메인은 ν—₯사고날 ꡬ쑰(port, adapter)
  • raillo-batch: μ‹œκ°„ν‘œ νŒŒμ‹±, μš΄ν–‰ 생성, μ—΄μ°¨ μΊμ‹œ 적재, νšŒμ› 정리λ₯Ό ν•˜λŠ” Spring Batch μ•±

Layer μ•„ν‚€ν…μ²˜

Controller β†’ Facade β†’ Service β†’ Repository
  • Facade : μ—¬λŸ¬ Serviceλ₯Ό μ‘°ν•©ν•˜λŠ” μ§„μž…μ . Facade β†’ Facade ν˜ΈμΆœμ€ κΈˆμ§€
  • Service : λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 νŠΈλžœμž­μ…˜ 경계. Service β†’ Service ν˜ΈμΆœμ€ κΈˆμ§€
  • Validator / Calculator / Generator : 검증, 계산, μ‹λ³„μž 생성 λ“± μ±…μž„μ΄ λΆ„λ¦¬λœ 보쑰 μ»΄ν¬λ„ŒνŠΈ

πŸš€ μ£Όμš” νŠΉμ§•

πŸ”‘ Auth 도메인

  • JWT 기반 인증 μ‹œμŠ€ν…œ : Access Tokenκ³Ό Refresh Token을 ν™œμš©ν•œ Stateless 인증 및 인가
  • 이메일 인증 : Redisλ₯Ό ν™œμš©ν•œ 인증 μ½”λ“œ λ°œμ†‘ 및 검증
  • λ³΄μ•ˆ κ°•ν™” : λ‘œκ·Έμ•„μ›ƒλœ 토큰 Redis 관리, μΏ ν‚€ 기반 Refresh Token 관리

πŸ‘€ Member 도메인

  • 고유 νšŒμ›λ²ˆν˜Έ μ‹œμŠ€ν…œ : Redis 기반 일일 증뢄 μΉ΄μš΄ν„°λ₯Ό ν™œμš©ν•œ νšŒμ›λ²ˆν˜Έ μžλ™ 생성 (yyyyMMddCCCC ν˜•μ‹)
  • Soft-Delete : μ‹€μ œ νšŒμ› μ‚­μ œκ°€ μ•„λ‹Œ λΉ„ν™œμ„±ν™” 처리
  • 만료 νšŒμ› 일괄 μ‚­μ œ : νƒˆν‡΄ ν›„ 3년이 μ§€λ‚œ νšŒμ›μ„ Batch둜 영ꡬ μ‚­μ œ

πŸš… Train 도메인

  • μ‹€μ œ 데이터 ν™œμš© : μ½”λ ˆμΌμ˜ μ‹€μ œ 운영 μ‹œκ°„ν‘œμ™€ μš΄μž„ν‘œ Excel을 νŒŒμ‹±ν•΄ 데이터 ꡬ좕
  • μš”μΌ ν…œν”Œλ¦Ώ 기반 μš΄ν–‰ 생성 : μ‹œκ°„ν‘œ ν…œν”Œλ¦ΏμœΌλ‘œ λ‚ μ§œλ³„ μš΄ν–‰μ„ 맀일 Batch둜 생성
  • ꡬ간 λ‹¨μœ„ μž”μ—¬μ„ 계산 : μ •μ°¨ μˆœμ„œ κ΅¬κ°„μœΌλ‘œ 겹침을 νŒλ‹¨ν•΄, 같은 μ’Œμ„μ„ κ²ΉμΉ˜μ§€ μ•ŠλŠ” ꡬ간에 λ‚˜λˆ  판맀
  • μ—΄μ°¨ μΊμ‹œ : μ˜ˆμ•½ 생성에 ν•„μš”ν•œ μ—΄μ°¨, μš΄ν–‰ 정보λ₯Ό Batchκ°€ Redis에 μ μž¬ν•΄ μ˜ˆμ•½ μ‹œ DBλ₯Ό 읽지 μ•ŠμŒ
  • μš΄ν–‰ μΊ˜λ¦°λ” 캐싱 : ν•˜λ£¨ λ™μ•ˆ 같은 응닡을 μΊμ‹œν•˜κ³  μžμ •μ— κ°±μ‹ 

🎫 Booking 도메인

  • Redis Lua 기반 μ’Œμ„ 점유 : μ’Œμ„ ꡬ간 좩돌 검사와 점유λ₯Ό Lua 슀크립트둜 μ›μžμ μœΌλ‘œ μ²˜λ¦¬ν•΄ λ™μ‹œ μ˜ˆμ•½ λ°©μ§€
  • 객차별 Hash ꡬ간 점유 : κ°μ°¨λ§ˆλ‹€ Hash ν•˜λ‚˜μ— {μ’Œμ„}:{ꡬ간} field둜 점유λ₯Ό 기둝
  • TTL 기반 μžλ™ 만료 : κ²°μ œν•˜μ§€ μ•Šμ€ μ˜ˆμ•½μ˜ μ’Œμ„ μ μœ λŠ” field λ‹¨μœ„ 만료(HEXPIRE)둜 μžλ™ ν•΄μ œ
  • 예맀 ν™•μ • : κ²°μ œκ°€ λλ‚˜λ©΄ μ˜ˆλ§€μ™€ μŠΉμ°¨κΆŒμ„ λ§Œλ“€κ³ , μ’Œμ„ 점유λ₯Ό μ˜ˆμ•½μ—μ„œ 예맀둜 μ „ν™˜

πŸ“¦ Order 도메인

  • μ£Όλ¬Έ λ‹¨μœ„ 결제 : μ—¬λŸ¬ μ˜ˆμ•½μ„ ν•˜λ‚˜μ˜ 주문으둜 λ¬Άμ–΄ ν•œ λ²ˆμ— 결제
  • μ˜ˆμ•½ μŠ€λƒ…μƒ· : μ£Όλ¬Έ μ‹œμ μ˜ μ˜ˆμ•½μ„ μ €μž₯ν•΄, Redis μ˜ˆμ•½μ΄ 만료된 뒀에도 결제λ₯Ό ν™•μ •

πŸ’΅ Payment 도메인

  • Toss Payments 연동 : Toss 결제창과 승인 API둜 결제 처리
  • λ©±λ“±ν•œ 승인 : paymentKeyμ—μ„œ κ³„μ‚°ν•œ μ‹œλ„ ID와 μœ λ‹ˆν¬ μ œμ•½μœΌλ‘œ 같은 승인 μš”μ²­μ˜ 쀑볡 처리 λ°©μ§€
  • κ²°κ³Ό 뢈λͺ… λŒ€μ‘ : νƒ€μž„μ•„μ›ƒ, Toss 5xxλŠ” μ‹€νŒ¨λ‘œ λ‹¨μ •ν•˜μ§€ μ•Šκ³ , μž¬μš”μ²­ μ‹œ Toss 쑰회둜 μƒνƒœλ₯Ό 맞좰 이쀑 청ꡬ λ°©μ§€
  • νŠΈλžœμž­μ…˜ 뢄리 : 승인 μ‹œμž‘, Toss 호좜, 승인 확정을 λ‚˜λˆ  μž₯μ•  μ‹œμ κ³Ό 관계없이 볡ꡬ κ°€λŠ₯ν•œ 기둝을 남김
  • Outbox : DB 컀밋 λ’€ Redis μ’Œμ„ 점유 μ „ν™˜μ„ Workerκ°€ λΉ„λ™κΈ°λ‘œ μž¬μ‹œλ„ν•˜λ©° 처리

πŸ“Š λͺ¨λ‹ˆν„°λ§ & 운영

인프라 & 배포

  • Oracle Cloud OKE(Kubernetes)에 API, Batch CronJob, MySQL, Valkey, λͺ¨λ‹ˆν„°λ§μ„ 운영
  • develop에 λ¨Έμ§€λ˜λ©΄ GitHub Actionsκ°€ ν…ŒμŠ€νŠΈ, ARM64 이미지 λΉŒλ“œ, 컀밋 SHA νƒœκ·Έ λ°°ν¬κΉŒμ§€ μˆ˜ν–‰
  • readinessProbe 기반 Rolling Update둜 무쀑단 배포
  • 운영 DBλŠ” bastion을 ν†΅ν•œ SSH ν„°λ„λ‘œλ§Œ 접속

κ΄€μΈ‘ (Observability)

  • Spring Boot Actuator + Micrometer β†’ Prometheus β†’ Grafana 기반 λ©”νŠΈλ¦­ νŒŒμ΄ν”„λΌμΈ
  • Node, JVM, HTTP μš”μ²­, MySQL, Valkey λ©”νŠΈλ¦­μ„ μˆ˜μ§‘ν•˜κ³  μ‹œκ°ν™”
  • μ˜ˆμ•½, μ’Œμ„ 좩돌, 결제, Outbox λ“± λΉ„μ¦ˆλ‹ˆμŠ€ λ©”νŠΈλ¦­μ„ Micrometer둜 μˆ˜μ§‘. μ˜ˆμ•½κ³Ό κ²°μ œλŠ” AOP둜 계츑해 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ κ±΄λ“œλ¦¬μ§€ μ•ŠμŒ

πŸ§ͺ ν…ŒμŠ€νŠΈ

μžλ™ν™” ν…ŒμŠ€νŠΈ μ „λž΅

  • 도메인 λ‹¨μœ„ ν…ŒμŠ€νŠΈ : Entity, VO의 핡심 κ·œμΉ™μ„ λΉ λ₯΄κ²Œ 검증
  • μ„œλΉ„μŠ€ 톡합 ν…ŒμŠ€νŠΈ : @ServiceTest 기반으둜 Testcontainers MySQL/Valkeyλ₯Ό μ‚¬μš©ν•΄ 운영과 λ™μΌν•œ μ—”μ§„μ—μ„œ 검증
  • λ™μ‹œμ„± ν…ŒμŠ€νŠΈ : μ’Œμ„ 선점, 결제 승인처럼 좩돌 κ°€λŠ₯성이 높은 흐름을 별도 μ‹œλ‚˜λ¦¬μ˜€λ‘œ 검증
  • μ•„ν‚€ν…μ²˜ ν…ŒμŠ€νŠΈ : ArchUnit으둜 결제 λ„λ©”μΈμ˜ ν—₯사고날 의쑴 λ°©ν–₯을 κ°•μ œ
  • BDD μŠ€νƒ€μΌ : given / when / then 주석과 ν•œκ΅­μ–΄ @DisplayName으둜 ν…ŒμŠ€νŠΈ μ˜λ„λ₯Ό ν‘œν˜„

둜컬 λΆ€ν•˜ ν…ŒμŠ€νŠΈ ν™˜κ²½ (compose-test.yaml)

운영 ν™˜κ²½κ³Ό μœ μ‚¬ν•œ μŠ€νƒμ„ Docker Compose둜 λ„μ›Œ 반볡 κ°€λŠ₯ν•œ λΆ€ν•˜ ν…ŒμŠ€νŠΈ ν™˜κ²½μ„ ꡬ좕

  • Spring Boot (CPU/λ©”λͺ¨λ¦¬ μ œν•œμœΌλ‘œ 운영 Pod μŠ€νŽ™ λͺ¨μ‚¬)
  • MySQL, Valkey + redis-exporter
  • WireMock : Toss Payments μ™ΈλΆ€ API λͺ¨ν‚Ή β†’ 결제 νλ¦„κΉŒμ§€ 전체 λΆ€ν•˜ ν…ŒμŠ€νŠΈ
  • Prometheus + Grafana : λ©”νŠΈλ¦­ μ‹€μ‹œκ°„ μˆ˜μ§‘, μ‹œκ°ν™” (qa/grafana/dashboards)

πŸ€– AI μ½”λ”© μ—μ΄μ „νŠΈ κ°€μ΄λ“œ

Claude Code, Codex λ“± AI μ½”λ”© μ—μ΄μ „νŠΈκ°€ 같은 μ»¨λ²€μ…˜μœΌλ‘œ μž‘μ—…ν•˜λ„λ‘ λ¬Έμ„œμ™€ μŠ€ν‚¬μ„ μ €μž₯μ†Œμ— ν•¨κ»˜ λ‘”λ‹€. μ‹œμž‘μ μ€ AGENTS.md이며 CLAUDE.mdλŠ” κ·Έ 심볼릭 링크닀.

ꡬ성

μœ„μΉ˜ λ‚΄μš©
AGENTS.md λ¬Έμ„œ 지도, λͺ¨λ“ˆ ꡬ쑰, λΉŒλ“œ λͺ…λ Ή, μž‘μ—… 흐름
docs/ 도메인별 λ¬Έμ„œ. 도메인 μ„€λͺ…, μš©μ–΄, λͺ¨λΈ, 섀계 κ²°μ •
.agents/rules/ μ½”λ“œ μ»¨λ²€μ…˜, ν…ŒμŠ€νŠΈ κ·œμΉ™, λ¬Έμ„œ κ·œμΉ™
.agents/skills/ νŒ€ μž‘μ—… 흐름을 μ½”λ“œν™”ν•œ μŠ€ν‚¬. .claude/skillsλŠ” 이λ₯Ό κ°€λ¦¬ν‚€λŠ” 심볼릭 링크
.claude/hooks/ μ—μ΄μ „νŠΈκ°€ 운영 ν΄λŸ¬μŠ€ν„°μ™€ DBλ₯Ό 쑰회만 ν•˜λ„λ‘ λ§‰λŠ” κ°€λ“œ ν›…. μƒμ„ΈλŠ” 인프라 λ¬Έμ„œ
.githooks/ λ―Όκ°ν•œ κ°’ pre-commit ν›…. 클둠 ν›„ brew install gitleaks && git config core.hooksPath .githooks둜 μΌ λ‹€. μƒμ„ΈλŠ” 인프라 λ¬Έμ„œ

μž‘μ—… 흐름

/issue β†’ /branch β†’ /implement [ κ΅¬ν˜„ β†’ /test β†’ /commit ] Γ— n β†’ /review β†’ /docs β†’ /tidy-commits β†’ /pr
Skill μš©λ„
/issue νŒ€ ν˜•μ‹μœΌλ‘œ 이슈λ₯Ό μ“°κ³  승인 ν›„ 생성
/branch 이슈 번호 기반 브랜치λ₯Ό 원격 μ΅œμ‹  κΈ°μ€€μœΌλ‘œ λΆ„κΈ°
/implement 이슈λ₯Ό 컀밋 λ‹¨μœ„ λ‹¨κ³„λ‘œ λ‚˜λˆ  λ‹¨κ³„λ§ˆλ‹€ κ²€ν†  ν›„ 컀밋
/test κ·œμΉ™μ— λ§žλŠ” ν…ŒμŠ€νŠΈ μž‘μ„±κ³Ό μ‹€ν–‰
/commit type: μ„€λͺ… (#N) ν˜•μ‹μœΌλ‘œ 컀밋
/review λŒ€ν™” λ§₯락이 μ—†λŠ” μ„œλΈŒμ—μ΄μ „νŠΈκ°€ μ»¨λ²€μ…˜, μ •ν™•μ„±, ν…ŒμŠ€νŠΈ κ΄€μ μœΌλ‘œ 리뷰
/docs λ¬Έμ„œλ₯Ό μ½”λ“œμ™€ λŒ€μ‘°ν•΄ μ„Έμ…˜ λ§₯락, 쀑볡을 κ±·μ–΄λ‚΄κ³  κ°„κ²°ν•˜κ²Œ μœ μ§€
/tidy-commits PR 전에 μˆ˜μ • 컀밋을 ν•©μΉ˜κ³  λ©”μ‹œμ§€ 정리
/pr 이슈 κΈ°μ€€μœΌλ‘œ PR을 μ“°κ³  승인 ν›„ 생성
/db-reset ν…ŒμŠ€νŠΈ DBμ—μ„œ μ—΄μ°¨, νšŒμ› λ°μ΄ν„°λ§Œ 남기고 ν…Œμ΄λΈ” μ΄ˆκΈ°ν™”

About

πŸš… μ—΄μ°¨ 예맀 μ‹œμŠ€ν…œ ν”„λ‘œμ νŠΈ - Spring Server

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages