๐ API Gateway
API gateway๋ api ๊ฐ ์ง๋๋ค๋๋ ํต๋ก๋ค. ์ด๊ฒ ์ ํ์ํ ๊น?
์ค๋์ API gateway ๊ฐ ์ ํ์ํ์ง์ ๋ํด์ ๊ณต๋ถํด๋ณด์๋ค.
๐ AWS API Gateway ๋ ?
API Gateway ๋ ๊ฐ๋ฐ์๊ฐ API ๋ฅผ ์์ฝ๊ฒ ์์ฑ, ๊ฒ์, ์ ์ง ๊ด๋ฆฌ, ๋ชจ๋ํฐ๋ง ๋ฐ ๋ณด์ ์ ์งํ ์ ์๋ ์๋น์ค๋ค.
AWS์์ ์ ๊ณตํ๊ณ ์์ผ๋ฉฐ, EventBridge, Lambda์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค.
< ์์ํด๋ณด๊ธฐ >
๋๋ API Gateway๋ฅผ ์ดํดํ๊ธฐ ์ํด ๋กํผ ํ ๋งํ (๋ฏธ๊ตญ ์ํ ํ์ ์ฌ์ดํธ)๊ฐ ๋ง์ดํฌ๋ก ์๋น์ค ์ํคํ ์ฒ๋ก ๊ตฌํ๋์ด์๋ค๊ณ ์์ํ๋ค.
์ฌ๋ฌ ๊ฐ๋ก ํฉ์ด์ ธ ์๋ ์๋น์ค ๊ฐ์ด๋ฐ service 2(ํ ๋งํ TV ์๋น์ค์ ๋๋ฉ์ธ) ์ ๋ชจ๋ ๊ธฐ๋ฅ์ service 1 (ํ ๋งํ ๋ฎค๋น ์๋น์ค์ ๋๋ฉ์ธ)๋ก ์ฎ๊ฒจ์ผ ํ๋ ์ํฉ์ด๋ค. service 2์ ํน์ api๋ฅผ call ํ๋ ๋ชจ๋ URL์ ๋ค ๋ฐ๊ฟ์ฃผ์ด์ผํ๋ค. ๋๋ฉ์ธ์ด ๋ณ๊ฒฝ๋์์ผ๋๊น ๋น์ฐํ ์๊ธด๋ฐ ์ด๊ฑด ์ข ๋ฒ๊ฑฐ๋กญ๋ค.
์ด ๋, ๋ฟ๋ฟํ ํฉ์ด์ ธ์๋ MSA ์๋น์ค๋ค์ API Gateway๋ก ํ ๊ตฐ๋ฐ๋ก ๋ชจ์ ๊ด๋ฆฌํ๋ค๋ฉด?
- API ๊ฒ์ดํธ ์จ์ด๋ ํ๋์ ์๋ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ฆ์ ๋๋ฉ์ธ์ด ์๋ค.
์ค๊ฐ์ API Gateway ์๋ฒ๋ก ๋ชจ์๋ค๊ฐ ๋ค์ ๋ชฉ์ ์ง๋ก ๋ป์ด๋๊ฐ๋ ๊ตฌ์กฐ๋ค. ๋๋ ์คํ๋ง์์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ์ญํ ์ ํ๋ ์๋ธ๋ฆฟ ๋์คํจ์ฒ๊ฐ ๋ ์ฌ๋๋ค. '์๋ฌธ' ์ญํ ์ ํ๊ณ ์๋ค๋ ์ ์ด ๊ณตํต์ ์ด๊ธดํ๋ค. redirecting๊ณผ ๋น์ทํ ์๋ฆฌ์ด๊ธฐ๋ ํ๋ค. ์ด์จ๋ MSA ์ํคํ ์ฒ๋ก ํ๋ก๊ทธ๋จ์ ์ด์ฉํ๊ณ ์๋ค๋ฉด ํน์ URI๋ฅผ ํ๋๋ก ํตํฉํ ๋ gateway๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋จ๊น.
ํ๋์ ์๋น์ค๊ฐ ๋ค๋ฅธ ์๋น์ค๋ก ์ด๊ดํ๋ ๋ฌธ์ ๋ก ๋์๊ฐ์ ์๊ฐํด๋ณด๋ฉด, ์๋จ์์ callํ๋ ์ชฝ์ ๊ณ ๋ คํ์ง ์๊ณ ์ค๊ฐ์ ์์นํ API Gateway ๋ง ๋ณ๊ฒฝํด์ฃผ๋ฉด๋๋ค.
API ๊ฒ์ดํธ ์จ์ด ์๋น์ค๊ฐ MSA ์ ์ ํฉํ๋ค๋ ์ด์ ๊ฐ ์ฌ๊ธฐ์ ์๋ค. MicroService์ฒ๋ผ ์ฌ๋ฌ๊ฐ์ง ์๋น์ค๋ก ํฉ์ด์ ธ์๋ RestAPI๋ฅผ ๋ฐ๋์ ํ๋์ gateway๋ก ํต๊ณผ์ํค๋ฉด์ ๊ด๋ฆฌ๋ฅผ ํธํ๊ฒ ํด์ฃผ๊ณ ๊ทธ ์ธ์ ๋ค์ํ ๋ถ๊ฐ ์๋น์ค๋ฅผ ์ฐฝ์ถํ๊ฒ ๋ง๋ ๋ค. ๋์ผํ ๊ธฐ๋ฅ์ A ๋๋ฉ์ธ์์๋ node ๋ก, B ๋๋ฉ์ธ์์๋ ์๋ฐ ์คํ๋ง์ผ๋ก ๊ตฌํํ ๋ ํ ๊ณณ์๋ง ๊ทธ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ API Gateway๋ก ๋๋๋๋ ๊ฑฐ๋ค. ๊ทผ๋ฐ ๋จ์ ๋ ์๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ ์๊ธฐ ์์ ์์ ์๋ api ๋ฅผ ํธ์ถํ๋ ค๊ณ ํ ๋์ ๋ฒ๊ฑฐ๋กญ๋ค. ๊ตณ์ด ๋ด ๋๋ฉ์ธ ์์ ์๋ ๋ก์ง์ ํธ์ถํ๋๋ฐ api gateway๋ฅผ ๊ฑฐ์น๋ ๊ฒ ์ตํต์ฑ์ด ์๋ค.
๋ณธ์ง์ ์ผ๋ก๋ ๊ฐ๋จํ์ง๋ง ๋ชจ๋ API๋ฅผ ํ๋์ API ๋๋ฉ์ธ ์์์ ๊ด๋ฆฌํด์ค๋ค ๋ผ๋ ํน์ฑ ๋๋ฌธ์ ์ฌ๊ธฐ์ ๋ถ์ผ ์ ์๋ ๋ถ๊ฐ๊ธฐ๋ฅ์ด ๋ง๋ค. ์ฌ๊ธฐ์ ํ ์ ์๋ ๊ด๋ฆฌ๋ ๋ก๊น , ์์ธ์ค ์ ์ด(๋ณด์), ๋ชจ๋ํฐ๋ง์ด๋ค.
๐ AWS API Gateway ์ข ๋ฅ
- AWS API Gateway๋ 3๊ฐ์ง ์ ํ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- HTTP API, Rest API, Websocket API
- API ์ ์ผ๊ด์ ์ผ๋ก ์ธ์ฆ์ ๋ถํ ์ ์๋ค. ์ฆ, ๊ถํ ๋ถ์ฌ ๊ฐ๋ฅํ๋ค...!
- ์ด๋ค ๋๋ฉ์ธ์์ ๋ค๋ฅธ ๋๋ฉ์ธ์ ํน์ API๋ฅผ ์์ฒญ ํ ๋, ์์ฒญ์ ํ๊ธฐ ์ options๋ผ๋ api๋ฅผ ๋จผ์ ๋ณด๋.
- ๋ด๊ฐ ์ง๊ธ ์์ฒญ์ ํ ์ ์๋์ง ์๋์ง ํ๋ฝ์ ๊ตฌํ๋ api
- ์ด๊ฒ ์ด๋์ ์ฐ์ด๋. ๋ฐ๋ก CORS(Cross-Origin Resource Sharing)
๐ CORS์ AWS API Gateway
- Cross-Origin Resource Sharing : "๋๋ฉ์ธ์ ๋๋๋ค๋ฉด์ ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ๋ค"
Cross-Origin HTTP request
- Origin์ด ๋ค๋ฅธ API๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ , 'tomatoMovie.com' ์๋ฒ ์์์ 'tomatoTV.com' ์์ ์๋ Rest API๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ
- ๋ณด์ ์์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ ์ฌ์ง๊ฐ ์๋ API ํธ์ถ (๋ง์ดํฌ๋ก ์๋น์ค)
1. ๋ค๋ฅธ ๋๋ฉ์ธ ( 'tomato.com', 'tomatoMovie.com')
2. ๋ค๋ฅธ ํฌํธ ('tomatoMovie.com', 'tomatoMovie.com/5000')
3. ๋ค๋ฅธ ํ๋กํ ์ฝ (https, http)
CORS ( Cross-Origin Resource Sharing)
- ์๋๋ ๊ฐ์ ๋๋ฉ์ธ์ด ์๋, ๋ค๋ฅธ ๋๋ฉ์ธ์ API ๋ฅผ ํธ์ถํ ์ ์๋ค.
- ์ด๋ค ๋๋ฉ์ธ์์๋ ํธ์ถํ๊ฒ ํ๊ณ ์ถ๊ฑฐ๋, ํน์ ๋๋ฉ์ธ์์๋ง ํธ์ถํ๊ฒ ํ๊ณ ์ถ๋ค๋ฉด ํด๋น ๋ถ๋ถ์ ์ค์ ํด์ค์ผํ๋ค.
- ์ ํฉํ ์ฌ์ฉ์๊ฐ ํธ์ถํ๋์ง ์ธ์ฆํ๋ ์ญํ ์ด ํ์ํ๋ค.
- OPTIONS ๋ฉ์๋ ์์ฑ์ ํตํด ์๋์ผ๋ก ๋ง๋ ๊ฒ์ด ์๋๋ผ, CORS ํ์ฑํ๋ฅผ ํตํด ์๋์ผ๋ก ๋ง๋ค์ด์ง ๊ฒ.
- ์ด๊ฒ ์ ๋ง๋ค์ด์ง๋.
- API ๋ฐฉ์์ผ๋ก get, post, put .. ์ค์ ๋ญ๋ ์ง, ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ ์ API ๊ฐ ํธ์ถ๋๋ ์ฃผ์ฒด์ ๋๋ฉ์ธ์ด ์ ๊ทผ ๊ฐ๋ฅํ ๋๋ฉ์ธ์ธ๊ฐ๋ฅผ ๊ฒ์ฌํ๊ธฐ ์ํด OPTIONS๊ฐ ์์ฑ๋์๋ค.
- ๊ทธ๋์ ๋ณธ๋ ํธ์ถํ API๋ณด๋ค ๋จผ์ ํธ์ถ๋๋ค.
'์ด๋ก > DevOps' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[AWS] CloudWatch Log Insights Query (0) | 2021.11.14 |
---|---|
[DevOps] Curl / Curl ๋ช ๋ น์ด (0) | 2021.10.31 |
[AWS] SSH๋? / SSH key / chmod (0) | 2021.10.30 |
[AWS] SSH ํค ๋ฑ๋ก ๋ฐ EC2 ์ ์ ๋ฐฉ๋ฒ (0) | 2021.10.05 |
[DevOps] WSL ์๊ฐ , ์ฌ์ฉ ์ค์ Ubuntu 20.04 LTS ์ค์น / WSL2 ์ฌ์ฉ ์ค์ / Windows Terminal ์ค์น (0) | 2021.10.05 |