|
|
|
|
|
|
|
|
| κΉλ―Όμ | κΉμλ ¬ | λ°λ²μ§ | μ μ§λ―Ό | μ΄μΉν | μ΄μ°¬μ | μ‘°μ€μ± |
- νλ‘μ νΈ κ°μ
- κΈ°μ μ€ν
- μν€ν μ²
- μ£Όμ κΈ°λ₯
- λͺ¨λν°λ§ & μ΄μ
- ν μ€νΈ
- μ£Όμ μλν¬μΈνΈ
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
- μ€μ μλΉμ€μ μ μ¬ν ν΅μ¬ κΈ°λ₯ ꡬν : μ€μ μ½λ μΌμμ μ 곡νλ νμ μΈμ¦ λ° μ£Όμ μλ§€ νλ¦μ μ΅λν λΉμ·νκ² κ΅¬ν
- νλ°ν νμ κ³Ό μν λΆλ΄ κ²½ν : ν λ΄λΆμμ μν μ λΆλ΄, νμ ν΄μ μ΄μ©ν λ²μ κ΄λ¦¬, μ΄μ νΈλνΉ, μ½λ 리뷰 λ± νμ λ°©μμ μ μ©
- μ€λ¬΄μμ μ¬μ©λλ κΈ°μ μ€ν νμ΅ λ° κ²½ν : μ€λ¬΄μμ μ¬μ©λλ λ€μν κΈ°μ μ€νμ νμ΅, κ²½ννκ³ κ΄λ ¨ ν¨ν΄μ μ μ©
- 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
- Cloud Platform : AWS (EKS, RDS, Route53, Load Balancer)
- Container : Docker, Kubernetes
- CI/CD : GitHub Actions, ArgoCD (GitOps)
- Monitoring : Prometheus, Grafana
- VCS : Git, GitHub
- Framework : JUnit, Spring Boot Test
- DB : H2 (in-memory)
- Cache : Embedded Redis
- Test Utils : AssertJ
- Performance Testing : K6
- Email Testing : GreenMail
- Coverage : JaCoCo
src/main/java/com/sudo/railo/
βββ auth/ # μΈμ¦ λλ©μΈ
βββ booking/ # μμ½ λλ©μΈ
βββ global/ # κ³΅ν΅ κΈ°λ₯
βββ member/ # νμ λλ©μΈ
βββ payment/ # κ²°μ λλ©μΈ
βββ train/ # μ΄μ°¨ λλ©μΈ
- JWT κΈ°λ° μΈμ¦ μμ€ν : Access Tokenκ³Ό Refresh Tokenμ νμ©ν Stateless μΈμ¦ λ° μΈκ°
- μ΄λ©μΌ μΈμ¦ : Redisλ₯Ό νμ©ν μΈμ¦ μ½λ λ°μ‘ λ° κ²μ¦ μμ€ν
- 보μ κ°ν : λ‘κ·Έμμλ ν ν° Redis κ΄λ¦¬, μΏ ν€ κΈ°λ° Refresh Token κ΄λ¦¬
- κ³ μ νμλ²νΈ μμ€ν
: Redis κΈ°λ° μΌμΌ μ¦λΆ μΉ΄μ΄ν°λ₯Ό νμ©ν νμλ²νΈ μλ μμ± (
yyyyMMddCCCCνμ) - Soft-Delete : μ€μ νμ μμ κ° μλ λΉνμ±ν μ²λ¦¬
- λ§λ£ νμ μΌκ΄ μμ : λ§λ£λ νμ λ°μ΄ν° μ 리λ₯Ό μν Spring Batch νμ©
- μ₯λ°κ΅¬λ μμ€ν : μμ½ ν κ²°μ μ μμ μ μ₯ λ° κ΄λ¦¬ κΈ°λ₯
- μ’μ μμ½ κ΄λ¦¬ : μΉκ° μ νλ³ μ’μ λ°°μ λ° μμ½ μν κ΄λ¦¬
- μκΈ κ³μ° : 거리λ³, μΉκ° μ νλ³, μ°¨λ λ±κΈλ³ μκΈ μλ κ³μ°
- κ²°μ μλ¨ νμ₯μ μν μ μ°ν ꡬ쑰 : μ μ°¨λ₯Ό λΆλ¦¬ν¨μΌλ‘μ¨ μΆν κ²°μ μλ¨ νμ₯ μ©μ΄ν¨
- κ²°μ ν€ μμ± : κ³ μ ν κ²°μ μλ³μ μλ μμ±
- κ²°μ κ²μ¦ : κΈμ‘ κ²μ¦ λ° μ€λ³΅ κ²°μ λ°©μ§
- μλ ν°μΌ λ°κΈ : κ²°μ μλ£ μ ν°μΌ μμ±
- μ·¨μ λ° νλΆ : κ²°μ μ·¨μ λ° νλΆ μ²λ¦¬ μμ€ν
- μ€μ λ°μ΄ν° νμ© : μ½λ μΌμ μ€μ μ΄μ μ€μΌμ€ 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λ‘ 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