CS/๐ ๊ฐ์ ๋ฉด์ ์ฌ๋ก๋ก ๋ฐฐ์ฐ๋ ๋๊ท๋ชจ ์์คํ
์ค๊ณ ๊ธฐ์ด
์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น (rate limiter)ํด๋ผ์ด์ธํธ ๋๋ ์๋น์ค๊ฐ ๋ณด๋ด๋ ํธ๋ํฝ์ ์ฒ๋ฆฌ์จ(rate)์ ์ ์ดํ๊ธฐ ์ํ ์ฅ์น HTTP ํน์ ๊ธฐ๊ฐ ๋ด์ ์ ์ก๋๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ ํ์ ์ ํ API ์์ฒญ ํ์๊ฐ ์ ํ ์ฅ์น์ ์ ์๋ ์๊ณ์น(threshold)๋ฅผ ๋์ด์๋ฉด ์ถ๊ฐ๋ก ๋๋ฌํ ๋ชจ๋ ํธ์ถ์ ์ฒ๋ฆฌ๊ฐ ์ค๋จ๋จโด๏ธ ์ฌ๋ก- ์ฌ์ฉ์๋ ์ด๋น 2ํ ์ด์ ์ ๊ธ์ ์ฌ๋ฆด ์ ์์- ๊ฐ์ IP ์ฃผ์๋ ํ๋ฃจ์ 10๊ฐ ์ด์์ ๊ณ์ ์ ์์ฑํ ์ ์์- ๊ฐ์ ๋๋ฐ์ด์ค๋ก๋ ์ฃผ๋น 5ํ ์ด์ ๋ฆฌ์๋๋ฅผ ์์ฒญํ ์ ์์ - ํธ์ํฐ ๐ 3์๊ฐ ๋์ 300๊ฐ์ ํธ์๋ง ์ฌ๋ฆด ์ ์๋๋ก ์ ํ - Google docs ๐ API๋ ์ฌ์ฉ์๋น ๋ถ๋น 300ํ์ read ์์ฒญ๋ง ํ์ฉ โณ๏ธ ์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น๋ฅผ ๋๋ฉด ์ข์ ์ - DoS(Denial of Se..
Java/๐ Effective Java
34. int ์์ ๋์ ์ด๊ฑฐ ํ์
์ฌ์ฉํ๊ธฐ์ด๊ฑฐ ํ์
= ์ผ์ ๊ฐ์์ ์์ ๊ฐ์ ์ ์ํ ๋ค์, ๊ทธ ์ธ์ ๊ฐ์ ํ์ฉํ์ง ์๋ ํ์
โด๏ธ ์ด๊ฑฐ ํจํด์ ๋จ์ ํ์
์์ ๋ณด์ฅ Xํํ๋ ฅ ์ข์ง Xํ๋ฒํ ์์๋ฅผ ๋์ดํ ๊ฒ์ด๋ผ ์์์ ๊ฐ์ด ๋ฐ๋๋ฉด ํด๋ผ์ด์ธํธ๋ ๋ฐ๋์ ๋ค์ ์ปดํ์ผํด์ผ ํจ์ ์ ์์๋ ๋ฌธ์์ด๋ก ์ถ๋ ฅํ๊ธฐ ๊น๋ค๋ก์๐ ์ด๊ฑฐ ํ์
(ENUM type)์ด ๋์public enum Apple {FUJI, PIPPIN, GRANNY_SMITH}public enum Orange {NAVEL, TEMPLE, BLOOD}โณ๏ธ ์ด๊ฑฐ ํ์
์ด๊ฑฐ ํ์
์์ฒด๋ ํด๋์ค์์ ํ๋๋น ์์ ์ ์ธ์คํด์ค๋ฅผ ํ๋์ฉ ๋ง๋ค์ด public static final ํ๋๋ก ๊ณต๊ฐ๋ฐ์์ ์ ๊ทผํ ์ ์๋ ์์ฑ์๋ฅผ ์ ๊ณตํ์ง ์์ผ๋ฏ๋ก ์ฌ์ค์ finalํด๋ผ์ด์ธ..
CS/๐ ๊ฐ์ ๋ฉด์ ์ฌ๋ก๋ก ๋ฐฐ์ฐ๋ ๋๊ท๋ชจ ์์คํ
์ค๊ณ ๊ธฐ์ด
1. ๋ฌธ์ ์ดํด ๋ฐ ์ค๊ณ ๋ฒ์ ํ์ (3๋ถ ~ 10๋ถ)๋ฐ๋ก ๋ต์ ๋ด๊ธฐ๋ณด๋ค๋ ๊น์ด ์๊ฐํ๊ณ ์ง๋ฌธํ์ฌ ์๊ตฌ์ฌํญ๊ณผ ๊ฐ์ ๋ค์ ๋ถ๋ช
ํ ํ๊ธฐ์์คํ
๊ตฌ์ถ์ ํ์ํ ์ ๋ณด ๋ชจ์ผ๊ธฐ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ค ๊ธฐ๋ฅ๋ค์ ๋ง๋ค์ด์ผ ํ๋๊ฐ์ ํ ์ฌ์ฉ์ ์๋ ์ผ๋ง๋ ๋๋๊ฐํ์ฌ์ ๊ท๋ชจ๋ ์ผ๋ง๋ ๋นจ๋ฆฌ ์ปค์ง๋ฆฌ๋ผ ์์ํ๋๊ฐํ์ฌ๊ฐ ์ฃผ๋ก ์ฌ์ฉํ๋ ๊ธฐ์ ์คํ์ ๋ฌด์์ธ๊ฐ์ค๊ณ๋ฅผ ๋จ์ํํ๊ธฐ ์ํด ํ์ฉํ ์ ์๋ ๊ธฐ์กด ์๋น์ค๋ก๋ ์ด๋ค ๊ฒ์ด ์๋๊ฐโด๏ธ ์์ - ๋ด์ค ํผ๋ ์์คํ
์ค๊ณ๋ชจ๋ฐ์ผ ์ฑ ? ์น ์ฑ ? - ๋ ๋ค ์ง์๊ฐ์ฅ ์ค์ํ ๊ธฐ๋ฅ ? - ์๋ก์ด ํฌ์คํธ๋ฅผ ์ฌ๋ฆฌ๊ณ , ๋ค๋ฅธ ์น๊ตฌ์ ๋ด์ค ํผ๋๋ฅผ ๋ณผ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ๋ด์ค ํผ๋์ ์ ๋ ฌ ๊ธฐ์ค ? ๊ธฐ์ค์ด ์๋ค๋ฉด ๊ฐ์ค์น ๋ถ์ฌ ? - ์๊ฐ ์ญ์์ผ๋ก ์ ๋ ฌํ ์ฌ์ฉ์๋ ์ต๋ ๋ช ๋ช
์ ์ฌ์ฉ์์ ์น๊ตฌ๋ฅผ ๋งบ์ ์ ์๋๊ฐ ? - 50..
CS/๐ ๊ฐ์ ๋ฉด์ ์ฌ๋ก๋ก ๋ฐฐ์ฐ๋ ๋๊ท๋ชจ ์์คํ
์ค๊ณ ๊ธฐ์ด
2์ ์ ๊ณฑ์ ์๋ต์ง์ฐ ๊ฐ๋ฉ๋ชจ๋ฆฌ๋ ๋น ๋ฅด์ง๋ง ๋์คํฌ๋ ์์ง ๋๋ฆผ๋์คํฌ ํ์์ ๊ฐ๋ฅํ ํ ํผํ๊ธฐ๋จ์ํ ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ๋น ๋ฆ๋ฐ์ดํฐ๋ฅผ ์ธํฐ๋ท์ผ๋ก ์ ์กํ๊ธฐ ์ ์ ๊ฐ๋ฅํ๋ฉด ์์ถํ๊ธฐ๋ฐ์ดํฐ ์ผํฐ๋ ๋ณดํต ์ฌ๋ฌ ์ง์ญ์ ๋ถ์ฐ๋์ด ์๊ณ , ์ผํฐ๋ค ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆผ ex) ํธ์ํฐ QPS(Query Per Second)์ ์ ์ฅ์ ์๊ตฌ๋ ์ถ์ ์์๊ฐ์ ์๊ฐ active ์ฌ์ฉ์ = 3์ต ๋ช
50%์ ์ฌ์ฉ์๊ฐ ํธ์ํฐ๋ฅผ ๋งค์ผ ์ฌ์ฉํ๊ท ์ ์ผ๋ก ๊ฐ ์ฌ์ฉ์๊ฐ ๋งค์ผ 2๊ฑด์ ํธ์์ ์ฌ๋ฆผ๋ฏธ๋์ด๋ฅผ ํฌํจํ๋ ํธ์์ 10%๋ฐ์ดํฐ๋ 5๋
๊ฐ ๋ณด๊ด QPS ์ถ์ ์ผ๊ฐ active ์ฌ์ฉ์ = 3์ต x 50% = 1.5์ตQPS = 1.5์ต x 2 ํธ์/24์๊ฐ/3600์ด = ์ฝ 3500์ต๋ QPS = 2 x QPS = ์ฝ 7000 ๋ฏธ๋์ด ์ ..
CS/๐ ๊ฐ์ ๋ฉด์ ์ฌ๋ก๋ก ๋ฐฐ์ฐ๋ ๋๊ท๋ชจ ์์คํ
์ค๊ณ ๊ธฐ์ด
๋ฌด์ํ(stateless) ์น ๊ณ์ธต์น ๊ณ์ธต์ ์ํ์ ์ผ๋ก ํ์ฅํ ๋ ์ํ์ ๋ณด(์ฌ์ฉ์ ์ธ์
๋ฐ์ดํฐ)๋ฅผ ์น ๊ณ์ธต์์ ์ ๊ฑฐํด์ผ ํจ ๐ ์ํ ์ ๋ณด๋ฅผ RDB๋ NoSQL๊ณผ ๊ฐ์ ์ง์์ฑ ์ ์ฅ์์ ๋ณด๊ดํ๊ณ ํ์ํ ๋ ๊ฐ์ ธ์์ผ ํจ = stateless ์น ๊ณ์ธต ๋ง์ฝ statelessํ์ง ์๋ค๋ฉด, ๊ฐ์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ์ ์์ฒญ์ ํญ์ ๊ฐ์ ์๋ฒ๋ก ์ ์ก๋์ด์ผ ํ๋ค.๋ก๋๋ฐธ๋ฐ์๊ฐ ์ด๋ฅผ ์ง์ํ๊ธฐ ์ํด ๊ณ ์ ์ธ์
(sticky sesion) ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง ์ด๋ ๋ก๋๋ฐธ๋ฐ์์ ๋ถ๋ด์ ์ค๋ค.๊ทธ๋ฌ๋ฏ๋ก ์ฌ์ฉ์๋ก๋ถํฐ์ HTTP ์์ฒญ์ ์ด๋ค ์น ์๋ฒ๋ก๋ ์ ์ก๋ ์ ์๊ฒ ํ๊ณ , ์น ์๋ฒ๋ ์ํ ์ ๋ณด๊ฐ ํ์ํ ๊ฒฝ์ฐ ๊ณต์ ์ ์ฅ์๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ค. ์ฆ, ์ํ์ ๋ณด๋ ์น ์๋ฒ๋ก๋ถํฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ถ๋ฆฌ๋์ด ์๋ ๊ฒ์ด๋ค. ๋ฉ์์ง ํ ๋ฉ์์ง์..
CS/๐ ๊ฐ์ ๋ฉด์ ์ฌ๋ก๋ก ๋ฐฐ์ฐ๋ ๋๊ท๋ชจ ์์คํ
์ค๊ณ ๊ธฐ์ด
๋จ์ผ์๋ฒ ์ฌ์ฉ์๋ ๋๋ฉ์ธ ์ด๋ฆ(api.website.com)์ผ๋ก ์น์ฌ์ดํธ์ ์ ์ ๐ ๋๋ฉ์ธ ์ด๋ฆ์ DNS์ ์ง์ํ์ฌ IP์ฃผ์๋ก ๋ณํํ๋ ๊ณผ์ ํ์DNS ์กฐํ ๊ฒฐ๊ณผ๋ก IP ์ฃผ์ (15.125.23.214) ๋ฐํํด๋น IP ์ฃผ์๋ก HTTP ์์ฒญ์ด ์ ๋ฌ๋จ์์ฒญ์ ๋ฐ์ ์น ์๋ฒ๋ HTML ํ์ด์ง๋ JSON ํํ์ ์๋ต ๋ฐํ์น ์ดํ๋ฆฌ์ผ์ด์
: ๋น์ฆ๋์ค ๋ก์ง, ๋ฐ์ดํฐ ์ ์ฅ ๋ฑ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด์ ์๋ฒ ๊ตฌํ์ฉ ์ธ์ด(์๋ฐ, ํ์ด์ฌ) ์ฌ์ฉํ๊ณ , ํ๋ ์ ํ
์ด์
์ฉ์ผ๋ก๋ ํด๋ผ์ด์ธํธ ๊ตฌํ์ฉ ์ธ์ด(์๋ฐ์คํฌ๋ฆฝํธ, HTML) ์ฌ์ฉ๋ชจ๋ฐ์ผ ์ฑ : ๋ชจ๋ฐ์ผ ์ฑ๊ณผ ์น ์๋ฒ ๊ฐ ํต์ ์ ์ํด์ HTTP ํ๋กํ ์ฝ ์ฌ์ฉ ๐ ๋ฐํ๋ ์๋ต ๋ฐ์ดํฐ๋ก JSON ์ฌ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ฌ์ฉ์๊ฐ ๋๋ฉด ์๋ฒ ํ๋๋ก๋ ์ถฉ๋ถํ์ง ์์ ์ฌ๋ฌ ์๋ฒ๋ฅผ ๋์ด์ผ ํจ1. ์น/๋ชจ๋ฐ..
AWS
AWS Cognito๋ ?์น ๋ฐ ๋ชจ๋ฐ์ผ ์ฑ์ ์ํ ์๊ฒฉ ์ฆ๋ช
ํ๋ซํผ์ผ๋ก ์ฌ์ฉ์ ์ธ์ฆ, ๊ถํ ๋ถ์ฌ, ์ฌ์ฉ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์๊ฒ ํด์ค๋ค.ํ์ฌ ํ์์๋ OAuth2.0 access token ๋ฐ ์๊ฒฉ ์ฆ๋ช
์ ๋ํ ๊ถํ ๋ถ์ฌ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์ฌ์ฉํ๊ณ ์๋ค. ํ๋ถ์ ์์ ์ ํ๋ก์ ํธ๋ฅผ ํ์ ๋๋ Spring Security๋ฅผ ์ฌ์ฉํด ์ง์ JWT๋ฅผ ๋ฐ๊ธํ๊ณ ๊ด๋ฆฌํ๋ค. AuthenticationManager ๋๋ UserDetailsService๋ฅผ ํตํด ์ฌ์ฉ์์ ์๊ฒฉ ์ฆ๋ช
์ ํ์ธํ๊ณ , ์ธ์ฆ ์ฑ๊ณต ์ ์๋ฒ๊ฐ JWT๋ฅผ ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐํํ๋ ๋ฐฉ์์ผ๋ก ๋ง์ด๋ค. ํ์ง๋ง ์ค๋ฌด์์๋ AWS Cognito๋ฅผ ์ฌ์ฉํด JWT๋ฅผ ๋ฐ๊ธ๋ฐ๊ณ ๊ด๋ฆฌํ๊ณ ์๋ค. JWT ์์ฑ ๋ฐ ๊ฒ์ฆ ๋ก์ง์ ๊ตฌํํด์ผํ๊ณ , ๋ณด์ ๊ด..
AWS
AWS CloudFormation์ด๋ ?AWS์์ ์ธํ๋ผ๋ฅผ ์ฝ๋๋ก(Infrastructure as Code, IaC) ๊ด๋ฆฌํ ์ ์๋ ์๋น์ค์ด๋ค. CloudFormation์ ์ฌ์ฉํ๋ฉด ์ธํ๋ผ ๋ฆฌ์์ค๋ฅผ ํ
์คํธ ํ์ผ(ํ
ํ๋ฆฟ)๋ก ์ ์ํ๊ณ , ์ด๋ฅผ ํตํด AWS ๋ฆฌ์์ค(์: EC2 ์ธ์คํด์ค, S3 ๋ฒํท, RDS ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ)๋ฅผ ์๋์ผ๋ก ์์ฑ, ๊ด๋ฆฌ, ์
๋ฐ์ดํธํ ์ ์๋ค. CloudFormation ํ
ํ๋ฆฟ์ ์ฌ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๋ฅผ ์ผ๊ด๋๊ณ ๋ฐ๋ณต์ ์ผ๋ก ์์ฑ ๊ฐ๋ฅํ๋ค. ์ฆ, ์ธํ๋ผ๋ฅผ ๊ตฌ์ฑํ๋ ์๊ฐ๊ณผ ๊ณผ์ ์ ๋จ์ถ์์ผ์ค๋ค ! โณ๏ธ EC2 ์ธ์คํด์ค ์์ฑ ํ
ํ๋ฆฟ ์์ AWSTemplateFormatVersion: "2010-09-09"Description: "AWS CloudFormation Template to create ..