...

API Gateway ์๋น์ค
API Gateway๋ ๊ท๋ชจ์ ์๊ด์์ด API ์์ฑ, ์ ์ง ๊ด๋ฆฌ, ๋ชจ๋ํฐ๋ง๊ณผ ๋ณดํธ๋ฅผ ํ ์ ์๊ฒ ํด์ฃผ๋ ์๋น์ค์ด๋ค.
๋ง ๊ทธ๋๋ก Client์์ server๋ก ํต์ ํ ๋ ์ฌ์ฉํ๋ ๋ง์ api๋ค์ ๋๋ฌธ(๊ฒ์ดํธ์จ์ด)๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
์ฆ, API๊ฐ ์ง๋๊ฐ๋ ํต๋ก์ธ ์ ์ด๋ค.
API Gateway๋ฅผ ์ด์ฉํ๋ฉด ํตํฉ์ ์ผ๋ก ์๋ํฌ์ธํธ์ REST API๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
API ๊ฒ์ดํธ์จ์ด๋ฅผ ๋ฑ๋กํด์ฃผ๋ฉด, ๋ชจ๋ ํด๋ผ์ด์ธํธ๋ ๊ฐ ์๋น์ค์ ์๋ํฌ์ธํธ ๋์ API Gateway๋ก ์์ฒญ์ ์ ๋ฌํ์ฌ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํด ์ง๋ค. ์ฌ์ฉ์๊ฐ ์ค์ ํ ๋ผ์ฐํ ์ค์ ์ ๋ฐ๋ผ ๊ฐ ์๋ํฌ์ธํธ๋ก ํด๋ผ์ด์ธํธ๋ฅผ ๋๋ฆฌํ์ฌ ์์ฒญํ๊ณ ์๋ต์ ๋ฐ์ผ๋ฉด ๋ค์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๋ ํ๋ก์(proxy) ์ญํ ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
API Gateway ์๋น์ค๋ ๋จ์ํ api ๊ฒฝ์ ์ง ์ญํ ๋ฟ๋ง ์๋๋ผ, ์๋ํฌ์ธํธ ์๋ฒ์์ ๊ณตํต์ผ๋ก ํ์ํ ์ธ์ฆ/์ธ๊ฐ, ์ฌ์ฉ๋ ์ ์ด, ์์ฒญ/์๋ต ๋ณ์กฐ ๋ฑ์ ๋ค์ํ ๊ธฐ๋ฅ์ ํ๋ฌ๊ทธ์ธ ํํ๋ก ์ ๊ณตํ๊ณ ์๋ค.
์ด๋ฌํ ํ๋ฌ๊ทธ์ธ์ API ๊ฒ์ดํธ์จ์ด์์ ์ฌ์ฉํ๋ฉด, ๊ฐ ์๋ํฌ์ธํธ์ ์๋ฒ๋ง๋ค ์์ ๊ธฐ๋ฅ๋ค์ ๊ตฌํํ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์ ์ ์ฅ์์๋ ๊ฐ๋ฐ ๋น์ฉ์ ์ค์ผ ์ ์๋ค๋ ํจ๊ณผ๋ ์๋ค.
ํนํ API Gateway๋ฅผ ํตํด Lambda์ ์ฐ๋ํ์ฌ Serverless ์๋น์ค๋ฅผ ๊ตฌ์ถํ๋๋ฐ ๋ง์ด ์ฌ์ฉ๋๋ค.

API Gateway - ์ ๊ณต API ์ ํ
API Gateway์์ ์ ๊ณตํ๋ API๋ ๋ํ์ ์ผ๋ก 3์ข ๋ฅ๊ฐ ์๋ค.
- HTTP API : API ํ๋ก์ ๊ธฐ๋ฅ์ ๋๋ง ํ์ํ ๋ ์ ํฉ. ๋จ์ / ์ ๋ ดํ๊ณ ๋น ๋ฅด๋ค.
- REST API : API ๊ด๋ฆฌ ๊ธฐ๋ฅ, ์์ฒญ/์๋ต์ ๋ํ ์ ์ด๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ ํฉ, ๋ณต์ก / ๋น์ธ๊ณ ๋๋ฆฌ๋ค.
- WebSocket API : ์น์์ผ ์ฉ๋. ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฃผ๋ก ์ฌ์ฉํ๋ค.

HTTP API
- HTTP๋ฅผ ํต์ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ API๋ฅผ HTTP API๋ผ๊ณ ํ๋ค.
- HTTP API๋ Endpoint๋ฅผ API gateway๋ก ํ์ฉํ์ฌ HTTP ์์ฒญ์ ํตํด์ ์๋ฒ์ ์ ๊ทผํ ์ ์๋๋ก ๋ง๋ค์ด์ค๋ค.
- HTTP API๋ ๋ฐ์ดํฐ๋ง ์ฃผ๊ณ ๋ฐ๊ณ UI ํ๋ฉด์ด ํ์ํ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ๋ณ๋๋ก ์ฒ๋ฆฌํ๋ค. ๋๊ฒ ์ฑ/์น/์๋ฒ to ์๋ฒ์์ ์ฌ์ฉ๋๋ค.
- ๋๋ถ๋ถ์ Web API๊ฐ HTTP API๋ก ์ด๋ฃจ์ด์ง๊ณ ์๋ค.

REST API
- REST API๋ HTTP API์ ์ฌ๋ฌ๊ฐ์ง ์ ์ฝ ์กฐ๊ฑด์ด ์ถ๊ฐ๋ ํํ์ด๋ค.
- ์์์ ์๋ณ
- ๋ฉ์์ง๋ฅผ ํตํ ๋ฆฌ์์ค ์กฐ์
- ์๊ธฐ์์ ์ ๋ฉ์ธ์ง
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ์ ๋ํ ์์ง์ผ๋ก์ ํ์ดํผ๋ฏธ๋์ด
- REST๋ ์น ์๋น์ค์ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋๋ฐ ํ์ฉ๋๋ ํจํด์ด๋ฉฐ ์์ 4๊ฐ์ง ์ ์ฝ์กฐ๊ฑด์ ๋ง์กฑํด์ผ RESTFUL ํ๋ค๋ผ๊ณ ๋งํ ์ ์๋ค.
- ๋ํ์ ์ผ๋ก CRUD ๋ฉ์๋ ๋์์ ์ผ์ปซ๋๋ค. CREATE(post), READ(get), UPDATE(put), DELETE(delete)
- ๊ทธ๋ฐ๋ฐ ์ด๋ฐ ๋ถ๋ถ์ ์๋ฒฝํ๊ฒ ์งํค๋ฉด์ ๊ฐ๋ฐํ๋ ๊ฒ์ ํ์ค์ ์ผ๋ก ์ด๋ ต๊ณ , ๋ ์ถ๊ฐ ๊ฐ๋ฐ ๋น์ฉ๋๋น ํจ๊ณผ๊ฐ ์๋ ๊ฒ๋ ์๋์ด์, ์ด๋ฏธ ๋ง์ ์ฌ๋๋ค์ด ํด๋น ์กฐ๊ฑด์ ์งํค์ง ์์๋ REST API๋ผ๊ณ ํ๊ธฐ ๋๋ฌธ์, HTTP API๋ REST API๋ฅผ ๊ฑฐ์ ๊ฐ์ ์๋ฏธ๋ก ์ฌ์ฉํ๊ณ ์๋ ํ์ค์ด๋ค. (๋ฌผ๋ก ์๊ฒฉํ๊ฒ๋ ๋ค๋ฅด๋ค)

WEBSOCKET API
- ์์ฒญ์ ๋ฐ๊ณ ์๋ตํ๋ REST API์ ๋ฌ๋ฆฌ WebSocket API๋ ํด๋ผ์ด์ธํธ ์ฑ๊ณผ ๋ฐฑ์๋ ๊ฐ์ ์๋ฐฉํฅ ํต์ ์ ์ง์ํ๋ค.
- ์น ์์ผ์ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์ ์๋ฒ ์ฌ์ด์ ์ธํฐ์กํฐ๋ธ ํต์ ์ธ์ ์ ์ค์ ํ ์ ์๊ฒ ํ๋ ๊ณ ๊ธ ๊ธฐ์ ์ด๋ค.
- ์ฑํ ์ฑ ๋ฐ ์คํธ๋ฆฌ๋ฐ ๋์๋ณด๋์ ๊ฐ์ ์ค์๊ฐ ์๋ฐฉํฅ ํต์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ์ฌ ๋ฐฑ์๋ ์๋น์ค์ ํด๋ผ์ด์ธํธ ๊ฐ์ ๋ฉ์์ง ์ ์ก์ ์ฒ๋ฆฌํ๊ธฐ์ํด ์ง์์ ์ธ ์ฐ๊ฒฐ์ ์ ์งํ๋ค.
[WEB] ๐ ์น ์์ผ (Socket) ์ ๋ฆฌ (์ญ์ฌ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ)
โ ์น ๊ฐ๋ฐ์ ์ฒ์ ๋ฐฐ์ฐ๊ธฐ ์์ํ๋ค๋ฉด ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ํต์ ์ ๋ชจ๋ HTTP ํ๋กํ ์ฝ๋ง ์ด์ฉํด์ ์ด๋ฃจ์ด์ง๋ค๊ณ ์๊ฐํ ์ ์์ต๋๋ค. ํ์ง๋ง ์น ๊ฐ๋ฐ์ ํ๋ฉด์ ์ฑํ , ๊ฒ์, ์ฃผ์ ์ฐจํธ ๋ฑ์ ์ค์
inpa.tistory.com

API Gateway - ์๊ธ ์ ์ฑ
API Gateway๋ ๋๋ค์ ๊ฐ์ด ์๋ฒ๋ฆฌ์ค ์๋น์ค์ด๋ฉฐ, ์์ ํ API ํธ์ถ์ ๋ํด์๋ง ์ง๋ถํ๋ค.
๋ค๋ง HTTP API / REST API / WEBSOCKET API ๊ฐ๊ฐ ๋ชจ๋ ์๊ธ๋๊ฐ ๋ค๋ฅด๋ค.
ํ๋ฆฌํฐ์ด ๊ณ์ ์ 1๋ ๋์ ๋งค๋ฌ 3๊ฐ์ API๋ง๋ค 100๋ง ๊ฑด์ฉ ๋ฌด๋ฃ๋ก ์ ๊ณต๋๋ค.
๋ง์ผ ์๋ณ ํธ์ถ ์๊ฐ 100๋ง ๊ฐ๋ฅผ ์ด๊ณผํ๋ ๊ฒฝ์ฐ, API Gateway ์ฌ์ฉ ์๊ธ์ด ์ฒญ๊ตฌ๋๋ค.
Amazon API Gateway ์๊ธ | API ๊ด๋ฆฌ | Amazon Web Services
aws.amazon.com



API Gateway ์ค์ ์ฌ์ฉ (HTTP API)
HTTP API ๊ฒ์ดํธ์จ์ด ์์ฑ
API ๊ฒ์ดํธ์จ์ด ์ฝ์ ๋ฉ๋ด๋ก ์ด๋ํ ๋ค, API ์์ฑ ๋ฒํผ์ ๋๋ฅธ๋ค.




์ด๋ ๊ฒ API ๊ฒ์ดํธ์จ์ด ์์ฑ์ ์๋ฃํ๋ค.
ํ๋จ์ ์คํ ์ด์ง ์ด๋ฆ ์ชฝ์ ์ฃผ์๊ฐ ๋ฐ๋ก api ๋๋ฌธ ์ญํ ์ ํ ๋ํ url ์๋ํฌ์ธํธ ์ฃผ์์ธ ๊ฒ์ด๋ค.
ํ์ฌ๋ API ๊ฒ์ดํธ์จ์ด์ ์๋ฌด ๊ฒฝ๋ก๋ ์ค์ ํ์ง ์์๊ธฐ ๋๋ฌธ์ ์๋ํฌ์ธํธ url์ ์ ์ํด๋ ํ์ฌ๋ NOT FOUND๊ฐ ๋ฐ ๊ฒ์ด๋ค.
์ด์ ๋ผ์ฐํ ์ ์ค์ ํด๋ณด์.

HTTP API ๊ฒ์ดํธ์จ์ด ๊ฒฝ๋ก ์ค์

๋ค์๊ณผ ๊ฐ์ด ์๋ฒ๋ก ์์ฒญ์ด ๋ค์ด์ค๋ method์ path๋ฅผ ์ค์ ํด ์ค์ ์๋ค.
์๋ฅผ๋ค์ด method๋ GET ๊ทธ๋ฆฌ๊ณ ๊ฒฝ๋ก๋ /users ๋ก ํ๋ฉด, api์๋ํฌ์ธํธ/users๋ก GET ์์ฒญ์ด ๋ค์ด์จ ๊ฒฝ์ฐ ์ด๋ ํ ์๋ฒ ์ฃผ์ (๋์ค์ ์ค์ )๋ก ์ฐ๊ฒฐํด ์ฃผ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค.

๊ฒฝ๋ก๋ฅผ ์ค์ ํด์คฌ์ผ๋, ์ด์ ํด๋น ๊ฒฝ๋ก์ ์ค์ง์ ์ผ๋ก ์ด๋ ๋๋ฉ์ธ์ผ๋ก ์ฐ๊ฒฐํ ์ง ํตํฉ ์ฐ๊ฒฐ์ ์ค์ ํด์ค๋ค.




ํตํฉ ๊ฒฝ๋ก ์ค์ ์ ๋ง์ณค์ผ๋ฉด, ๋ธ๋ผ์ฐ์ ์ API ๊ฒ์ดํธ์จ์ด ์๋ํฌ์ธํธ ์ฃผ์์ ๊ฒฝ๋ก๋ฅผ ์ณ์ ์ ์ํด๋ณด์.
๋ค์ด๋ฒ ์ฌ์ดํธ๋ก ์ ๋ผ์ฐํ ๋จ์ ํ์ธ ํ ์ ์๋ค.
https://meqigwf7f2.execute-api.ap-northeast-2.amazonaws.com/topics

๋๋ฒ์งธ ๊ฒฝ๋ก ์ค์ ๋ ์ถ๊ฐ๋ก ํด๋ณธ๋ค. ์ด๋ฒ์ ๋ค์ ์ฌ์ดํธ๋ก ๋ผ์ฐํ ๋๋๋ก ์ค์ ํด์ค๋ค.



๋ง์ฝ EC2์ ์ฐ๊ฒฐํ๊ณ ์ถ๋ค๋ฉด, instance์ public ์ฃผ์๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.
๋ง์ฝ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ์ฌ์ฉํด์ ELB๋ฅผ ์์ฑํ๋ค๋ฉด ELB DNS ์ฃผ์๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.
API Gateway๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ ๋ฐฐํฌ๊ฐ ๋๋ค. ์๋๋ฐฐํฌ๋ฅผ ์ํ์ง ์๋ ๊ฒฝ์ฐ ๋ฐฐํฌ/์คํ ์ด์ง ๋ถ๋ถ์ ์ค์ ํด์ฃผ๋ฉด ๋๋ค.
API Gateway ์ค์ ์ฌ์ฉ (REST API)
์ด๋ฒ์๋ ์ข๋ ๋ณต์กํ๋ฉด์๋ ๊ท์น์ ์ผ๋ก API๋ฅผ ์ด์ฉํ ์ ์๋ REST API ๊ฒ์ดํธ์จ์ด๋ฅผ ์์ฑํด๋ณด์.
REST API ๊ฒ์ดํธ์จ์ด ์์ฑ


[์๋ํฌ์ธํธ ์ ํ]
์ง์ญ : ํน์ ๋ฆฌ์ (ap-northeat-2) ์์์ ์ฌ์ฉ
์ต์ ํ๋ ์์ง : CloudFront๋ฅผ ์ฌ์ฉ (์ผ๋ฐ์ ์ธ ์ธํฐ๋ท ์)
ํ๋ผ์ด๋น : AWS ๋ด VPC์์๋ง ์ ๊ทผ ๊ฐ๋ฅ
REST API ๊ฒ์ดํธ์จ์ด ๊ฒฝ๋ก ์ค์
API๋ฅผ ์์ฑํ๋ฉด ์์ HTTP API์๋ ๋ฌ๋ฆฌ REST API๋ ๊ตฌ์ฑ ํ๋ฉด์ด ์ฝ๊ฐ ๋ณต์กํ๊ฒ ๋์ด์๋ค. (HTTP API๋ณด๋ค ์ ๊ณต ๊ธฐ๋ฅ์ด ๋ง์์ ๊ทธ๋ ๋ค)
์ฐจ๊ทผ์ฐจ๊ทผ ๋ฐ๋ผ์ ๋ณด์.
๋จผ์ ์์ ๋ฉ๋ด๋ฅผ ๋๋ฌ ๋ฆฌ์์ค ์์ฑ์ ํ๋ค. ๋ฆฌ์์ค๋ ์ค์ api๋ฅผ ํธ์ถํ๋ api url์ ์ ์ํ๋ค๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.


๋๋ฒ์งธ path๋ฅผ ์ค์ ํ๊ธฐ ์ํด ๋๋ค์ ๋ฆฌ์์ค ์์ฑ์ ํด์ค๋ค.


๋ฆฌ์์ค ๊ฒฝ๋ก ์ชฝ์ {userid} ์ ๊ฐ์ด ์ค๊ดํธ๋ก ๋ฌถ์ด ์คฌ๋๋ฐ, ์ค๊ดํธ๋ก ๋ฌถ์ด์ฃผ๋ฉด ๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ๋ก์ ์ฌ์ฉํ ์ ์๋ค.
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ๋, ์๋ฅผ๋ค์ด ์๋ URL ๊ฒฝ๋ก์ ๊ฐ์ด
http://localhost/hello/12
http://localhost/hello/667
http://localhost/hello/55
์๋น์ค ํน์ฑ์ ๋ค์ ๊ฒฝ๋ก๊ฐ ๊ณ ์ ๋์ด์์ง ์๊ณ , ์ฌ๋ฌ๊ฐ์ ๊ฒฝ๋ก๊ฐ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ด๋ค์ ๋ฌถ๋ ์ผ์ข ์ ๋ณ์ ์ญํ ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
๋๊ฐ์ ๊ฒฝ๋ก๋ฅผ ์ค์ ํด ์คฌ์ผ๋ ์ด์ ์์ฒญํ ๋ฉ์๋ ์ค์ ์ ํด์ค๋ค.



ํตํฉ ์ ํ์ผ๋ก HTTP๋ฅผ ์ ํํ๊ณ , ์๋ํฌ์ธํธ URL์๋ ์์ฒญ์ ๋ณด๋ผ ๋ชฉ์ ์ง๋ฅผ ์ค์ ํ๋ค.
- https://api.github.com/users/{userid}
์ url์ ๊นํ์์ ๋ฌด๋ฃ๋ก ์ ๊ณตํ๋ api๋ก์, {userid} ๋ถ๋ถ์ ๊นํ ํ๋กํ ๋๋ค์์ ์ ๊ณ ์์ฒญํ๋ฉด ํด๋น ๊นํ ํ๋กํ ์ ๋ณด๋ฅผ json์ผ๋ก ๋ฐํํด์ค๋ค.
REST API ๊ฒ์ดํธ์จ์ด ํ ์คํธ ๋ฐ ๋ฐฐํฌ
๋ฉ์๋ ๋ฑ๋ก์ด ์๋ฃ๋๋ฉด, ์๋์ ๊ฐ์ ๋ฉ์๋ ์คํ ํ๊ฒฝ์ผ๋ก ์ ๊ทผ๋๋ค.
์ด ํ๋ฉด์์๋ ํ ์คํธ ๋ฐ ๊ฐ์ข HTTP Request๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
์ข์ธก์ ๋ฒ๊ฐ๋ชจ์์ ํ ์คํธ ๋ฒํผ์ ํด๋ฆญํ์ฌ ํ ์คํธ๋ฅผ ์งํํด๋ณด์.

{userid} ๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ์ ๋๋ค์ ์๋ฌด๊ฑฐ๋ ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋จ์ ํ ์คํธ ๋ฒํผ์ ํด๋ฆญํ๋ฉด, ์ฐ์ธก ์ด์ ๋ํ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ์ด ์ฌ์ ์ ํ ์คํธ ํ ์ ์๋ค.
๊ฒฐ๊ณผ์๋ ์์ฒญ URL, ์ํ, ์ง์ฐ ์๊ฐ ๊ทธ๋ฆฌ๊ณ HTTP Response๊ฐ ๋ํ๋๋ค.

ํ ์คํธ๊น์ง ์๋ฃ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑ๋ REST API๋ฅผ API Gateway์ ์ ์ ๋ฐฐํฌ ํ๋ค.
์์ > API ๋ฐฐํฌ๋ฅผ ์ ํํ์ฌ API๋ฅผ ์คํ ์ด์ง์ ๋ฑ๋กํ๋ค.


์คํ ์ด์ง ๋ฑ๋ก์ด ์๋ฃ๋๋ฉด, ์๋จ์ ์ ์์ผ๋ก ๋ฐํ๋ REST API Gateway ์๋ํฌ์ธํธ URL์ด ๋จ๊ฒ ๋๋ค.

์ด API ๊ฒ์ดํธ์จ์ด ์๋ํฌ์ธํธ URL๋ก /hello/jeff ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๊ณ ๋ธ๋ผ์ฐ์ ์ ์์ฒญํ๋ฉด ์ค์ ๋ก ๊นํ ํ๋กํ ์ ๋ณด๊ฐ ์๋ต ๋ฐ๊ฒ ๋๋ค.
์ด๋ก์จ HTTP API๋ณด๋ค๋ ๋ณต์กํ์ง๋ง ์ข๋ RESTFUL ํ๊ฒ ๊ท์น์ ์ผ๋ก API๋ฅผ ์ด์ฉํ๋ REST API ์ค์ ์ ๋ํด ์์๋ณด์๋ค.

์ด ๊ธ์ด ์ข์ผ์ จ๋ค๋ฉด ๊ตฌ๋ & ์ข์์
์ฌ๋ฌ๋ถ์ ๊ตฌ๋
๊ณผ ์ข์์๋
์ ์์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค.