๐ Spring Boot + Nginx + AWS์์ ๋ก๋ ๋ฐธ๋ฐ์ฑ ์ ์ฉ๊ณผ ์ธ์ ์ ๋ต
๐ Spring Boot + Nginx + AWS์์ ๋ก๋ ๋ฐธ๋ฐ์ฑ ์ ์ฉ๊ณผ ์ธ์ ์ ๋ต
โ ์ค๋ฌด ํ๊ฒฝ์์ ์ ์ธ์ ์ ๋ต์ด ์ค์ํ ๊น?
์๋ฒ๊ฐ ์ฌ๋ฌ ๋์ธ ์ํ์์ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ์ธ์ ์ด ์ ์ง๋์ง ์๋ ๋ฌธ์ ๋ฐ์ ๐ฑ
Client โ [Load Balancer] โ Server A (๋ก๊ทธ์ธ๋จ)
โ [Load Balancer] โ Server B (์ธ์
์์ โ ๋ก๊ทธ์์๋จ)
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ก๋ ๋ฐธ๋ฐ์ฑ ์ค์ ๊ณผ ์ธ์ ๊ณต์ ์ ๋ต์ด ๋ชจ๋ ํ์ํฉ๋๋ค.
1๏ธโฃ Spring Boot + Nginx ํ๊ฒฝ ์ค์ ์์
๐น ๊ธฐ๋ณธ ๊ตฌ์กฐ
Nginx (Reverse Proxy, Load Balancer)
โณ Spring Boot App A
โณ Spring Boot App B
๐ง Nginx ์ค์ (Round Robin + Sticky Session)
upstream backend {
ip_hash; # Sticky Session ์ ์ง
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
๐ ip_hash;
์ค์ ์ด ํด๋ผ์ด์ธํธ IP ๊ธฐ๋ฐ์ผ๋ก ๊ณ ์ ์๋ฒ ์ฐ๊ฒฐ์ ์ ์งํ๊ฒ ํจ (Sticky Session)
2๏ธโฃ Spring Boot + Redis (์ธ์ ๊ณต์ ์ ๋ต)
Spring Boot๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ์
์ ๋ฉ๋ชจ๋ฆฌ(์๋ฒ ๋ด)์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์
๋ก๋ ๋ฐธ๋ฐ์ฑ ํ๊ฒฝ์์๋ ์ธ์
๊ณต์ ๊ฐ ์ ๋ฉ๋๋ค.
โ Redis๋ก ์ธ์ ์ ์ฅํ๊ธฐ
์์กด์ฑ ์ถ๊ฐ (build.gradle)
implementation 'org.springframework.session:spring-session-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
application.yml
spring:
session:
store-type: redis
redis:
host: localhost
port: 6379
์ด์ ๋ชจ๋ ์๋ฒ๊ฐ ๋์ผํ Redis ์ธ์ ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํจ โ ์ธ์ ๋ถ์ผ์น ํด๊ฒฐ
3๏ธโฃ AWS์์ ๋ก๋ ๋ฐธ๋ฐ์ฑ + ์ธ์ ์ ๋ต
โ AWS ELB ๊ตฌ์ฑ ์์
- ALB (Application Load Balancer) ์ฌ์ฉ
- ํ๊ฒ ๊ทธ๋ฃน์ Spring Boot ์๋ฒ๋ค์ ์ถ๊ฐ
- ๋ก๋ ๋ฐธ๋ฐ์ฑ ์๊ณ ๋ฆฌ์ฆ: ๊ธฐ๋ณธ์ Round Robin
๐ ์ธ์ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
-
Sticky Session ์ฌ์ฉ
- ALB ์ค์ ์์ ๊ณ ์ ์ธ์ (Stickiness) ์ต์ ON
- ์ฟ ํค ๊ธฐ๋ฐ์ผ๋ก ํด๋ผ์ด์ธํธ ์์ฒญ์ ๊ณ ์ ์๋ฒ๋ก ์ฐ๊ฒฐ
-
Redis ์ธ์ ์ ์ฅ (Spring Session)
โ EC2 ์ฌ๋ฌ ๋, ECS ์ฌ๋ฌ ์ปจํ ์ด๋ ๋ชจ๋ ๋์ผ Redis ์ ๊ทผ ๊ฐ๋ฅ
โจ ๋ณด๋์ค: JWT๋ฅผ ํ์ฉํ Stateless ์ธ์ฆ
โ ๊ตฌ์กฐ
Client <-> Load Balancer <-> Any Server
โณ ์๋ฒ๋ ์ธ์
์ํ๋ฅผ ๊ธฐ์ตํ์ง ์์
- ๋ชจ๋ ์์ฒญ์ JWT ํฌํจ
- ์๋ฒ๋ ํ ํฐ๋ง ๊ฒ์ฆ โ ์ธ์ ์ ์ฅ์๊ฐ ํ์ ์์
- ์ํ ํ์ฅ์ ์ต์
๐ ๋จ์ : ํ ํฐ ํ์ทจ ์ ์ํ, ๋ก๊ทธ์์ ๊ตฌํ ๋ณต์ก
๐ง ์ํฉ๋ณ ์ ๋ต ์์ฝ
์ํฉ | ์ถ์ฒ ๋ฐฉ์ |
---|---|
๋น ๋ฅธ ์ ์ฉ, ์๊ท๋ชจ | Sticky Session (Nginx ip_hash or AWS ALB stickiness) |
๊ณ ๊ฐ์ฉ์ฑ, ์ธ์ ์ ์ง ํ์ | Redis + Spring Session |
์์ Stateless ๊ตฌ์กฐ | JWT ์ธ์ฆ ๋ฐฉ์ |
๐ ๋ง๋ฌด๋ฆฌ ์์ฝ
- ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ๋คํธ์ํฌ ๋ถ์ฐ์ ๊ธฐ๋ณธ
- ์ธ์ ์ ๊ณต์ ํ์ง ์์ผ๋ฉด ๋ก๊ทธ์ธ ์ ์ง๊ฐ ์ด๋ ค์
- Redis, Sticky, JWT ๋ฑ ์ํฉ์ ๋ง๋ ์ ๋ต ์ ํ์ด ์ค์
๋๊ธ๋จ๊ธฐ๊ธฐ