Classic Architecture (1)
์ค์ ์๋ ์ ์ฌ์ฉ๋์๋ ์ํคํ ์ฒ๋ฅผ ๊ตฌ์ฑํด๋ณด์.
ํ์ฌ ๋ง์ ๊ธฐ์ ๋ค์ด ์ฌ์ฉํ๊ณ ์๋ ํ๋์ ์น ์ํคํ ์ฒ ๊ตฌ์กฐ๋ก ๋ฐ์ ์์ผ๋ณด์.
What Is The Time ๋ผ๋ ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค์ด๋ณด๋ฉฐ ์ค์ต์ ์งํํด๋ณด์
Section Introduction
- ์ด ์๋ฃจ์ ์ํคํ ์ณ๋ค์ ์ด AWS ๊ณต๋ถ์ฝ์ค์ ๊ฝ์ด๋ผ๊ณ ํ ์ ์๋ค.
- ๋ชจ๋ ๊ธฐ์ ๋ค์ด ์ด๋ป๊ฒ ๋์ํ๋์ง, ๊ฐ์ด ์ดํด๋ณด๋ ์๊ฐ์ ๊ฐ๋๋ค.
- ์ฌ๋ฌ ๊ฐ์ง ์ํ์ผ์ด์ค๋ฅผ ํตํด ์๋ฃจ์
์ํคํ
์ฒ๋ค์ ์ดํด๋ณธ๋ค.
- What Is The Time.com
- MyClothes.com
- MyWordPress.com
- Instantiating applications quickly (์ฑ์ ๋น ๋ฅด๊ฒ ๊ตฌ๋์ํค๋๋ฒ?)
- Beanstalk (์๋ผ์คํฑ ๋น์คํก)
Stateless Web App : WhatIsTheTime.com
- WhatIsTheTime.com ์ฌ์ดํธ๋ ํ์ฌ ์๊ฐ์ด ๋ช์ ์ธ์ง ์ฌ๋๋ค์๊ฒ ์๋ ค์ฃผ๋ ์ฌ์ดํธ์ด๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํ์ํ์ง ์๋ค.
- ์ฐ๋ฆฌ๋ ์๊ฒ ์์ํ๊ธธ ์ํ๊ณ downtime์ ๋ฐ์๋ค์ผ ์ ์๋ค. *downtime: ์์คํ ์ ์ด์ฉํ ์ ์๋ ์๊ฐ
- ๋ค์ดํ์์ ์ ๊ฑฐํ ์๋ก, ์์ง ๋ฐ ์ํ์ ์ผ๋ก ํ์ฅํ ํ์๊ฐ ์๊ธด๋ค.
Stateless Web App : What time is it?
๊ฐ๋จํ๊ฒ ์์ํด๋ณด์.
- User ์ t2.micro EC2 ๊ฐ ์๋ค.
- ์ฌ์ฉ์๊ฐ ์๊ฐ์ ๋ฌผ์ด๋ณธ๋ค.
-
17:30๋ถ์ด๋ผ๊ณ ๋ตํ๋ค.
- ํด๋น EC2 ๋ ๊ณ ์ IP์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค. (Elastic IP Address)
- ๋ฌด์จ ์ผ์ด ์๊ธฐ๋ฉด ์ฌ์์ํด๋ IP๊ฐ ๋ณํ์ง ์๋ ์ฅ์ ์ด ์๋ค.
- ํ๋ ฅ์ IP์ฃผ์๋ฅผ ์ฐ๊ฒฐ์ํจ๋ค.
Scaling vertically
ํด๋น ์น์ด ์ธ๊ธฐ๊ฐ ๋ง์์ ธ์ ์ฌ์ฉ์๊ฐ ๋์ด๋ฌ๋ค.
์์งํ์ฅ์ ํ๋ ์ฌ๋ก๋ฅผ ์ดํด๋ณด์.
- ์ฌ์ฉ์๊ฐ ๋ง์์ก๋ค. (= ํธ๋ํฝ์ด ์ฆ๊ฐ)
- t2.micro EC2 ๋ก๋ ๋ถํ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ๋ฒ๊ฑฐ์ ์ฑ๋ฅ์ ์ข ๋ ํฐ๊ฒ์ผ๋ก ๊ต์ฒดํ๋ค.
- ์์ง ํ์ฅ ์ด๋ผ๊ณ ํ๋ค.
- CPU, Memory ์ฌ์ฉ๋ ๋ฑ์ ๊ทผ๊ฑฐ๋ก ํ๋จํ๋ค.
- t2.micro => m5.large ์ ํ์ผ๋ก ๊ต์ฒด๋ฅผ ์ํ๋ค
- ์ธ์คํด์ค๋ฅผ ์ค์ง ์ํค๊ณ , ์ ํ์ ๋ฐ๊พธ๊ณ , ๊ทธ ํ์ ์ธ์คํด์ค๋ฅผ ๋ค์ ์์ํ๋ค.
- ํ๋ ฅ์ IP ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋์ผํ IP๋ฅผ ๊ฐ์ง๊ฒ ๋๊ณ , ์ฌ๋๋ค์ ์ฌ์ ํ App์ ์ ๊ทผ๊ฐ๋ฅํ๋ค.
- m5.large ๋ก ๋ณ๊ฒฝํ๋ ๋์ downtime์ด ๋ฐ์
- ์ฌ์ฉ์๋ค์ ์ข์ํ์ง ์๋๋ค. (ํด๊ฒฐ์ ๋ฌ์ผ๋ ์๋ ์ผ์ด์ค๊ฐ ์๋๋ค.)
Scaling horizontally (1)
ํด๋น ์น์ด ์ธ๊ธฐ๊ฐ ๋์ฑ ๋ง์์ ธ์ ์ฌ์ฉ์๊ฐ ๋ํญ ์ฆ๊ฐํ๋ค.
์ด์ ๋ ์ํ ํ์ฅ์ ํด์ผ ํ ๋์ด๋ค.
- ์ด m5.large EC2 ๋ ํ๋์ public IP๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , Elastic IP๊ฐ ์ฐ๊ฒฐ๋์ด ์๋ค.
- ๋ง์ User ๊ฐ ์ ์ ๋์ด, ๋ชจ๋๋ค ํ์ฌ ์๊ฐ์ ์์ฒญํ๋ค.
- ์ํ ํ์ฅ์ ์งํํ๋ค.
- ๋ชจ๋ m5.large EC2
- ์ด๊ฒ๋ค ๋ชจ๋ ํ๋ ฅ์ IP๊ฐ ์ฐ๊ฒฐ๋์ด ์๋ค.
- ์ฆ, 3๊ฐ์ EC2, 3๊ฐ์ ElasticIP ๊ฐ ์๊ธฐ๊ฒ ๋๋ค.
- User๋ค์ด EC2 ๋ค๊ณผ ํต์ ํ๋ ค๋ฉด, ์ด 3๊ฐ์ ElasticIP์ ์ ํํ ๊ฐ์ ์๊ณ ์์ด์ผ ํ๋ค.
- ํ๊ณ๊ฐ ์๊ธด๋ค.
- User๋ค์ ์ ์ ๋ ๋ง์ IP๋ฅผ ์์์ผํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๊ธด๋ค.
- ์ฐ๋ฆฌ๋ ๋ ๋ง์ ์ธํ๋ผ๋ฅผ ๊ด๋ฆฌํด์ผ ๋๋ ์ผ์ด ๋ฐ์ํ๋ค.
Scaling horizontally (2) - Route53
์ํํ์ฅ์ ๊ทธ๋๋ก ํ๋, ElasticIP ๋ฅผ ์ ๊ฑฐํ๋ค.
๋ง์์ง์๋ก ๊ด๋ฆฌํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ด๋ค.
Elastic IP๋ ํ ๊ณ์ ์์ Region ๋ง๋ค 5๊ฐ๊น์ง ๊ฐ์ง ์ ์๋ค.
Route53 ์ ์ด์ฉํ์!
- Elastic IP ๋ฅผ ์ ๊ฑฐํ๊ณ , Route53 ์ ํ์ฉํ๋ค.
- Route53์ ์ด์ฉํด api.whatisthetime.com ์ URL ์ ์ค์ ํ๋ค.
- TTL ์ 1์๊ฐ์ผ๋ก ์ค์ ํ๊ณ , A record ๋ก ์ค์
- A record ๋ก ์ค์ ํ๋ค๋๊ฑด, DNS ๋ก๋ถํฐ IP๋ฆฌ์คํธ๋ฅผ ๋ฐ๋๋ค๋ ์๋ฏธ์ด๋ค.
- Route53 ์ A record ๋ IP ๋ฅผ ์ฐ๊ฒฐ์์ผ์ค๋ค
- User ๋ค์ด Route53 ์๊ฒ Query ํ๋ค.
- User ๋ค์ IP ์ฃผ์๋ค์ ์ป๊ฒ ๋๋ค.
- ์ด๋ ์๊ฐ์ ๋ฐ๋ผ ๋ณํ๊ณ , Route53 ์ด ์ ๋ฐ์ดํธ๋ ๊ฒ์ด๋, ์ ํ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค.
- User ๋ค์ EC2 ์ธ์คํด์ค์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค.
- ๊ด๋ฆฌํ Elastic IP ๋ ๋์ด์ ์กด์ฌํ์ง ์๊ฒ ๋๋ค.
- ์ฆ, Route53 ์ ์ฌ์ฉํ์ฌ ์๋นํ ๊ฐ์ ์ ์ด๋ฃจ์๋ค.
Scaling horizontally (3) - adding and removing EC2 Instance
์ด๋ฒ์๋, ์ํฉ์ ๋ฐ๋ผ ์ฆ์ ์ธ์คํด์ค๋ฅผ ์ถ๊ฐํ๊ณ , ์ ๊ฑฐํ ์ ์๋๋ก ํ์ฅํ๊ณ ์ถ์ด์ก๋ค.
- ๊ฐ์ฅ ์์ชฝ EC2 ์ ๊ฑฐํ๊ฒ๋๋ฉด, ์์ชฝ ์ฌ์ฉ์๋ค์ด ์ด m5.large EC2 ์ ํต์ ์ค์ด์๋๋ฐ ์ฌ๋ผ์ก๋ค.
- TTL์ด 1์๊ฐ์ด์๊ธฐ ๋๋ฌธ์ Route53 ์ Queryํ๋ฉด ๋์ผํ ์๋ต์ 1์๊ฐ๋์ ๋ฐ๊ฒ ๋๋ค.
- ๋ฐ๋ผ์, ์ฌ์ฉ์๋ค์ด 1์๊ฐ๋์ ๊ทธ ์ธ์คํด์ค์ ์ ์ํ๋ ค ํ์ง๋ง, ์ธ์คํด์ค๊ฐ ์ฌ๋ผ์ ธ์ ์กด์ฌํ์ง ์๋ ์ํ์ด๋ค.
- User๋ค์ด 1์๊ฐ๋์ ์ธ์คํด์ค์ ์ ์์ ๋ชปํ๋ ์ํฉ์ด ๋ฐ์ํ๋ค.
- 1์๊ฐ ์ดํ์๋, ๋ค์ ์ ์์ด ๊ฐ๋ฅํ๊ฒ ์ง๋ง, ์ด๋ ๋ฐ๋์งํ์ง ์์ ๋ฐฉ๋ฒ
- ์ฐ๋ฆฌ์ App์ด ๋ค์ด๋์๋ค๊ณ ์๊ฐํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
Scaling horizontally (4) - with a load balancer
๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ถ๊ฐํ์ฌ ์์ ์ํฉ์ ํด๊ฒฐํด๋ณด์.
- Public EC2 ๋ ์ด์ ๋์ด์ ์กด์ฌํ์ง ์๋๋ค.
- Private EC2 ๊ฐ ์กด์ฌํ๊ฒ ๋๋ค.
- ์ด๋ค์ ๊ฐ์ ๊ฐ์ฉ์์ญ(AZ) ์์ ์คํ์ํจ๋ค.
- 3๊ฐ์ m5.large EC2 ๊ฐ ์๋ค.
- ์์ ๊ฐ์ด ๊ตฌ์ฑํ๋ฉด, ELB ๋ ๊ณต๊ฐ๋๊ฒ ์ง๋ง private EC2 ๋ ๋ค์ ์จ์ด์๊ฒ ๋๋ค.
- ELB ์๋ Health Check ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค.
- ํ EC2 ๊ฐ ๋ค์ด๋๊ฑฐ๋ ์๋ํ์ง ์์ผ๋ฉด ํด๋น EC2 ๋ก ํธ๋ํฝ์ ์ ์กํ์ง ์๋๋ค.
-
SG (Security Group) ์ ํ์ฉํ์ฌ, ์ด ๋ ์ฌ์ด์ ํธ๋ํฝ์ ์ ํํ๊ฒ ๋๋ค.
- Alias Record (๋ณ์นญ ๋ ์ฝ๋) ๋ฅผ ์ฌ์ฉํ์ฌ ELB ์ ์ฐ๊ฒฐํ๋ค.
- ๋ก๋ ๋ฐธ๋ฐ์๊ฐ IP์ฃผ์๋ฅผ ์ง์์ ์ผ๋ก ๋ฐ๊พธ๊ธฐ ๋๋ฌธ์ A record ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- alias record ๋ฅผ ์ฌ์ฉํ๋ฉด route53 ์ผ๋ก๋ถํฐ ELB๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋ ๊ฒ์ด๋ค.
- ์ฌ์ฉ์๋ค์ ์ด์ Route53์ DNS Query๋ฅผ ํ์ฌ ELB ์ ์ฃผ์๋ฅผ ์ป์ต๋๋ค.
- User๋ค์ ELB์ ์ ์ํ๊ณ , ELB๋ EC2 ์ธ์คํด์ค๋ก ๋ฆฌ๋ค์ด๋ ํธ ์ํจ๋ค.
- ํธ๋ํฝ์ ๊ท ํ์ ์ก๊ฒ ๋๋ค.
- ๋ก๋๋ฐธ๋ฐ์๋ก ์ด ์ธ์คํด์ค๋ค์ ์ถ๊ฐ ๋ฐ ์ ๊ฑฐํ๊ณ ์ ๋ ฌํ ์ ์์ด์ง๋ค.
- Health Check ๊ธฐ๋ฅ ๋๋ถ์ ์ฌ์ฉ์๋ค์๊ฒ downtime ๋ ์์ด์ง๋ค.
- ๋จ์
- ์๋์ผ๋ก ์ธ์คํด์ค๋ฅผ ์ถ๊ฐํ๊ณ ์ ๊ฑฐํ๋๊ฒ์ ์ด๋ ต๋ค.
- ํด๋น AZ์ ์ง์ง์ด ๋ฐ์ํ์ฌ ๋ค์ด๋๋ฉด ์ฑ์ ์ฌ์ฉํ ์ ์๊ฒ๋๋ค. (๋จ์ผ AZ ์ฌ์ฉ์ค์ด๊ธฐ ๋๋ฌธ)
- ํด๊ฒฐ
- ASG (Auto Scaling Group) ์ ํ์ฉํ๋ค.
Scaling horizontally (5) - with an Auto Scaling Group
ASG ์คํ ์ค์ผ์ผ๋ง ๊ทธ๋ฃน์ ์ฌ์ฉํ์ฌ ์์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ์.
- ์ด๋ฒ์๋ ASG ์ด private EC2 ์ ๊ด๋ฆฌํ๊ฒ ํ๋ค.
- ์ฆ, ๊ธฐ๋ณธ์ ์ผ๋ก ASG์ด ์์ฒญ์ ๋ฐ๋ผ ํ์ฅํ๋๋ก ํ๋ค. (ํธ๋ํฝ์ด ๋ง์์ง๋ฉด ํ์ฅ, ์ ์ด์ง๋ฉด ์ถ์)
-
App์ด downtime ์ด ์ฌ๋ผ์ง๊ณ , ASG ๊ณผ ELB ๋ก ์ธํด ์ํคํ ์ฒ๊ฐ ์๋นํ ์์ ์ ์ด ๋์๋ค.
- ์ง์ง์ด ๋ฐ์ํ์ฌ, ๊ฐ์ฉ์์ญ(AZ) 1๋ฒ์ด ๋ค์ด๋์๋ค.
- ์ฐ๋ฆฌ์ App๋ ์์ ํ ๋ค์ด๋๋ค.
- ์ฌ์ฉ์๋ค์ด ๋ถ๋ง์ ๊ฒช๋๋ค.
- ๊ฐ์ฉ์ฑ์ ๋์ด๋ ค๋ฉด ๋ค์คAZ ์ฌ์ฉ์ ์ถ์ฒํ๋ค.
Making our App multi-AZ
๋ค์คAZ ์ ํ์ฉํ์ฌ ์ฌ๋์ ๋๋นํ์.
- AZ1, AZ2, AZ3 ์ ๊ฐ๊ฐ 2๊ฐ, 2๊ฐ, 1๊ฐ์ EC2 ์ธ์คํด์ค๊ฐ ์๋ค.
- AZ1 ๊ฐ ๋ค์ด๋๋๋ผ๋, AZ2 AZ3 ์ด ์๊ธฐ ๋๋ฌธ์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋๋ค.
- ์ฑ์ Multi AZ ๋ก ๋ง๋ค์๊ณ , ๋์ ๊ฐ์ฉ์ฑ์ ํ๋ณดํ๋ค.
- ์ฅ์ ๋ฐ์์๋ ๋๋น๊ฐ ๋์๋ค.
๋ ๊ฐ์ ํ ์ฌ์ง๊ฐ ์๋์ง ์ฐพ์๋ณด์
- 2๊ฐ ์ AZ๊ฐ ์๋ค.
- ๊ฐ๊ฐ์ AZ ์๋ ์ต์ 1๊ฐ ์ด์์ EC2 ๊ฐ ์คํ์ค
- ์ฉ๋์ ์์ฝํ๋ฉด ์ด๋จ๊น?
- App์ ๋น์ฉ์ ์ค์ด๋๊ฒ๋ถํฐ ์์ํ๋ค.
-
1๋ ๋ด๋ด 2๊ฐ์ EC2 ๊ฐ ํญ์ ์คํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- ASG ์ ์ฉ๋์ ์ต์ํํ๊ธฐ ์ํด ์ธ์คํด์ค๋ฅผ ์์ฝํจ์ผ๋ก์จ ๋ฏธ๋์ ์๋นํ ๋น์ฉ์ ๊ฐ์ ํ ์ ์๋ค.
- ์๋ก์ด EC2๊ฐ ์คํ๋๋๋ผ๋, ์ผ์์ ์ด๋ฉฐ, ํธ๋ํฝ์ ๋ฐ๋ฅธ๊ฒ์ ๊ด์ฐฎ๋ค.
- ๊ทน๋จ์ ์ผ๋ก ๋น์ฉ์ ์ ๊ฐํ๊ธฐ ์ํด ์คํ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค.
Summary
์ด๋ฒ ํฌ์คํ ์ ํต์ฌ ์ ๋ฆฌ
๊ทนํ ์์ ์ํคํ
์ฒ๋ถํฐ ๋ค์คAZ ๋ฅผ ์ค์ ํ๊ธฐ ๊น์ง ์งํ๋ ๊ฒ์ ์ดํดํ ์ ์์ด์ผ ํ๋ค.
์ด ๊ฒ์ด ๋ฐ๋ธ์ต์ค ๊ฐ๋ฐ์, ์๋ฃจ์
์ํคํ
ํธ๋ก์ ์ฐ๋ฆฌ๊ฐ ๋์๊ฐ์ผ ํ ๋ฐฉํฅ์ด๋ค.
์๊ตฌ์ฌํญ์ด ๋ฌด์์ธ์ง ์ดํดํ๊ณ , ์ด ์๊ตฌ์ฌํญ์ ์ด๋ป๊ฒ ๋์ํด์ผ ํ๋์ง ์์์ผํ๋ค.
- ์ ๋ฆฌ
- EC2 ์ธ์คํด์ค๊ฐ public IP์ private IP๋ฅผ ๊ฐ๋ ๋ชฉ์
- Elastic IP vs Route53 vs ELB ์ ์ฌ์ฉํ ๋ ์ฅ/๋จ์ ๋ฐ ์ฐจ์ด
- Route53 TTL, A record, Alias record ์ฐจ์ด ๋ฐ ๋ณ์นญ๋ ์ฝ๋์ ๋ก๋๋ฐธ๋ฐ์ ์ฌ์ฉ
- EC2 ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํ๋๊ฒ๊ณผ ASG ์ด ๊ด๋ฆฌํ๋๊ฒ ์ฐจ์ด
- ์ฌ๋์์ ์ด์๋จ๊ธฐ ์ํ ๋ค์คAZ ์ค์
- ELB Health Check๋ฅผ ํตํด ์ฃฝ์์๋ฒ๋ก ํธ๋ํฝ ์๊ฐ๊ฒ ๋ง๋ ์ค์
- EC2 ๊ฐ ELB ๋ก๋ถํฐ์ ํธ๋ํฝ๋ง ๋ฐ๋๋ก ๋ณด์ ๊ทธ๋ฃน ๊ท์น์ ์ค์
- ๋น์ฉ์ ๊ฐ์ ์ํ ์ฉ๋ ์์ฝ (ํญ์ 2๋์ EC2 ์คํ ์, ์์ฝํ๋ฉด ๋น์ฉ ์ ๊ฐ ๊ฐ๋ฅ)
- AWS ์์์ ์ข์ ์ํคํ
์ฒ
- ๋น์ฉ
- ์์งํ์ฅ, ์ํํ์ฅ, ASG, ์ธ์คํด์ค ์์ฝ
- ์ฑ๋ฅ
- ์์ง ํ์ฅ, ELB, ASG
- ์ ๋ขฐ์ฑ
- ํธ๋ํฝ ์์ ์ ์ ๋ฌ, Route53, ELB, ASG, Multi AZ
- ๋ณด์
- SG
- ์ด์
- ์๋ํ๋ก์ธ์ค => ASG ์์ ์๋ํ
- ๋น์ฉ
๋๊ธ๋จ๊ธฐ๊ธฐ