Stateful Web App - MyClothes.com
์ด์ ํฌ์คํ ์์๋ Stateless(๋ฌด์ํ) ์น ์ดํ๋ฆฌ์ผ์ด์ WhatIsTheTime.com ์ ๋ค๋ฃจ์๋ค.
๋จ์ํ ์๊ฐ์ ์๋ ค์ฃผ๊ณ , ์ด๋ฅผ ์ํ ์ด๋ ํ DB๋ ์ ๋ณด ๋๋ ์ธ๋ถ ์ ๋ณด๊ฐ ํ์์์๋ค.
- ์ด๋ฒ ํฌ์คํ ์์ ๋ค๋ฃจ๊ฒ ๋ ๋ด์ฉ
- ์ํ ์ ์ง ์น ์ดํ๋ฆฌ์ผ์ด์ ์ธ MyClothes.com ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค์ด๋ณด์.
- ์ฌ๋๋ค์ด ์จ๋ผ์ธ์ผ๋ก ์ท์ ์ด ์ ์๊ฒ ํด์ฃผ๊ณ , ์ฅ๋ฐ๊ตฌ๋ ๊ธฐ๋ฅ์ด ์๋ค.
- ๋์์ ์๋ฐฑ๋ง๋ช ์ ์ฌ์ฉ์๊ฐ ์ด์ฉ์ค์ด๋ค.
- ํ์ฅ ๊ฐ๋ฅํด์ผ ํ๋ฉฐ, ์ํ ํ์ฅ์ฑ์ ์ ์งํ๋ค.
- App์ ์น ํฐ์ด๋ฅผ ์ต๋ํ ๋ฌด์ํ(stateless)๋ก ์ ์งํ๊ณ ์ถ๋ค.
- ์ฅ๋ฐ๊ตฌ๋ ์ํ๊ฐ ์กด์ฌํ์ง๋ง, ์น App์ ์ต๋ํ ์ฝ๊ฒ ํ์ฅํ ์ ์์ด์ผ ํ๋ค.
- ์ฌ์ฉ์๋ค์ด ์น์ ๋๋ฌ๋ณผ ๋ ์ฅ๋ฐ๊ตฌ๋๋ฅผ ์์ด๋ฒ๋ฆฌ๋ฉด ์๋๋ค๋ ๋ป
- ์ฃผ์ ๋ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ DB์ ์ ์ฅ์ํจ๋ค.
- ์ด์ ํฌ์คํ ๊ณผ ๊ฐ์ ์ข ๋ฅ์ ์ํคํ ์ฒ๊ฐ ์๋ค.
- User, Route53, Multi AZ, ELB, ASG, ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- App์ด ELB์ ์ ๊ทผํ๊ณ , ELB๋ ์ด๋ค ์ธ์คํด์ค์ ํธ๋ํฝ์ ์ฃผ๊ณ ๋ฐ์ ์ง ์ ํด์ค๋ค.
- ์ฅ๋ฐ๊ตฌ๋๋ฅผ ์์ฑํ๊ณ , ๊ทธ ๋ค์ ์์ฒญ์ ๊ฐ์ EC2 ์ธ์คํด์ค๊ฐ ์๋๋ผ ๋ค๋ฅธ EC2 ์ธ์คํด์ค๋ก ๊ฐ๋ค.
- ๊ทธ๋ฌ๋ฉด ์ฅ๋ฐ๊ตฌ๋๊ฐ ์ฌ๋ผ์ง๊ฒ ๋๋ค.
- ์ฌ์ฉ์๋ ๋ฒ๊ทธ๋ก ์ฐฉ๊ฐํ๊ณ , ๋ค์ ์ฅ๋ฐ๊ตฌ๋๋ฅผ ๋ด๊ณ , ์ด๋ฒ์๋ 3๋ฒ์งธ EC2 ๋ก ๋ฆฌ๋ค์ด๋ ์ ๋๋ค.
- ๋ ๋ค์ ์ฅ๋ฐ๊ตฌ๋๊ฐ ์ฌ๋ผ์ง๊ฒ ๋๋ค.
- ์ฌ์ฉ์ ๋ถํธ์ ์ผ๊ธฐํ๋ค. ์ฅ๋ฐ๊ตฌ๋๊ฐ ์๊พธ ์ฌ๋ผ์ง๊ฒ ๋๊ปด์ง๊ฒ ๋๋ค.
- ๊ณ ๊ฐ ์ดํ๋ก ์ด์ด์ง๋ค.
- ํด๊ฒฐ๋ฒ
- ๊ณ ์ฐฉ๋, ์ฆ ์ธ์ ๋ฐ์ ์ฑ์ ๋์ (Session Sticky)
- ์ฌ์ฉ์ ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ค.
- NoSQL ์ฌ์ฉ (redis, dynamoDB)
- DB ์ฌ์ฉ
์๋์ ํ๋ํ๋ ์ค๋ช ํด๋ณด๋๋ก ํ๋ค.
Stickiness (Session Affinity)
์ธ์ ๋ฐ์ ์ฑ์ ๋์ ํ์ฌ, ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ ๋ฌผ๊ฑด๋ค์ด ์ฌ๋ผ์ง์ง ์๊ฒ ํด๋ณด์
- ELB ์ ๊ธฐ๋ฅ์ค ํ๋์ธ Session Stickiness ๋ฅผ ํ์ฑํ ํ๋ค.
- ์ฒซ๋ฒ์งธ ์ฌ์ฉ์๊ฐ ์ธ์คํด์ค์ ์ ์ํ์ฌ ๋ญ๊ฐ๋ฅผ ์ฅ๋ฐ๊ตฌ๋์ ๋ด๋๋ค.
- ๋๋ฒ์งธ ์์ฒญ๋ ๋์ผํ ์ธ์คํด์ค๋ก ๊ฐ๊ฒ๋๊ณ , ์ธ๋ฒ ์งธ ์์ฒญ ๋ํ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ์ ์ธ์คํด์ค๋ก ๊ฐ๊ฒ๋๋ค.
๋ชจ๋ ์์ฒญ์ด ๊ณ ์ฐฉ๋ ๋๋ถ์ ๋์ผํ ์ธ์คํด์ค๋ก ๊ฐ๊ฒ ๋ ๊ฒ์ด๋ค.
๋ค๋ง, EC2 ์ธ์คํด์ค๊ฐ ์ด๋ค ์ด์ ๋ก๋ ์ข
๋ฃ๊ฐ๋๋ฉด ์ฅ๋ฐ๊ตฌ๋๋ฅผ ์์ด๋ฒ๋ฆฌ๊ฒ ๋๋ค.
๋ค๋ง ๊ณ ์ฐฉ๋์ ์ธ์
๋ฐ์ ์ฑ ๋๋ถ์ ์กฐ๊ธ์ ๊ฐ์ ๋์๋ค.
๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ๋ฒ์ธ ์ฌ์ฉ์ ์ฟ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ๋ค์ ํด๊ฒฐํด๋ณด์.
User Cookies
EC2 ์ธ์คํด์ค๊ฐ ์ฅ๋ฐ๊ตฌ๋ ๋ด์ฉ์ ์ ์ฅํ๋ ๋์ , ์ฌ์ฉ์์ชฝ์์ ์ฅ๋ฐ๊ตฌ๋ ๋ด์ฉ์ ์ ์ฅํ๋๋ก ํ๋ ๊ฒ์ด๋ค.
- ๋ก๋ ๋ฐธ๋ฐ์์ ์ ์ํ ๋๋ง๋ค โ๋ด ์ฅ๋ฐ๊ตฌ๋์๋ ์ด๋ฐ ๊ฒ๋ค์ด ์๋ค.โ ๋ผ๊ณ ๋งํ๋ ๊ฒ์ด๋ค.
- ์น ์ฟ ํค๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋ค.
- ์ฒซ๋ฒ์งธ EC2 or ๋๋ฒ์งธ, ์ธ๋ฒ์งธ EC2 ์ ์ ์ํ๋๋ผ๋, ์ฌ์ฉ์๊ฐ ์ง์ EC2 ์ธ์คํด์ค๋ก ์ฅ๋ฐ๊ตฌ๋ ๋ด์ฉ์ ๋ณด๋ด์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ์๋ฒ๊ฐ ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ฉ์ ์ ์ ์๊ฒ ๋ฉ๋๋ค.
- ๊ฐ๊ฐ์ EC2 ์ธ์คํด์ค๊ฐ ์ด์ ์ ์์๋ ์ผ์ ์ ํ์๊ฐ ์๋ ๋ฌด์ํ ๊ฐ ๋์๋ค.
-
์ด์ ์ ์์๋ ์ผ์ ์ฌ์ฉ์(ํด๋ผ์ด์ธํธ)์ชฝ์์ ๋งํด์ฃผ๊ฒ ๋ ๊ฒ์ด๋ค.
- ๋จ์
- HTTP ์์ฒญ์ด ์ ์ ๋ ๋ฌด๊ฑฐ์์ง๊ฒ ๋๋ค.
- ์น ์ฟ ํค๋ฅผ ํตํด ์ฅ๋ฐ๊ตฌ๋ ๋ด์ฉ์ ๋ณด๋ผ ๋, ์ฅ๋ฐ๊ตฌ๋์ ๋ญ๊ฐ๋ฅผ ์ถ๊ฐํ ์๋ก ์ ์ ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ๋๋ฌธ
- ์ฟ ํค๊ฐ ๊ณต๊ฒฉ์์ ์ํด ๋ณ๊ฒฝ๋จ์ผ๋ก์จ ์ฌ์ฉ์ ์ฅ๋ฐ๊ตฌ๋๊ฐ ๊ฐ์๊ธฐ ์์ ๋ ์ ์๋ค. (๋ณด์ ์ํ ์กด์ฌ)
- ํด๊ฒฐ๋ฒ
- EC2 ์ธ์คํด์ค๊ฐ ์ฌ์ฉ์ ์ฟ ํค์ ๋ด์ฉ์ ๊ฒ์ฆํด์ผ ํ๋ค.
- ์ ์ฒด ์ฟ ํค์ ํฌ๊ธฐ๋ 4KB ์ดํ๊น์ง๋ง ๊ฐ๋ฅํด ์ฟ ํค ๋ด์๋ ์์ ์ ๋ณด๋ง ์ ์ฅ ๊ฐ๋ฅ
- ๋๋์ ๋ฐ์ดํฐ์ ์ ์ ์ฅํ ์ ์๋ค.
์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ ์ํคํ
์ฒ๋ ์ค์ ๋ก ๋ง์ ์น ์ดํ๋ฆฌ์ผ์ด์
ํ๋ ์์ํฌ์์ ์ค์ ๋ก ์ฌ์ฉํ๋ ํจํด์ด๋ค.
๊ทธ๋ฌ๋, ์๋ฒ Session ๊ฐ๋
์ ๋์
ํ์ฌ ๋ค์ํ๋ฒ ํด๊ฒฐํด๋ณด์!
Server Session
- ์ ์ฒด ์ฅ๋ฐ๊ตฌ๋๋ฅผ ์น ์ฟ ํค๋ก ๋ณด๋ด๋ ๋์ ์ ๋จ์ํ ์ธ์ ID ๋ง ๋ณด๋ธ๋ค.
- ์ฌ์ฉ์์ ๋ํ Session ID ์ด๋ค.
- ๋ฐฑ๊ทธ๋ผ์ด๋์๋ ElastiCache ํด๋ฌ์คํฐ๊ฐ ์กด์ฌํ๋ค.
- session_id ๋ฅผ ๋ณด๋ผ ๋ EC2 ์ธ์คํด์ค์๊ฒ โ์ด ๋ฌผ๊ฑด์ ์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐํ๋ค.โ ๋ผ๊ณ ๋งํ๋ค.
- ๊ทธ๋ฌ๋ฉด EC2 ์ธ์คํด์ค๋ ์ฅ๋ฐ๊ตฌ๋ ๋ด์ฉ์ ElastiCache์ ์ถ๊ฐํ๊ณ , ์ด ์ฅ๋ฐ๊ตฌ๋ ๋ด์ฉ์ ๋ถ๋ฌ์ฌ ์ ์๋
ID ๊ฐ ๋ฐ๋ก session_id ๊ฐ ๋๋ค. - ์ฌ์ฉ์๊ฐ session_id ์ ํจ๊ป ๋๋ฒ์งธ ์์ฒญ์ ๋ณด๋ด๋ฉด ์ด๋ ๋ค๋ฅธ EC2 ์ธ์คํด์ค๋ก ๊ฐ๊ฒ๋๊ณ , ๊ทธ EC2 ์ธ์คํด์ค๋
session_id ๋ฅผ ์ฌ์ฉํ์ฌ ElastiCache ๋ก๋ถํฐ ์ฅ๋ฐ๊ตฌ๋ ๋ด์ฉ์ ์ฐพ์์ Session Data๋ฅผ ๋ถ๋ฌ์ฌ ์ ์๊ฒ๋๋ค. - ๋ง์ง๋ง ์์ฒญ์ ๋ํด์๋ ๋์ผํ ํจํด์ด๋ค.
ElastiCache ์ ๋๋ค๋ฅธ ์ฅ์ ์ ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๋ค๋ ๊ฒ์ด๋ค.
์ธ์
๋ฐ์ดํฐ ์ ์ฅ์ ๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก๋ DynamoDB (NoSQL) ๊ฐ ์๊ณ , ์ DB ์ ์ ์ฅ์์ผ๋ ๋ฌด๋ฐฉํ๋ค.
ElastiCache ๊ฐ ์ ๋ณด์ ์ถ์ฒ์ด๊ณ ๊ณต๊ฒฉ์๋ค์ ElastiCache์ ๋ด๋ถ๋ฅผ ์์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ํจ์ฌ ์์ ํด์ก๋ค.
์ค์ ๋ก ๋ง์ด ์ฌ์ฉ๋๋ ์์ ํ ํจํด์ด๋ค.
์ด์ ๋ง์ง๋ง DB ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์
User Data in Database
- ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ค๊ณ ํ๋ค.
- ์ฌ์ฉ์ ์ฃผ์, ๋ฑ ๊ฐ์ธ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์ ํ๋ค.
- ๋ค์ํ๋ฒ EC2 ์ธ์คํด์ค์ ํต์ ํ ํ ๋ฐ, ์ด๋ฒ์๋ RDS ์ธ์คํด์ค์ ํต์ ํ๋ค.
- RDS ๋ ์ฅ๊ธฐ์ ์ธ ์ ์ฅ์ ์ํ ๊ฒ์ด๋ผ ์ข๋ค.
- ๊ฐ๊ฐ์ EC2 ์ธ์คํด์ค๊ฐ RDS ์ ํต์ ํ ์ ์๊ฒ ๋๋ค.
Scaling Read
- ์ฌ์ฉ์๊ฐ ๋์ด๋๊ณ , ๋๋ถ๋ถ์ ์๊ฐ์ ์น์ฌ์ดํธ๋ฅผ ๋๋ฌ๋ณด๋ฉฐ ๋ณด๋ธ๋ค.
- ๋๋ถ๋ถ Read ์ ํ์๋ฅผ ๋ง์ด ํํ๊ธฐ ๋๋ฌธ์ ์ฝ๊ธฐ๋ฅผ ํ์ฅํด์ผ ํ๋ค.
- Write ๋ฅผ ํ๋ RDS ๋ง์คํฐ๋ฅผ ์ฌ์ฉํ๊ณ ,
- Replica๊ฐ ์ผ์ด๋๋ RDS Read Replica๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ์ฆ, ๋ญ๊ฐ๋ฅผ Readํ ๋๋ Read Replica RDS ์ธ์คํด์ค๋ก ์์ฒญ์ ๋ณด๋ด์ ์ฒ๋ฆฌํ๋๋ก ํ๋ค.
- RDS ์์๋ 5๊ฐ ์ Read Replica ๋ณต์ ๋ณธ์ ๊ฐ์ง ์ ์๋ค.
- ์ด๋ RDS DB์ Read๋ฅผ ํ์ฅํ ์ ์๋๋ก ํด์ค๋ค.
Scaling Read (Alternative) - Write Through
Cache ๋ฅผ ์ฌ์ฉํ๋ ์ฐ๊ธฐ๋ชจ๋๋ ์๋ค.
- ๋ฐ์ดํฐ๋ฅผ Readํ ๋, Cache๋ฅผ ๋จผ์ ์ฝ์ด์ ์ ๋ณด๊ฐ ์๋์ง ํ์ธํ์ฌ, ์์ผ๋ฉด Cache Hit ํ๊ณ ,
์์ผ๋ฉด Cache miss ํ๋ค. - ์ด๋ Cache Miss๊ฐ ์ผ์ด๋ ๋, RDS ๋ก๋ถํฐ ์ฝ์ด ๋ค์ฌ์ Cache์ ์ ์ฅ์ํจ๋ค.
- ์ด๋ฒ์๋ ElastiCache์ ํต์ ํ ๋ ์ ๋ณด๋ฅผ ์ป๊ฒ ๋๊ณ Cache Hit ๊ฐ ๋๋ค.
- ์ฆ์ ์๋ต์ ๋ฐ์ ์ ์๋ค.
- RDS ์์ ํธ๋ํฝ์ ์ค์ผ ์ ์๋ค.
- RDS ์ CPU ์ฌ์ฉ๋์ ์ค์ด๊ณ , ๋์์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๊ฒ ๋๋ค.
- Cache ์ ์ง๋ณด์๊ฐ ํ์ํด์ง๋ค.
- ๊ฝค ์ด๋ ค์ด ์์ ์ด๋ฉฐ, App๋ด์์ ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค.
์ด์ ์ฐ๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฅ์ด ๊ฐ๋ฅํ๊ณ , ๊ฝค ๋ง์ ์ฝ๊ธฐ ์์ ์ด ์์ต๋๋ค.
Survive Disasters
์ฌํด์ ๋๋นํด์ผ ํ๋ค.
์ฌํด๋ก ์ธํ ํผํด๋ฅผ ๋ฐ์ง ์์ผ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
์ฌ์ฉ์๊ฐ Route53๊ณผ ํต์ ์ ํ๋๋ฐ, ์ด์ ์ฐ๋ฆฌ๋ Multi AZ ELB๊ฐ ์๋ค.
๊ทธ๋ฐ๋ฐ Route53 ์ ์ด๋ฏธ ๊ฐ์ฉ์ฑ์ด ๋๋ค. ๋ฌด์ธ๊ฐ๋ฅผ ๋ ํ ํ์๊ฐ ์๋ค
- ELB ๋ฅผ Multi AZ๋ก ๋ง๋ ๋ค.
- ASG ๋ Multi AZ
- RDS ์ญ์ Multi AZ ๊ธฐ๋ฅ์ด ์๋ค.
- ์ฌํด๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ์ธ๊ณ๋ฐ์ ์ ์๋ ๋๊ธฐ ๋ณต์ ๋ณธ์ด ์๋ค.
- Redis ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ElastiCache๋ Multi AZ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค.
Security Group
๋ณด์๊ทธ๋ฃน์ ๋ํด์๋ ์์ ํด์ผ ํ๋ค.
- ELB ์ชฝ ์ด๋์์๋ HTTP/HTTPS ํธ๋ํฝ์ ์ด ์ ์์ด์ผ ํ๋ค.
- EC2 ์ธ์คํด์ค ์ธก๋ฉด์์๋ ELB ๋ก๋ถํฐ ์ค๋ ํธ๋ํฝ๋ง ๋ฐ๋๋ก ์ ํํ๋ค.
- ElastiCache ์ธก๋ฉด์์๋ EC2 ๋ณด์๊ทธ๋ฃน์ผ๋ก๋ถํฐ ์ค๋ ํธ๋ํฝ๋ง ๋ฐ๋๋ก ์ ์ํด์ผ ํ๋ค.
- RDS ๋ ๋ง์ฐฌ๊ฐ์ง๋ก EC2 ๋ณด์๊ทธ๋ฃน์ผ๋ก๋ถํฐ ์ค๋ ํธ๋ํฝ๋ง ๋ฐ๋๋ก ์ค์ ํด์ผ ํ๋ค.
Summary
์ ๋ฆฌ
- ELB Sticky Session ๊ธฐ๋ฅ ์ฌ์ฉ
- Cookies ๋ฅผ ์ฌ์ฉํ์ฌ stateless ๋ฌด์ํ๋ก ๋ง๋ค๊ธฐ
- ElastiCache
- ์ธ์ ์ ์ ์ฅํ๊ธฐ ์ํด (๋ค์ด๋๋ชจDB ์ฌ์ฉ๋ ๊ฐ๋ฅ)
- RDS ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ Caching
- Multi AZ
- RDS
- ์ ์ ๋ฐ์ดํฐ ์ ์ฅ
- ์ฝ๊ธฐ ํ์ฅ์ ์ํ Read Replica ์ฌ์ฉ
- ์ฌํด์ ๋๋นํ์ฌ Multi AZ ์ฌ์ฉ
- ์๋ก ์ฐธ์กฐํ๋ ๋ณด์๊ทธ๋ฃน์ ์ํด ์ฒ ์ ํ ๋ณด์์ ์ถ๊ฐ
ํด๋ผ์ด์ธํธ / ์น ์ ํ๋ฆฌ์ผ์ด์
/ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ 3๊ฐ์ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์ด๊ฒ์ ๋งค์ฐ ๋ณดํธ์ ์ธ ์ํคํ
์ฒ์ด๋ค. ๋น์ฉ์ด ๋ค์ ์ฆ๊ฐํ๊ธด ํ์ง๋ง, ํ๋ ์น ์ํคํ
์ฒ ํ์์ด๋ฏ๋ก ๊ด์ฐฎ๋ค.
- Multi AZ ๋ฅผ ์ํ๋ค๋ฉด ๋น์ฉ์ด ๋ ์ถ๊ฐ๋์ง๋ง ์ฌํด์ ๋๋นํ ์ ์๋ค.
- ์ฝ๊ธฐ๋ฅผ ํ์ฅํ๊ณ ์ถ๋ค๋ฉด ๋น์ฉ์ ์ถ๊ฐํ๊ณ Read Replica ์ ์ ์ถ๊ฐํ๋๋ก ํ๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ