Skip to content

Latest commit

ย 

History

History
110 lines (69 loc) ยท 4.58 KB

File metadata and controls

110 lines (69 loc) ยท 4.58 KB

๐Ÿšš ์˜ค๋ฐฐ์†ก (Oh Delivery)

์˜ค๋ฐฐ์†ก์€ ๋ฐฐ๋‹ฌ ๋ผ์ด๋”๋ฅผ ์œ„ํ•œ ์ฃผ๋ฌธ ๋งค์นญ, ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ, ์ธ์„ผํ‹ฐ๋ธŒ ์ง€๊ธ‰ ๋ฐ ์ƒ๋‹ด ์ง€์› ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐ๋ชจ๋“ˆ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ๊ณ ๋ คํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๐Ÿš€ ์„œ๋น„์Šค ์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿ›ต ๋ผ์ด๋” ๋งค์นญ

  • ๋ฐฐ๋‹ฌ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ, ๊ฐ€๊ฒŒ ์œ„์น˜ ๊ธฐ์ค€์œผ๋กœ ์ธ๊ทผ ๋ผ์ด๋”๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ๋งค์นญ ์ด๋ฒคํŠธ ๋ฐœํ–‰
  • ๋งค์นญ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ, ๋ผ์ด๋”๋“ค์—๊ฒŒ ์•Œ๋ฆผ ์ „์†ก (Slack, WebSocket)
  • ์•Œ๋ฆผ์„ ๋ฐ›์€ ๋ผ์ด๋”๋“ค ์ค‘ ์„ ์ฐฉ์ˆœ ์‘๋‹ต์ž์™€ ๋ฐฐ๋‹ฌ ๋งค์นญ โ†’ Redisson ๋ถ„์‚ฐ๋ฝ์„ ํ™œ์šฉํ•ด ๋™์‹œ ์‘๋‹ต ์ถฉ๋Œ ๋ฐฉ์ง€

๐Ÿ“ฆ ๋ฐฐ๋‹ฌ ๊ฒฝ๋กœ ๋ฐ ์œ„์น˜ ์ถ”์ 

  • Naver Open API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ฃผ์†Œ ๊ธฐ๋ฐ˜ ์œ„๋„/๊ฒฝ๋„ ์ •๋ณด ์กฐํšŒ, ์ตœ๋‹จ ๊ฒฝ๋กœ ์ œ๊ณต
  • Redis GEO์™€ WebSocket์„ ํ™œ์šฉํ•œ ๋ผ์ด๋” ์‹ค์‹œ๊ฐ„ ์œ„์น˜ ์ถ”์ 

๐Ÿ’ฐ ๋ผ์ด๋” ์ธ์„ผํ‹ฐ๋ธŒ

  • ๋ฐฐ๋‹ฌ ์ˆ˜ํ–‰์— ๋”ฐ๋ฅธ ๋ผ์ด๋” ๋ฐฐ๋‹ฌ๋ฃŒ ๋ฐ ์ธ์„ผํ‹ฐ๋ธŒ ์ž๋™ ์ฑ…์ •
  • Kafka Streams๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ธ์„ผํ‹ฐ๋ธŒ ์ •์‚ฐ์„ ์œ„ํ•œ ํ†ต๊ณ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

๐Ÿ’ฌ ์ƒ๋‹ด ๋ฐ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…

  • ์‚ฌ์šฉ์ž์˜ ์ƒ๋‹ด ์š”์ฒญ ์‹œ ์ƒ๋‹ด์› ์ž๋™ ๋งค์นญ, Redis๋ฅผ ํ†ตํ•œ ์ƒ๋‹ด์› ์ƒํƒœ ๊ด€๋ฆฌ
  • ๋งค์นญ ์™„๋ฃŒ ํ›„ ์ฑ„ํŒ…๋ฐฉ ์ž๋™ ์˜คํ”ˆ (WebSocket ๊ธฐ๋ฐ˜)
  • ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€๋Š” STOMP ํ”„๋กœํ† ์ฝœ + WebSocket์„ ํ†ตํ•ด ์ „๋‹ฌ๋˜๋ฉฐ, โ†’ Kafka๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํ›„ MongoDB์— ์ €์žฅ

๐Ÿ‘ฅ ํŒ€์› ๋ฐ ์—ญํ• 

๐Ÿง‘โ€๐Ÿ’ป ํŒ€์› ์—ญํ•  ์ •๋ฆฌ

์ด๋ฆ„ ์—ญํ• 
๋ฐ•ํƒœํ›ˆ ํŒ€์žฅ
- ๋งค์นญ, ๋ผ์ด๋” ์„œ๋น„์Šค ๋„๋ฉ”์ธ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„
- Kafka ๊ธฐ๋ฐ˜ ์ด๋ฒคํŠธ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฐ ์ ์šฉ
- Command ํŒจํ„ด, CQRS ๊ตฌ์กฐ ์ ์šฉ์„ ํ†ตํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ถ„๋ฆฌ
- AWS ECS ๊ธฐ๋ฐ˜ ๋ฐฐํฌ
๊น€ํ˜•์ฐฌ ํ…Œํฌ ๋ฆฌ๋”
- ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ ๋ฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ•
- Naver Maps API๋ฅผ ์ด์šฉํ•œ ๋ผ์ด๋” ์ตœ๋‹จ ๊ฒฝ๋กœ ํƒ์ƒ‰
- Redis GEO / WebSocket์„ ์ด์šฉํ•œ ๋ผ์ด๋” ์‹ค์‹œ๊ฐ„ ์œ„์น˜ ์ถ”์ 
๋ฐ•๋ณดํ˜„ ์ธ์ฆ/์ธ๊ฐ€ ์„œ๋น„์Šค ๊ตฌํ˜„
- API Gateway ๊ตฌํ˜„
- ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ ๊ตฌํ˜„
- WebSocket + STOMP + Kafka + MongoDB ๊ธฐ๋ฐ˜์˜ ์ƒ๋‹ด์› ์ฑ„ํŒ… ์„œ๋น„์Šค ๊ตฌํ˜„
๋ฐ•๊ฒฝ๋ฆฐ ์ธ์„ผํ‹ฐ๋ธŒ ์ฒ˜๋ฆฌ ๋‹ด๋‹น
- Kafka Streams ๊ธฐ๋ฐ˜ ์ธ์„ผํ‹ฐ๋ธŒ ๋กœ์ง ๊ตฌํ˜„ ๋ฐ ํŒŒํ‹ฐ์…˜์„ ์ด์šฉํ•œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ
- StateStore๋ฅผ ํ™œ์šฉํ•œ ์ธ์„ผํ‹ฐ๋ธŒ ์ค‘๋ณต ์ง€๊ธ‰ ๋ฐฉ์ง€ ๋ฐ ํ•˜๋ฃจ ๋‹จ์œ„ ๋ฐ์ดํ„ฐ ์‚ญ์ œ
- Prometheus + Grafana๋ฅผ ์ด์šฉํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง
- DLQ ๊ธฐ๋ฐ˜ ์žฌ์ฒ˜๋ฆฌ ์‹คํŒจ ๋Œ€์‘ ๋ฐ Slack ์•Œ๋ฆผ ์ „์†ก
๊น€์ง€ํ˜„ ์•Œ๋ฆผ ๋ฐ ์ƒ๋‹ด์› ๋งค์นญ ์„œ๋น„์Šค ๊ตฌํ˜„
- ์Œ์‹์  ์ฃผ์†Œ(์œ„/๊ฒฝ๋„) ๊ธฐ์ค€ ์ฃผ๋ณ€ ๋ผ์ด๋” ์กฐํšŒ ํ›„ Slack / WebSocket์œผ๋กœ ๋น„๋™๊ธฐ ์•Œ๋ฆผ ์ „์†ก
- ์•Œ๋ฆผ ์‹คํŒจ ์‹œ 3ํšŒ ์žฌ์‹œ๋„ ํ›„ DLT ์ „์†ก ๋ฐ Slack ์•Œ๋ฆผ
- Redis + LeastBusy ๋ฐฉ์‹ ์ƒ๋‹ด์› ๋งค์นญ ์„œ๋น„์Šค ๊ตฌํ˜„

๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

๐ŸŒฟ Framework

  • Java 17
  • Spring Boot 3.4
  • Eureka
  • Feign Client
  • JPA
  • QueryDsl

๐Ÿ’ฝ Database

  • PostgreSQL: ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฌ๋Ÿฌ ์Šค์ผ€๋งˆ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์–ด ์„ ํƒ
  • Redis : ๋น ๋ฅธ ํ™œ์šฉ์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๋ฝ์„ ์œ„ํ•ด ์‚ฌ์šฉ

๐Ÿ“ก Messaging

  • Kafka : ์„œ๋น„์Šค ๊ฐ„ ๋ฉ”์‹œ์ง€๋ธŒ๋กœ์ปค์™€ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ฉ”์‹œ์ง€์™€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
  • WebSocket : ์œ„์น˜ ์ถ”์ , ์ฑ„ํŒ…, ์•Œ๋ฆผ ํ†ต์‹ ์„ ์—ด์–ด ์ง€์†์ ์ธ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์— ํ™œ์šฉ

๐Ÿ“ŠMonitoring

  • Prometheus : ๋งค์นญ, ์œ„์น˜ ์ถ”์  ๋“ฑ ์„œ๋น„์Šค ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง
  • Grafana : ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๋ณด๊ธฐ ํŽธํ•˜๊ฒŒ ๋„์‹ํ™”

๐Ÿ—„๏ธInfrastructure

  • Aurora : postgresql DB๋ฅผ aws์˜ aurora๋กœ ๋ฐฐํฌ
  • Elastic Container Registry : ๊ฐ ์„œ๋น„์Šค์˜ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ AWS ECR๋กœ ๊ด€๋ฆฌ
  • Elastic Container Service : ๊ฐ ์„œ๋น„์Šค๋ฅผ ECS๋ฅผ ํ†ตํ•ด Fargate๋กœ ๋ฐฐํฌ.

๐Ÿ—‚๏ธ ERD

image


๐Ÿ—๏ธ System Architecture

image


โœจ ํ”„๋กœ์ ํŠธ ํŠน์ง•

  • โœ… Eureka, Gateway ๋ฅผ ํ™œ์šฉํ•œ ์„œ๋น„์Šค ๋“ฑ๋กยทํƒ์ƒ‰ ๊ตฌํ˜„
  • โœ… Kafka ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ
  • โœ… ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜ ๊ตฌํ˜„
  • โœ… DLQ ๊ธฐ๋ฐ˜ ์žฅ์•  ๋Œ€์‘ ๋ฐ ์žฌ์ฒ˜๋ฆฌ ๋กœ์ง
  • โœ… ๋ผ์ด๋” ๋งค์นญ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ (RabbitMQ, Slack, WebSocket)
  • โœ…ย ๋ผ์ด๋” ์‹ค์‹œ๊ฐ„ ์œ„์น˜ ์ถ”์  (Redis GEO, WebSocket)
  • โœ… Prometheus, Grafana ๊ธฐ๋ฐ˜ ๋ชจ๋‹ˆํ„ฐ๋ง, Slack ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ „์†ก