์ค๋ฐฐ์ก์ ๋ฐฐ๋ฌ ๋ผ์ด๋๋ฅผ ์ํ ์ฃผ๋ฌธ ๋งค์นญ, ์ค์๊ฐ ์๋ฆผ, ์ธ์ผํฐ๋ธ ์ง๊ธ ๋ฐ ์๋ด ์ง์ ์๋น์ค์ ๋๋ค.
๋ฉํฐ๋ชจ๋ ์ํคํ ์ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋๊ท๋ชจ ํธ๋ํฝ์ ๊ณ ๋ คํ ๋ชจ๋ํฐ๋ง ๋ฐ ์ค์๊ฐ ์ฒ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๊ณ ๊ตฌํํ์์ต๋๋ค.
- ๋ฐฐ๋ฌ ์ด๋ฒคํธ ๋ฐ์ ์, ๊ฐ๊ฒ ์์น ๊ธฐ์ค์ผ๋ก ์ธ๊ทผ ๋ผ์ด๋๋ฅผ ํ์ํ์ฌ ๋งค์นญ ์ด๋ฒคํธ ๋ฐํ
- ๋งค์นญ ์ด๋ฒคํธ ๋ฐ์ ์, ๋ผ์ด๋๋ค์๊ฒ ์๋ฆผ ์ ์ก (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๋ก ๋ฐฐํฌ.
- โ Eureka, Gateway ๋ฅผ ํ์ฉํ ์๋น์ค ๋ฑ๋กยทํ์ ๊ตฌํ
- โ Kafka ๊ธฐ๋ฐ ๋น๋๊ธฐ ์ด๋ฒคํธ ์ฒ๋ฆฌ
- โ ๋ณด์ ํธ๋์ญ์ ๊ตฌํ
- โ DLQ ๊ธฐ๋ฐ ์ฅ์ ๋์ ๋ฐ ์ฌ์ฒ๋ฆฌ ๋ก์ง
- โ ๋ผ์ด๋ ๋งค์นญ ์ค์๊ฐ ์๋ฆผ (RabbitMQ, Slack, WebSocket)
- โ ย ๋ผ์ด๋ ์ค์๊ฐ ์์น ์ถ์ (Redis GEO, WebSocket)
- โ Prometheus, Grafana ๊ธฐ๋ฐ ๋ชจ๋ํฐ๋ง, Slack ๋ฉ์์ง๋ฅผ ํตํ ์๋ฌ ๋ฉ์์ง ์ ์ก

