1. Application Load Balancer (v2)
- Application load balancers is Layer 7 (HTTP)
- Load balancing to multiple HTTP applications across machines (target groups)
- Load balancing to multiple applications on the same machine (ex: containers)
- (๋์ผ EC2 ์ธ์คํด์ค ์์ ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ถํ๋ฅผ ๋ถ์ฐํ๋ค)
- Support for HTTP/2 and WebSocket
- Support redirects (from HTTP to HTTPS for example
- ALB are a great fit for micro services & container-based application (example: Docker & Amazon ECS)
- Has a port mapping feature to redirect to a dynamic port in ECS
- In comparison, we'd need multiple Classic Load Balancer per application
- (CLB๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์๋งํผ ํ์ํ์ง๋ง ํ๋์ ALB๋ก ๋ค์์ ์ ํ๋ฆฌ์ผ์ด์ ์ฒ๋ฆฌ ๊ฐ๋ฅ)
Routing tables to different target groups
- Routing based on path in URL (example.com/users & example.com/posts)
- ๋ ๊ฐ์ ๋ค๋ฅธ ๊ฒฝ๋ก URL์ ๋ค๋ฅธ ๋์ ๊ทธ๋ฃน์ ๋ฆฌ๋ค์ด๋ ํธ ํ ์ ์๋ค.
- Routing based on hostname in URL (one.example.com & other.example.com)
- ๋ง์ฝ ๋ก๋๋ฐธ๋ฐ์๊ฐ ๋ ๊ฐ์ ๋ค๋ฅธ ํธ์คํธ ๋ค์์ ์ ์ ๊ฐ๋ฅํ๋ค๋ฉด ์ด ๋ ๊ฐ์ ๋ค๋ฅธ ๋์ ๊ทธ๋ฃน์ ๋ผ์ฐํ
- Routing based on Query String, Headers (example.com/users?id:123&order=false)
- ์ฟผ๋ฆฌ์คํธ๋ง์ด๋ ํค๋์ ๊ธฐ๋ฐํด์ ๋ผ์ฐํ ๊ฐ๋ฅ
2. HTTP Based Traffic
ํ์ฌ ๋ ๊ฐ์ ๋
๋ฆฝ๋ ๋ง์ดํฌ๋ก์๋น์ค๊ฐ ์๋ก ๋ค๋ฅธ ์์
์ ์ฒ๋ฆฌํ๊ณ ์์ผ๋ฉฐ, ์ด ๋ ์๋น์ค๋ ์ ํ๋ฆฌ์ผ์ด์
๋ก๋ ๋ฐธ๋ฐ์(ALB)๋ฅผ ํตํด ์ฐ๊ฒฐ๋๊ณ ์๋ค.
์ฒซ ๋ฒ์งธ ๋์ ๊ทธ๋ฃน (/user ๊ฒฝ๋ก)
- ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ด๋น
- ํด๋น ์์ฒญ์ ์ฒซ ๋ฒ์งธ EC2 ์ธ์คํด์ค๋ก ๋ผ์ฐํ ๋จ
๋ ๋ฒ์งธ ๋์ ๊ทธ๋ฃน (/search ๊ฒฝ๋ก)
- ๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ด๋น
- ํด๋น ์์ฒญ์ ๋ ๋ฒ์งธ EC2 ์ธ์คํด์ค๋ก ๋ผ์ฐํ ๋จ
๐ ์ธ๋ถ์์ ๋ค์ด์ค๋ ์์ฒญ์ ALB๊ฐ ๊ฒฝ๋ก ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ๋ถํ์ฌ ๊ฐ๊ฐ์ EC2 ์ธ์คํด์ค์ ๋ง๋ ์๋น์ค๋ก ์ ๋ฌํ๋ ๊ตฌ์กฐ์ด๋ค.
3. Target Groups
- EC2 instances (can be managed by an Auto Scaling Group) - HTTP
- ECS tasks (managed by ECS itself) - HTTP
- Lambda functions - HTTP request is translated into a JSON event
- ๋๋คํจ์๋ AWS์์ ๋ฌด์๋ฒ๋ก ๋ถ๋ฆฌ๋ ๊ฒ๋ค์ ๊ธฐ๋ฐ์ด ๋๋ ํจ์์ด๋ค.
- IP Addresses - must be private IPs
- ALB can route to multiple target groups
- Health checks(์ํํ์ธ) are at the target group level
4. Query Strings/ Parameters Routing
ABL์ ๋ ๊ฐ์ ๋์ ๊ทธ๋ฃน์ด ์๋ค.
์ฒซ ๋ฒ์ฌ๋ AWS ๊ธฐ๋ฐ์ EC2 ์ธ์คํด์ค์ด๊ณ ๋ ๋ฒ์งธ ๋์ ๊ทธ๋ฃน์๋ ๋ฐ์ดํฐ ์ผํฐ ๋ด๋ถ์ ์จ ํ๋ ๋ฏธ์ค ๊ฐ์ธ ์๋ฒ์ด๋ค.
๋์ ๊ทธ๋ฃน์ด ์กด์ฌํ๊ธฐ ์ํด์๋, ๋ฑ๋ก์ ์ํด ์๋ฒ์ ์ฌ์ค IP๊ฐ ๋์ ๊ทธ๋ฃน์๊ฒ ์ง์ ๋์ด์ผ ํ๋ค.
ALB๋ฅผ ํตํด ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด์.
์ฒซ ๋ฒ์งธ ๋์ ๊ทธ๋ฃน์ผ๋ก๋ ๋ชจ๋ฐ์ผ ๊ธฐ๋ฐ ํธ๋ํฝ ์ ์ฒด๋ฅผ ๊ทธ๋ฆฌ๊ณ ๋ ๋ฒ์งธ ๋์ ๊ทธ๋ฃน์ผ๋ก๋ ๋ฐ์คํฌํ ๊ธฐ๋ฐ ํธ๋ํฝ ์ ์ฒด๋ฅผ ๋ณด๋ด๋ ์ํฉ์ด๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ด๋ ๋งค๊ฐ๋ณ์ ๋ผ์ฐํ
์ ์ฌ์ฉํ๋ฉด ๋๋ค.
URL์ ?Platform=Mobile ์ด ์๋ ๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ฆฌ๋ค์ด๋ ํ
๋๋๋ก ALB ์์ ๋ฆฌ๋ค์ด๋ ์
๋ผ์ฐํ
๊ท์น์ ๋ง๋ค ์ ์๊ณ ?Platrofm=Desktop์ด ์๋ ๊ฒฝ์ฐ ๋ ๋ฒ์ฌ ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธ ํ๋๋ก ๊ตฌ์ฑ ํ ์ ์๋ค.
5. Good to Know
- Fixed hostname (XXX.region.elb.amazonaws.com) - CLB ์ฒ๋ผ ๊ณ ์ ํธ์คํธ ์ด๋ฆ์ด ๋ถ์ฌ๋จ
- The application servers don't see the IP of the client directly
- → The true IP of the client is inserted in the header X-Forwarded-For
- → We can also get Port (X-Forwarded-Port) and proto (X-Forwarded-Proto)
If Client IP (12.34.56.78) is directly talking to a load balancer which perform something called a connection termination, and when your load balancer talks to your EC2 Instance, it's going to use a load balancer IP which is private IPs into your EC2 Instance, and So for the EC2 Instance to know the client IP, It will have to look at the extra Header in your HTTP request called X-Forwarded Prort and Protocol
์ ๋ด์ฉ์ ํ๊ธ๋ก ์๊ณ ์ถ์ผ์ ๋ถ์ ์๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์๊ธธ ๋ฐ๋๋๋ค. โผ
https://ysh2.tistory.com/120
[AWS] ALB (AWS์ ๊ด๋ฆฌํ ๋ก๋ ๋ฐธ๋ฐ์ ไธญ)
ALB(Application Load Balancer) (v2)์ ํ๋ฆฌ์ผ์ด์ ๋ก๋ ๋ฐธ๋ฐ์๋ 7๊ณ์ธต์ด๋ค.๋จธ์ ๊ฐ ๋ค์ HTTP ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ผ์ฐํ ์ ์ฌ์ฉ๋๋ค. : ์ด๋ฌํ ๋จธ์ ๋ค์ target groups(๋์ ๊ทธ๋ฃน)์ด๋ผ๋ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด๊ฒ ๋๋ค
ysh2.tistory.com
6. ALB ์ค์ต
6-1. ALB ์์ฑํ๊ธฐ
์ธ์คํด์ค ์์ฑ ํ ์ค์ตํ๋ ค๊ณ ํ๋๋ฐ ์ธ์คํด์ค๋ ๋์๊ฐ๋๋ฐ ์๋ฒ ์ ์์ด ์ ๋๋ ๋ฌธ์
์ผ๋จ ์ด ๋ฌธ์ ๋ถํฐ ํด๊ฒฐํ๊ณ ์ค์ต์ ๋์ค์ ๋ค์ ํด์ผ๊ฒ ๋ค
์ธ๋ฐ์ด๋ ๋ฃฐ์ ์ค์ ํด์ผ ํ๋๋ฐ ์์๋ฐ์ด๋๋ก ์ค์ ํด์ ์ ๋ ๊ฑฐ์์
๋จผ์ Instance A์ Instance B๋ฅผ ์์ฑํ๋ค. ์ฌ๊ธฐ์ SSH key๋ ํ์ ์๊ณ , ๋์ ๋ณด์ ๊ท์น์ ์ ํํ๋๋ฐ ์ธ๋ฐ์ด๋ ๊ท์น์ SSH๋ HTTP ํ์ฉํ๋ ๊ท์น์ ์ ํํด ์ค๋ค.
์ด์ ์ฐ๋ฆฌ๊ฐ ํ๋ ค๋ ์ค์ต์ ํ๋์ URL ๋ก ์ด ๋ EC2 ์ธ์คํด์ค์ ์ ์ํ๊ณ ๋ ์ฌ์ด์ ๋ถํ๋ฅผ ๋ถ์ฐํ๋ ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๊ฒ ํ๋ ค๋ฉด ๋ก๋ ๋ฐธ๋ฐ์(๋ถํ ๋ถ์ฐ๊ธฐ)๊ฐ ํ์ํ๋ค.
6-2. Load Balancer ์์ฑํ๊ธฐ
์ค๋ ์ค์ตํ ๋ก๋ ๋ฐธ๋ฐ์๋ Application Load Balancer์ด๋ค. ์๋ง์กด AWS ์์ ์ง์ํ๋ ๋ก๋ ๋ฐธ๋ฐ์์ ๊ฒฝ์ฐ Application Load Balancer, Network Load Balancer, Gateway Load Balancer์ด ์๋ค. ALB๋ HTTPS๋ HTTP ํ์ ์ ํธ๋ํฝ์ ์ํ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ NLB๋ UCP, UDP ํ๋กํ ์ฝ ๋๋ TCP ๊ธฐ๋ฐ์ TLS๋ฅผ ์ํ ๊ฒ์ด๋ค. (์ด๊ฑด ์ด๊ณ ์ฑ๋ฅ ํ๊ฒฝ์ ๊ตฌ์ถํ ๋ ์ฌ์ฉํ๋ค. ์ง์ฐ ์๊ฐ์ ์ต์๋ก ์ ์งํ๋ฉด์ ์ด๋น ์๋ฐฑ๋ง ๊ฑด์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ค.) ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก ๊ฒ์ดํธ์จ์ด ๋ก๋ ๋ฐธ๋ฐ์๋ GWLB๋ผ๊ณ ํ๋๋ฐ ๋ณด์, ์นจ์ ํ์ง, ๋ฐฉํ๋ฒฝ์ ํนํ๋์ด ์๋ค. ๊ทธ๋์ ๋คํธ์ํฌ ํธ๋ํฝ์ ๋ถ์ํ๊ธฐ ์ํ ๋ก๋๋ฐธ๋ฐ์๋ผ๊ณ ํ ์ ์๋ค. ๋ง์ง๋ง์ผ๋ก ์ ๋ฒ ํฌ์คํ ์ ์ธ๊ธํ CLB(Classic Load Balancer)์ ์ด์ ์๋ง์กด์์ ์ง์ํ์ง ์๋๋ค.
EC2 ๋์๋ณด๋ > Load Balancer > create load balancer > ALB > ์ฒด๊ณ(Scheme)์ ์ธํฐ๋ท ์ฐ๊ฒฐ(Internet-facing) > ์ฃผ์๋ IPv4 > Network mapping ์์ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ๋ฐฐํฌํ ๊ณณ๊ณผ ๊ฐ์ฉ ์์ญ์ ์ ํํ๋ค(๋ชจ๋ ์ ํํด ์ค) > Security Group ํญ์์๋ HTTP๋ง ํ์ฉํ๋ Inbound rule์ ๊ฐ์ง demo-sg-load-balancer ์ ํํด์ค > Listeners and routing ์์ ํ๊ฒ ๊ทธ๋ฃน ์ค์ (์ด ๋ Create target group์ผ๋ก ์ธ์คํด์ค์ ํฌํธ, ํ๋กํ ์ฝ ์ ํํด์ผ ํจ)
Listeners and routing
Default action์์ ๋์ ๊ทธ๋ฃน(target group)์ ์ ํํ๋ค.
๋์ ๊ทธ๋ฃน์ด๋ผ๋ ๊ฒ์ ๋ด๊ฐ ๋ง๋ EC2 ์ธ์คํด์ค๋ค์ ๋ปํ๋ค. ๋ผ์ฐํ
์ ํ๋ ค๋ฉด ๋จผ์ Create target group ๋งํฌ๋ฅผ ํด๋ฆญํด์ ๊ทธ๋ฃน์ ๋ง๋ค์ด์ผ ํ๋ค. ์ธ์คํด์ค๋ค์ ์ ํํ๊ณ HTTP์ 80ํฌํธ๋ก ์ง์ ํด ์ค๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ ๋ค์ ๋ EC2 ์ธ์คํด์ค๋ฅผ ๋ชจ๋ ํฌํธ 80์ ๋๊ธฐ(pending) ์ํ๋ก ์ถ๊ฐํ๋ค. ์ด๋ ๊ฒ Targets์ด ์์ฑ๋์์ผ๋ฉด ๋ค์ Listeners and routing์ผ๋ก ๋์๊ฐ์ Default action์ Forward to ์์ ํด๋น ํ๊ฒ ๊ทธ๋ฃน์ ์ ํํ๊ณ ๋ก๋ ๋ฐธ๋ฐ์ ์์ฑ์ ์๋ฃํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ด ๋์ ๊ทธ๋ฃน์ด ๋์ ๋ก๋ ๋ฐธ๋ฐ์์ 80ํฌํธ์ ์๋ ๋ฆฌ์ค๋์ ์ฐ๊ฒฐ๋๋ค.
6-2. ๋ก๋๋ฐธ๋ฐ์ DNS ๋ค์์ผ๋ก ์๋ฒ ์ ์ํ๊ธฐ
์ด๋ ๊ฒ ๋ก๋ ๋ฐธ๋ฐ์๊ฐ ์์ฑ๋๋ฉด ์๋์ ๊ฐ์ด DNS name ์ด ๋ถ์ฌ๋๋ค.
์ด DNS name์ ๋ณต์ฌํด์ ์ ํ์ด์ง์ ๋ถ์ฌ ๋ฃ๊ธฐ ํ๋ฉด ์๋ฒ์ ์ ์๊ฐ๋ฅํ๋ค.
ํ์ด์ง๋ฅผ ๊ณ์ ์๋ก๊ณ ์นจํ๋ฉด Instance A ๊ฐ ์คํ๋๊ธฐ๋ ํ๊ณ Instance B๊ฐ ์คํ๋๊ธฐ๋ ํ๋๋ฐ, ์ฆ, ๋ด๊ฐ ๋ง๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ก๋ ๋ฐธ๋ฐ์๊ฐ ๋ EC2 ์ธ์คํด์ค๋ก ์์ฒญ์ ์ฌ์ ์กํ๊ณ ์๋ ๊ฒ์ด๋ค. ์ค์ ๋ก ๋ถํ ๋ถ์ฐ์ด ์ผ์ด๋๊ณ ์๋ ๊ฒ์ด๋ค. ๋ค์ Target Group ํญ์ผ๋ก ๋์์ค๋ฉด ๋ ์ธ์คํด์ค๊ฐ ๋ชจ๋ ์ ์(healthy) ์ํ๋ก ๋จ๋ ๊ฒ์ ํ์ธ๊ฐ๋ฅํ๋ค. ์ฆ, ALB๊ฐ ๋์ ๊ทธ๋ฃน์ ํตํด ํธ๋ํฝ์ ๋ ์ธ์คํด์ค๋ก ๊ณ ๋ฅด๊ฒ ์ ์กํ๊ณ ์๋ค๋ ๋ป์ด๋ค.
๋ง์ฝ ์ฌ๊ธฐ์ ๋ ๊ฐ์ ์ธ์คํด์ค ์ค ํ๋์ ์ธ์คํด์ค๋ฅผ ์ค์งํ๋ฉด ?
์ฒซ๋ฒ์งธ๋ก ๋ง๋ ์ธ์คํด์ค์ธ My First Instance / http://54.252.158.104/ ๋ฅผ ์ค์งํ๋ค.
Target Grouop์ผ๋ก ๊ฐ๋ฉด ์ธ์คํด์ค๊ฐ ์ค์ง๋์๊ธฐ ๋๋ฌธ์ ํ๊ฒ์ ์ํ๊ฐ ๋น์ ์์ผ๋ก ๋ฐ๋ ๊ฑธ ํ์ธํ ์ ์๋ค.
์๋ํ๋ฉด ๋ ์ด์ ๋ค์ด์ค๋ ํธ๋ํฝ์ ์๋ตํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ธ์คํด์ค๊ฐ ์ค์ง๋๋ฉด Health status๋ Unused ์ํ๊ฐ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ALB ํ๋ฉด์ผ๋ก ๋์์์ ์๋ก๊ณ ์นจ ํ๋ฉด ์ ์์ ์ผ๋ก ๋์ํ๊ณ ์๋ ์ธ์คํด์ค์์๋ง ์๋ต ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ธ๋ค.
์ด๊ฒ ๋ฐ๋ก ๋ก๋ ๋ฐธ๋ฐ์์ ์ฅ์ ์ด๋ค. ํ๊ฒ์ ์ํ๊ฐ ์ ์์ธ์ง ์๋์ง ์๊ณ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ์ธ์คํด์ค๋ฅผ ๋๋ฆฌ๋ฉด ์ธ์คํด์ค์ ์ํ๊ฐ Initial (์ด๊ธฐํ) ์ํ๋ก ์ ํ๋ ํ ๋ค์ Healthy ์ํ๊ฐ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ALB ์ฐฝ์์ ์๋ก ๊ณ ์นจํ๋ฉด Instance A(http://54.252.158.104)์ Instance B(http://3.106.212.20/)์ ๊ณ ๋ฅด๊ฒ ์ฐ๊ฒฐ๋๋ค.
6-3. ๋ก๋๋ฐธ๋ฐ์์์ ์ค๋ ํธ๋ํฝ๋ง ํ์ฉํ๊ธฐ
EC2 ๋์๋ณด๋ > Security Groups > launch-wizard-1 ์ธ๋ฐ์ด๋ ๊ท์น์ ์ดํด๋ณด๋ฉด ํ์ฌ EC2 ์ธ์คํด์ค๋ก ํ์ฉ๋๋ ์ ์ผํ ํธ๋ํฝ์ ๋ชจ๋ ํธ๋ํฝ์ด๋ค. ์ด ํธ๋ํฝ์ ๋ก๋๋ฐธ๋ฐ์์์ ์ค๋ ํธ๋ํฝ๋ง ํ์ฉ์ผ๋ก ๋ฐ๊พธ๊ธฐ, ๊ธฐ์กด์ HTTP๋ฅผ ์ญ์ ํ๊ณ ์ HTTP๋ฅผ ์ถ๊ฐํ๋๋ฐ ์ด ๋ Source๋ ์ฐ๋ฆฌ๊ฐ ํ์ฉํ๋ ค๋ ๋ก๋๋ฐธ๋ฐ์์ ๋ณด์ ๊ทธ๋ฃน ์ผ๋ก ์ค์ ํด ์ค๋ค.
์ด์ Instance ์ IP์ฃผ์๋ก ์ด๋ ค ์๋ ์๋ฒ๋ฅผ ์๋ก๊ณ ์นจํ๋ฉด, ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค. (๋ฌดํ ๋ก๋ฉ) ์? ์ธ์คํด์ค์ ์ก์ธ์ค ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ธ์คํด์ค์ ์ง์ ์ก์ธ์คํ๋ ๊ฑด ์ด์ ๋ถํ๋ ์ํ๋ค. ๋ฐ๋ฉด ๋ก๋ ๋ฐธ๋ฐ์์์ ์๋ก๊ณ ์นจํ๋ฉด ๋ก๋ ๋ฐฐ ใน๋ฐ์๋ ์ฌ์ ํ ์ธ์คํด์ค์ ์ก์ธ์ค ํ ์ ์๋ค. ๋ณด์๊ทธ๋ฃน์ ์์ฑํ ๊ท์น์์ ํ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค.
6-4. Listener rules
EC2 > Load balancers > DemoALB (๋ก๋๋ฐธ๋ฐ์ ์ด๋ฆ) > Listeners ํญ > HTTP:80 listener ํด๋ฆญ
์ฌ๊ธฐ์ ๋ฆฌ์ค๋ ๊ท์น์ ์ถ๊ฐ ํ ์ ์๋ค. ๊ธฐ๋ณธ ๊ท์น์ ๋ชจ๋ ์์ฒญ์ ALB์ ๋ฐ๋ชจ ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ณด๋ด๋ผ๋ ๊ฒ์ด๋ค. ์ด ํ์ด์ง์์ Add rule์ ํด๋ฆญํด์ ์๋ก์ด ๊ท์น์ ์ถ๊ฐํ ์ ์๋ค.
์ด์ ์ปจ๋์ ๋ฃฐ์ ์ ํด์ผ ํ๋ค. Host Header๋ ๋๋ฉ์ธ ์ฃผ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด๊ณ , Path ์ต์ ์ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋ ๊ฒ์ด๋ค. /์ดํ๋ฅผ ์คํํ๋ค. HTTP ์์ฒญ ๋ฉ์๋๋ฅผ get ๋๋ post ๋ฑ ์ํ๋ ๋๋ก ์ค์ ํ ์๋ ์๋ค. ์์ค IP๋ฅผ ๊ธฐ์ค์ผ๋ก ํํฐ๋งํ๊ณ ์กฐ๊ฑด์ ์ง์ ํ ์ ์๊ณ , ์ฟผ๋ฆฌ ๋ฌธ์์ด๊ณผ HTTP ํค๋๋ ์ค์ ํ ์ ์๋ค. ์์ฃผ ๋ค์ํ ๊ธฐ๋ฅ์ด ์๋ค. ํ์ง๋ง ์ค์ต์์๋ path๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ /error ๋ก ๊ฒฝ๋ก์ง์ ์ ํด ์ค๋ค.
Action ์๋ ์ธ ๊ฐ์ง ์ต์
์ด ์๋ค. ๊ฐ ์ต์
์ ๋ชฉ์ ์ ๋ง๊ฒ ์ฌ์ฉํ๋ฉด ๋๋ค. ํธ๋ํฝ์ ์ค์ ์๋ฒ๋ก ๋ณด๋ด์ผ ํ๋ฉด "Forward",
ํด๋ผ์ด์ธํธ๊ฐ ์ URL๋ก ์ด๋ํด์ผ ํ๋ฉด "Redirect", ALB์์ ์ฆ์ ์๋ต์ ์ค์ผ ํ๋ฉด "Fixed Response"๋ฅผ ์ ํํ๋ค. ๋๋ /error ๊ฒฝ๋ก๋ก ๊ฐ๋ฉด 404 not foundm custom error! ๋ฉ์ธ์ง๊ฐ ํ์๋๋๋ก ์ค์ ํด ์ฃผ์๋ค.
1. Forward to Target Groups
์์ฒญ์ Target Group์ผ๋ก ์ ๋ฌํ๋ ๋ฐฉ์์ผ๋ก ALB (Application Load Balancer)์ NLB (Network Load Balancer)์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- ALB: HTTP/HTTPS ์์ฒญ์ ์ฌ๋ฌ Target Group์ผ๋ก ๋ณด๋ผ ์ ์์ (๊ฐ์ค์น ๊ธฐ๋ฐ ๋ถ๋ฐฐ ๊ฐ๋ฅ)
- NLB: ํ๋์ Target Group์ผ๋ก๋ง ํฌ์๋ฉ ๊ฐ๋ฅ
- ์ผ๋ฐ์ ์ผ๋ก ์๋ฒ ๋๋ ์ปจํ ์ด๋๋ก ํธ๋ํฝ์ ์ ๋ฌํ ๋ ์ฌ์ฉ๋๋ค.
- โ
์ฌ์ฉ ์์
ํน์ ๊ฒฝ๋ก(/api/*)์ ์์ฒญ์ API ์๋ฒ(Target Group 1)๋ก,
๋ค๋ฅธ ๊ฒฝ๋ก(/static/*)๋ ์ ์ ํ์ผ ์๋ฒ(Target Group 2)๋ก ์ ๋ฌ
2. Redirect to URL
์์ฒญ์ ์ง์ ๋ URL๋ก ๋ฆฌ๋๋ ์ ํ๋ ๋ฐฉ์์ด๋ค. HTTP ์๋ต ์ฝ๋๋ฅผ 301 (Permanent Redirect) ๋๋ 302 (Temporary Redirect)๋ก ์ค์ ๊ฐ๋ฅํ๋ค. ๋๋ฉ์ธ ๋ณ๊ฒฝ, HTTP → HTTPS ๋ฆฌ๋๋ ์ ๋ฑ์ ์ฌ์ฉ๋๋ค.
- โ
์ฌ์ฉ ์์
http://example.com → https://example.com (HTTPS ๊ฐ์ ์ ์ฉ)
example.com/old-page → example.com/new-page (ํ์ด์ง ์ด๋)
3. Return Fixed Response
์์ฒญ์ ํน์ ํ HTTP ์ํ ์ฝ๋ ๋ฐ ์๋ต ๋ฉ์์ง์ ํจ๊ป ์ฆ์ ์๋ตํ๋๋ก ์ค์ ํ๋ ๋ฐฉ์์ด๋ค.
์๋ฒ๊น์ง ์์ฒญ์ ์ ๋ฌํ์ง ์๊ณ , ALB์์ ์ง์ ์๋ต์ ๋ณด๋ธ๋ค. JSON, HTML ๋ฑ์ ์๋ต ๋ณธ๋ฌธ์ ์ค์ ํ ์ ์๋ค.
- โ
์ฌ์ฉ ์์
์ ์ง๋ณด์ ๋ชจ๋์ผ ๋ 503 Service Unavailable ์๋ต์ ๋ฐํํ๋ค.
ํน์ URL์ ๋ํ ์ ๊ทผ์ ์ฐจ๋จํจ (403 Forbidden ์๋ต)
๋จ์ํ ํฌ์ค์ฒดํฌ ์๋ต ์ผ๋ก๋ (200 OK)
๋ง์ง๋ง์ผ๋ก ์ฐ์ ์์๋ฅผ ์ค์ ํ ์ ์๋๋ฐ 1-50,000 ์ฌ์ด์ ๊ฐ์ ์ ๋ ฅํ๊ณ ๋ฎ์ ๊ฐ์ผ ์๋ก ์ฐ์ ์์๊ฐ ๋ฎ๋ค. ์ด๋๋ก Listener rules ์์ฑ์ ์๋ฃํ๊ณ ์ด์ ํ ์คํธ ํด ๋ณผ ์ฐจ๋ก์ด๋ค.
๋ก๋๋ฐธ๋ฐ์์ dns์ด๋ฆ์ ๋ณต์ฌํด์ ์ฃผ์์ฐฝ์ ๋ถ์ฌ๋ฃ๊ธฐํ๊ณ ๋์ ์ง์ ํ ๊ฒฝ๋ก์ธ '/error'์ ๋ถ์ฌ์ค๋ค. ๊ทธ๋ฌ๋ฉด ์๋์ฒ๋ผ ์ค์ ํด ๋ ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ๋ฐํํ๋ค. ์ค์ต ๋!
DemoALB-114116703.ap-southeast-2.elb.amazonaws.com/error