Skip to content

goorm-sudo/raillo-backend

Repository files navigation

πŸš… Raillo

πŸ™ŒπŸ» 멀버

κΉ€λ―Όμ•„
κΉ€μ˜λ ¬
λ°•λ²”μ§„
μ‹ μ§€λ―Ό
μ΄μŠΉν›ˆ
이찬원
μ‘°μœ€μ„±
κΉ€λ―Όμ•„ κΉ€μ˜λ ¬ λ°•λ²”μ§„ μ‹ μ§€λ―Ό μ΄μŠΉν›ˆ 이찬원 μ‘°μœ€μ„±

πŸ“‹ λͺ©μ°¨

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

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

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

  • 1μ°¨ (기획 및 개발) : 2025. 05. 28. ~ 2025. 07. 01.
  • 2μ°¨ (ν΄λΌμ΄μ–ΈνŠΈ μš”κ΅¬μ‚¬ν•­ 반영) : 2025. 07. 02. ~ 2025. 07. 15.
  • 3μ°¨ (카카였 API 톡합) : 2025. 07. 16. ~ 2025. 08. 08.
  • 지속 κ°œμ„  : 2025. 08. 09. ~ endless

🎯 핡심 λͺ©ν‘œ

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

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

Backend

backend

  • Language : Java
  • Framework : Spring Boot, Spring Security, Spring Batch
  • ORM : Spring Data JPA, QueryDSL
  • DB : MySQL (Production), H2 (Test)
  • Cache : Redis
  • Authentication : JWT
  • File Processing : Apache POI
  • 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
  • DB : H2 (in-memory)
  • Cache : Embedded Redis
  • Test Utils : AssertJ
  • Performance Testing : K6
  • Email Testing : GreenMail
  • Coverage : JaCoCo

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

Raillo-Server-Architecture

도메인 주도 섀계 (DDD)

src/main/java/com/sudo/railo/
β”œβ”€β”€ auth/       # 인증 도메인
β”œβ”€β”€ booking/    # μ˜ˆμ•½ 도메인  
β”œβ”€β”€ global/     # 곡톡 κΈ°λŠ₯
β”œβ”€β”€ member/     # νšŒμ› 도메인
β”œβ”€β”€ payment/    # 결제 도메인
└── train/      # μ—΄μ°¨ 도메인

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

πŸ”‘ Auth 도메인

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

πŸ‘€ Member 도메인

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

🎫 Booking 도메인

  • μž₯λ°”κ΅¬λ‹ˆ μ‹œμŠ€ν…œ : μ˜ˆμ•½ ν›„ 결제 μ „ μž„μ‹œ μ €μž₯ 및 관리 κΈ°λŠ₯
  • μ’Œμ„ μ˜ˆμ•½ 관리 : 승객 μœ ν˜•λ³„ μ’Œμ„ λ°°μ • 및 μ˜ˆμ•½ μƒνƒœ 관리
  • μš”κΈˆ 계산 : 거리별, 승객 μœ ν˜•λ³„, μ°¨λŸ‰ 등급별 μš”κΈˆ μžλ™ 계산

πŸ’΅ Payment 도메인

  • 결제 μˆ˜λ‹¨ ν™•μž₯을 μœ„ν•œ μœ μ—°ν•œ ꡬ쑰 : 절차λ₯Ό λΆ„λ¦¬ν•¨μœΌλ‘œμ¨ μΆ”ν›„ 결제 μˆ˜λ‹¨ ν™•μž₯ μš©μ΄ν•¨
  • 결제 ν‚€ 생성 : κ³ μœ ν•œ 결제 μ‹λ³„μž μžλ™ 생성
  • 결제 검증 : κΈˆμ•‘ 검증 및 쀑볡 결제 λ°©μ§€
  • μžλ™ ν‹°μΌ“ λ°œκΈ‰ : 결제 μ™„λ£Œ μ‹œ ν‹°μΌ“ 생성
  • μ·¨μ†Œ 및 ν™˜λΆˆ : 결제 μ·¨μ†Œ 및 ν™˜λΆˆ 처리 μ‹œμŠ€ν…œ

πŸš… Train 도메인

  • μ‹€μ œ 데이터 ν™œμš© : μ½”λ ˆμΌμ˜ μ‹€μ œ 운영 μŠ€μΌ€μ€„ Excel νŒŒμΌμ„ νŒŒμ‹±ν•˜μ—¬ 데이터 ꡬ좕
  • μ—‘μ…€ 데이터 νŒŒμ‹± : Apache POIλ₯Ό ν™œμš©ν•œ λ³΅μž‘ν•œ μŠ€μΌ€μ€„ 데이터 μžλ™ νŒŒμ‹±
  • μ—΄μ°¨ 검색 μ΅œμ ν™” : 배치 쿼리λ₯Ό ν™œμš©ν•œ λŒ€μš©λŸ‰ μŠ€μΌ€μ€„ 검색 μ„±λŠ₯ μ΅œμ ν™”
  • μ’Œμ„ ν˜„ν™© 관리 : μ‹€μ‹œκ°„ μ’Œμ„ μ˜ˆμ•½ ν˜„ν™© 및 μ—¬μœ μ„ 정보 제곡
  • μ—­ κ°„ μš”κΈˆ μ‹œμŠ€ν…œ : ꡬ간별 μ„ΈλΆ„ν™”λœ μš”κΈˆ 체계 κ΅¬ν˜„

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

  • GitHub Actions와 ArgoCDλ₯Ό ν™œμš©ν•΄ μ½”λ“œ λ³€κ²½ μ‹œ μžλ™ λΉŒλ“œ, 배포, ν΄λŸ¬μŠ€ν„° 적용
  • AWS EKS κΈ°λ°˜μ—μ„œ λͺ¨λ“  κ΅¬μ„±μš”μ†Œλ₯Ό μ»¨ν…Œμ΄λ„ˆλ‘œ 관리
  • Prometheus, Grafana등을 λ„μž…ν•˜μ—¬ λ…Έλ“œ 별 μ„œλΉ„μŠ€ μƒνƒœ, λ¦¬μ†ŒμŠ€ μ‚¬μš©λŸ‰μ„ μ‹€μ‹œκ°„μœΌλ‘œ μˆ˜μ§‘ 및 κ°€μ‹œν™”
  • μ—¬λŸ¬ Node Groupκ³Ό λΆ„μ‚°λœ λ°±μ—”λ“œ 및 Redis둜 κ΅¬μ„±λ˜μ–΄ κ³ κ°€μš©μ„± 확보
  • RDS, Route53, LB λ“± AWS μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터 관리와 νŠΈλž˜ν”½ λΆ„μ‚° 및 도메인 운영 지원

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

둜컬 ν…ŒμŠ€νŠΈ ν™˜κ²½ ꡬ좕

  • λ‘œμ»¬μ—μ„œ μš΄μ˜ν™˜κ²½κ³Ό λΉ„μŠ·ν•œ ν™˜κ²½ ꡬ좕 ν›„ 슀트레슀 ν…ŒμŠ€νŠΈ μ§„ν–‰
  • Spring Boot, LB, Redis, Prometheus, Grafana, AWS RDS 이용

K6λ₯Ό μ΄μš©ν•œ λΆ€ν•˜ ν…ŒμŠ€νŠΈ

  • K6둜 API 호좜 -> λ‘œλ“œλ°ΈλŸ°μ„œ -> Spring Boot Application -> DB
  • λΆ€ν•˜ ν…ŒμŠ€νŠΈ λͺ©ν‘œ μ„€μ • (예: Target TPS 500, Avg Latency 800ms μ΄ν•˜)
  • λΆ€ν•˜ ν…ŒμŠ€νŠΈ μ§„ν–‰ ν›„ 병λͺ© 지점 νŒŒμ•…, μ„±λŠ₯ κ°œμ„ 
  • κ°œμ„ ν•œ μ‹œμŠ€ν…œμ΄ μ–΄λŠ 정도 νŠΈλž˜ν”½κΉŒμ§€λ₯Ό κ²¬λ”œ 수 μžˆλŠ”μ§€ ν…ŒμŠ€νŠΈ κ³Όμ • 반볡

πŸ“Œ μ£Όμš” μ—”λ“œν¬μΈνŠΈ

# Auth
POST /auth/signup
POST /auth/login
POST /auth/logout
POST /auth/emails/verify
POST /auth/reissue

# Booking
GET /api/v1/booking/reservation
GET /api/v1/booking/reservation/{reservationId}
POST /api/v1/booking/reservation
DELETE /api/v1/booking/reservation
GET /api/v1/booking/ticket

# Member
DELETE /api/v1/members
GET /api/v1/members/me
PUT /api/v1/members/password

# Payment
GET /api/v1/payments
POST /api/v1/payments/{paymentKey}/cancel
POST /api/v1/payments/bank-account
POST /api/v1/payments/card

# Train
GET /api/v1/trains/calendar
POST /api/v1/trains/cars
POST /api/v1/trains/search
POST /api/v1/trains/seats

About

πŸš… μ½”λ ˆμΌ 클둠코딩 ν”„λ‘œμ νŠΈ - Spring Server

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 7