Skip to content

Latest commit

Β 

History

History
136 lines (96 loc) Β· 4.47 KB

File metadata and controls

136 lines (96 loc) Β· 4.47 KB

queue-service

First Ticket ν”„λ‘œμ νŠΈμ˜ λŒ€κΈ°μ—΄ μ„œλΉ„μŠ€.
ν‹°μΌ“ μ˜€ν”ˆ μ‹œ νŠΈλž˜ν”½ 폭증을 μ œμ–΄ν•˜κΈ° μœ„ν•œ λŒ€κΈ°μ—΄ μ‹œμŠ€ν…œμ„ μ œκ³΅ν•œλ‹€.


πŸ“Œ 핡심 κΈ°λŠ₯

ν‹°μΌ“ μ˜ˆλ§€κ°€ 열리면 νŠΈλž˜ν”½μ΄ μˆœκ°„μ μœΌλ‘œ ν­μ¦ν•˜μ—¬ 예맀 μ‹œμŠ€ν…œμ— κ³ΌλΆ€ν•˜κ°€ λ°œμƒν•œλ‹€.
queue-service λŠ” μ‚¬μš©μžλ₯Ό λŒ€κΈ°μ—΄μ— 쀄 μ„Έμš°κ³  일정 μΈμ›μ”©λ§Œ μž…μž₯을 μŠΉμΈν•˜μ—¬ νŠΈλž˜ν”½μ„ μ œμ–΄ν•œλ‹€.

μ£Όμš” 흐름

  1. μ‚¬μš©μžκ°€ 큐 μ§„μž… β†’ λŒ€κΈ° 토큰 λ°œκΈ‰ + 순번 λΆ€μ—¬ + Redis Hash 에 토큰 정보 μ €μž₯
  2. ν΄λΌμ΄μ–ΈνŠΈκ°€ 폴링으둜 자기 순번 쑰회 (μ„œλ²„κ°€ ꢌμž₯ 폴링 간격을 λ™μ μœΌλ‘œ 응닡)
  3. AdmissionSchedulerκ°€ μ•ž 순번 batchSize λͺ…을 μž…μž₯ 승인
  4. μž…μž₯ 승인된 μ‚¬μš©μžμ—κ²Œ JWT μž…μž₯ 토큰 λ°œκΈ‰
  5. μ‚¬μš©μžλŠ” μž…μž₯ 토큰을 κ°€μ§€κ³  예맀 μ„œλΉ„μŠ€λ‘œ μ§„μž…

μ™ΈλΆ€ 이벀트 연동

program-service 의 이벀트λ₯Ό μˆ˜μ‹ ν•˜μ—¬ ProgramMeta (Read Model) λ₯Ό μœ μ§€ν•œλ‹€:

이벀트 처리
program.created λŒ€κΈ°μ—΄ ν™œμ„± 정보 μ €μž₯
program.time.updated ν™œμ„± μ‹œκ°„ κ°±μ‹ 
program.cancelled λŒ€κΈ°μ—΄ 정리

πŸ›  기술 μŠ€νƒ

ν•­λͺ© 기술
μ €μž₯μ†Œ Redis (λŒ€κΈ° 토큰, ProgramMeta) + PostgreSQL (Kafka Inbox)
λ©”μ‹œμ§€ 브둜컀 Apache Kafka
JWT jjwt 0.12.6

곡톡 기술 μŠ€νƒμ€ 곡톡 README μ°Έκ³ .


πŸ“ νŒ¨ν‚€μ§€ ꡬ쑰

DDD + ν—₯사고날 μ•„ν‚€ν…μ²˜ 기반

com.firstticket.queueservice
β”œβ”€β”€ queuetoken/                  # QueueToken Aggregate (λŒ€κΈ° 토큰 관리)
β”‚   β”œβ”€β”€ domain/                  # 도메인 λͺ¨λΈ, VO, Enum, Exception, Repository μΈν„°νŽ˜μ΄μŠ€
β”‚   β”œβ”€β”€ application/             # λŒ€κΈ° 토큰 관리 μ„œλΉ„μŠ€, Command/Query/Result DTO
β”‚   β”œβ”€β”€ config/                  # Aggregate μ „μš© μ„€μ •
β”‚   β”œβ”€β”€ infrastructure/          # Redis Repository, Lua Script, JWT λ°œκΈ‰κΈ°, μŠ€μΌ€μ€„λŸ¬
β”‚   └── presentation/            # REST Controller, Response DTO, Polling μ •μ±…
β”œβ”€β”€ programmeta/                 # ProgramMeta Aggregate (μ™ΈλΆ€ 이벀트 Read Model)
β”‚   β”œβ”€β”€ domain/                  # 도메인 λͺ¨λΈ, VO, Enum, Exception, Repository μΈν„°νŽ˜μ΄μŠ€, 도메인 이벀트 포트
β”‚   β”œβ”€β”€ application/             # 이벀트 처리 μ„œλΉ„μŠ€, Command Dto
β”‚   └── infrastructure/          # Kafka Consumer, Redis Repository, 도메인 이벀트 μ–΄λŒ‘ν„°
β”œβ”€β”€ shared/                      # Aggregate κ°„ 곡유 μžμ›
└── config/                      # μ „μ—­ μ„€μ •

🌐 API μ—”λ“œν¬μΈνŠΈ

Method Path μ„€λͺ…
POST /api/v1/queues/programs/{programId} λŒ€κΈ°μ—΄ μ§„μž… (λŒ€κΈ° 토큰 λ°œκΈ‰)
GET /api/v1/queues/programs/{programId} λŒ€κΈ° / μž…μž₯ μƒνƒœ 쑰회 (폴링)
DELETE /api/v1/queues/programs/{programId} λŒ€κΈ° μ·¨μ†Œ

μƒμ„Έν•œ μš”μ²­ / 응닡 μ˜ˆμ‹œλŠ” REST Docs μ°Έμ‘°: http://localhost:8085/docs/index.html


🌐 포트

ν™˜κ²½ 포트
local 8085
prod 8080 (μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€)

πŸš€ 둜컬 μ‹€ν–‰

사전 쑰건

λ‹€μŒ 인프라가 λ¨Όμ € μ‹€ν–‰λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.

  1. infra 레포의 docker-compose β€” Redis, kafka, PostgreSQL, Zipkin
  2. eureka-server β€” μ„œλΉ„μŠ€ λ””μŠ€μ»€λ²„λ¦¬
  3. config-server β€” μ„€μ • 관리 μ„œλ²„
  4. program-service β€” Kafka 이벀트 λ°œν–‰

ν™˜κ²½λ³€μˆ˜ μ„€μ •

CONFIG_SERVER_USERNAME=
CONFIG_SERVER_PASSWORD=
GITHUB_USER=
GITHUB_TOKEN=

.env.example νŒŒμΌμ„ μ°Έκ³ ν•˜μ—¬ .env λ₯Ό μž‘μ„±ν•œλ‹€.

μ™ΈλΆ€ μ„€μ •

섀정은 config-repo μ—μ„œ κ΄€λ¦¬ν•œλ‹€.

곡톡 (application.yml)

  • Redis / PostgreSQL / Kafka μ—°κ²° 정보
  • Zipkin, Prometheus
  • Kafka Producer / Consumer κΈ°λ³Έκ°’ (idempotence, retries λ“±)

queue-service μ „μš© (queue-service.yml)

  • 큐 μ •μ±…: queue.token.waiting-ttl, queue.token.admission-batch-size
  • JWT: queue.jwt.secret, queue.jwt.entry-token-ttl
  • Kafka ν† ν”½ λ§€ν•‘: kafka.topics.*
  • Inbox ν™œμ„±ν™”: messaging.inbox.enabled
  • μŠ€ν‚€λ§ˆ: queue_schema (JPA + Flyway)

ν™˜κ²½λ³„ (queue-service-{profile}.yml)

  • 포트, JWT TTL λ“± ν™˜κ²½ 의쑴 μ„€μ •

πŸ” ν—¬μŠ€μ²΄ν¬

curl http://localhost:8085/actuator/health
# β†’ {"status":"UP"}