1. Setting Up CORS and Integration on AWS API Gateway Using CloudFormation
https://dzone.com/articles/setting-up-cors-and-integration-on-aws-api-gateway
Setting Up CORS and Integration on AWS API Gateway - DZone
Learn about the significance of CORS, authorization including bearer tokens, and the advantages of selecting optional methods in place of standard GET requests.
dzone.com
[ ์์ฝ ]
CORS์ ์ค์์ฑ
- ์ฌ๋ฌ ๋๋ฉ์ธ์์ ์ก์ธ์ค๊ฐ ํ์ํ ๋ API ๊ฐ๋ฐ์ ๋งค์ฐ ์ค์ํ๋ค(CORS๋ ๋ฌด๋จ ์ก์ธ์ค๋ฅผ ๋ง๋๋ฐ ํ์์ )
- API์ ์ํธ ์์ฉํ ์ ์๋ ํน์ ๋๋ฉ์ธ์ ๊ตฌ๋ถํจ์ผ๋ก์จ ์ ํจํ cross-origin ์์ฒญ๋ง ํ์ฉํ์ฌ CSRF ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋ณดํธํ ์ ์๋ค
- ๋ณด์(Security): ๋๋ฉ์ธ ์ก์ธ์ค๋ฅผ ๊ท์ ํ์ฌ ์ ํดํ cross-origin ์์ฒญ์ผ๋ก๋ถํฐ API๋ฅผ ๋ณดํธ
- ์ ์ฐ์ฑ(Flexibility): ํน์ ๋๋ฉ์ธ์ ๋ํด ๋ค์ํ ์ก์ธ์ค ์์ค(GET, POST, DELETE)์ ํ์ฑํ
- ์ฌ์ฉ์ ๊ฒฝํ(User experience): ์ค๋ฅ ๋ฐ์ ์์ด ๋๋ฉ์ธ ์ ์ฒด์ ๋ฆฌ์์ค์ ์ํํ๊ฒ ์ก์ธ์ค ํ ์ ์๋ค
GET vs Optional Methods(POST, PUT, OPTIONS)
CORS ์ค์ ์ ์ํด GET ๋์ Optional Methods๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ํ์์ฑ์ ์ดํดํด์ผ ํ๋ค!
| ์ด์ | GET | OPTIONAL METHODS (POST, PUT, OPTIONS) |
| ๋ณด์ (Security) | GET ์์ฒญ์ URL์ ํ์๋์ด ์บ์๋ ์ ์์ → ๋ฏผ๊ฐํ ์ ๋ณด์ ๊ฒฝ์ฐ ๋ณด์์ฑ์ด ๋ฎ์ |
POST/PUT์ URL์ ํ์๋์ง ์์ ์บ์๋์ง ์์ → ๋ฏผ๊ฐํ ๋ฐ์ดํฐ์ ๋ณด์์ ๊ฐํํ ์ ์์ |
| ์ ์ฐ์ฑ (Flexibility) | URL์ ํตํ ๋ฐ์ดํฐ ์ ์ก์ด ์ ํ๋์ด, ์ ์กํ ์ ์๋ ๋ฐ์ดํฐ์ ๋ณต์ก์ฑ์ ํฌ๊ธฐ๊ฐ ์ ํ ๋จ → ๋จ์ํ ๋ฐ์ดํฐ๋ง ์ ์ก ๊ฐ๋ฅ |
request body์ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์กํ ์ ์์ → ์ ์ฐ์ฑ์ด ๋ ๋์ |
| ๋ฉฑ๋ฑ์ฑ๊ณผ ์์ ์ฑ (Idempotency and Safety) |
๋ฉฑ๋ฑ์ ์ด๊ณ ์์ ํ๋ค → ๋ฆฌ์์ค์ ์ํ๋ฅผ ์์ ํ์ง ์์ |
POST/PUT์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์์
์ ์ฌ์ฉ๋๊ณ , OPTIONS๋ OPTIONAL METHODS๋ฅผ ํ์ธํ๋๋ฐ ์ฌ์ฉ ๋จ |
| CORS Preflight | GET ์์ฒญ์ ์ผ๋ฐ์ ์ผ๋ก CORS ์ฌ์ ๊ฒ์ฌ์ ์ฌ์ฉ๋์ง ์์ | OPTIONS ์์ฒญ์ CORS ์ฌ์ ๊ฒ์ฌ์ ํ์์ ์ด๋ฉฐ, ์ค์ ์์ฒญ์ด ์ํ๋ ์ ์๋์ง๋ฅผ ํ์ธ |
*๋ฉฑ๋ฑ์ฑ: ์ด๊ธฐ ์ ์ฉ ์ดํ ๊ฒฐ๊ณผ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ , ์ฌ๋ฌ ๋ฒ ์ํํ ์ ์๋ ํน์ ์์ ์ ์์ฑ(HTTP methods: GET, PUT)
* Preflight : OPTIONS ์์ฒญ์ ๋ํ ์๋ต. ์ ์ ํ CORS ํค๋๋ฅผ ์ ์กํ์ฌ ์๋ฒ๊ฐ ๋๋ฉ์ธ์ ์๋ณธ ๊ฐ ์์ฒญ์ ๋ช ์์ ์ผ๋ก ํ์ฉํ๋์ง ํ์ธ
์์ฝ
1. CORS๋ฅผ ์ค์ ํ๊ณ , CloudFormation์ ํตํด AWS API Gateway๋ฅผ ํตํฉํ๋ฉด API ์ก์ธ์ค๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค
2. ํ์ฉ๋ ์ถ์ฒ์ ์์ฒญ๋ง ์ก์ธ์คํจ์ผ๋ก์จ API๋ฅผ ์์ ํ๊ฒ ์ ์งํ ์ ์๋ค
3. CORS๋ฅผ ์ดํดํ๊ณ ๊ตฌํํ๋ฉด ๋๋ฉ์ธ ๊ฐ ํ๊ฒฝ์์ ์์ ํ๊ณ ํจ์จ์ ์ธ ์ํธ ์์ฉ์ ๋ณด์ฅํ ์ ์๋ค
GET๊ณผ OPTIONAL METHODS
1. ๋ณด์: GET์ URL์ ๋ฐ์ดํฐ๋ฅผ ๋ ธ์ถํ์ง๋ง, POST/PUT์ body์ ์ ์กํ์ฌ ์บ์ ๋์ง ์์
2. GET์ ์ ์ก ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ์ ํ์ ์ด์ง๋ง, POST/PUT์ ๋ณต์กํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํจ
3. GET(PUT)์ ๋ฉฑ๋ฑ์ฑ์ด์ง๋ง, POST๋ ๊ทธ๋ ์ง ์์ (POST๋ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ณ PUT์ ๋ฆฌ์์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ฉฐ ํด๋น ๋์์ ๋ฉฑ๋ฑ์ฑ ๋ฐ ์๋ต ์ฒ๋ฆฌ ์ธก๋ฉด์์ ๋ค์์ฑ์ ๋ค๋ค)
4. GET์ ํ๋ฆฌํ๋ผ์ดํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ์ง ์์ง๋ง, OPTIONS๋ CORS ํ์ธ์ ํ์์
โ
CORS(Cross-Origin Resource Sharing)?
- ์น ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ๋ ํ์์ ์ธ ๋ณด์ ๋ฉ์ปค๋์ฆ
- ๋๋ฉ์ธ, ํ๋กํ ์ฝ ๋๋ ํฌํธ๊ฐ ๋ค๋ฅธ ๊ณณ์์ ์๋ฒ ๋ฆฌ์์ค์ ๋ํ ๊ท์ ๋ ์ก์ธ์ค๋ฅผ ํ์ฉํจ
- API ์์ญ์์, ํนํ AWS API Gateway์์ CORS ๊ตฌ์ฑ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ก์ธ์ค๋ฅผ ์ฉ์ดํ๊ฒ ํ๊ณ , ์ ์ฌ์ ๋ณด์ ์ํ์ ์ํํ๋ ๋ฐ ๋งค์ฐ ์ค์ํ๋ค
๐ค ์ด์ ๋ํ ๋์ ์๊ฐ
CloudFormation์ ์ฌ์ฉํ์ฌ API Gateway ๊ตฌ์ฑ์ ๊ด๋ฆฌํ๋ฉด ์ผ๊ด์ฑ ๋ณด์ฅ ๋ฐ ๋ฐ๋ณต์ฑ์ ์ค์ผ ์ ์์ด, ์๋ ์ค๋ฅ๋ฅผ ์ค์ผ ์ ์์์ ๋ฐฐ์ ๋ค. ๋, ๋ณด์์ ์ํด์๋ CORS๋ฅผ ํ์์ ์ผ๋ก ๊ณ ๋ คํ๋ ๊ฒ์ด ์ ์ ํ๋ค.
๋ฌด๋จ ์ก์ธ์ค๋ก๋ถํฐ API๋ฅผ ๋ณดํธํ๊ณ , ๋ฏผ๊ฐํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ GET๊ณผ POST/PUT์ ์ฐจ์ด์ ์ ์ดํดํ๋ ๊ฒ์ ๊ฐ๋ฐ์์๊ฒ ์ค์ํ ์ง์์ด๋ผ๊ณ ์๊ฐํ๋ค.
๊ทธ๋ ๋ค๊ณ ๋ฌด์กฐ๊ฑด OPTIONAL METHODS๋ฅผ ์ฌ์ฉํด์ผ ํ๋๊ฐ? ๊ทธ๊ฑด ๋ ์๋๋ผ๊ณ ๋ณธ๋ค. ๋งค์ผ ๋๋ผ๋ ๊ฑฐ์ง๋ง, ๋ณด์๊ณผ ๊ฐ๋ฐ์ ๊ด์ ์ ๋๊ณผ ๋์ธ ๊ฒ ๊ฐ๋ค.
๋ฐ์ดํฐ์ ์ฑ๊ฒฉ๊ณผ ์ํ๋๋ ์์ ์ ๊ธฐ๋ฐ์ผ๋ก ๋ ์ ํฉํ ๋ฐฉ๋ฒ์ ์ ํํ๋ ๊ฒ์ด ์ค์ํด ๋ณด์ธ๋ค.
'๐๏ธ IT ๋ํฅ ํ์ ๋ฐ ๋์ ์๊ฐ ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Java ๋์์ฑ: ๊ฐ์์ฑ ๋ฐ ๋๊ธฐํ (1) | 2024.08.29 |
|---|---|
| [Passkeys & ์ ๋ก ํธ๋ฌ์คํธ] ์ฌ์ฉ ํ๋ํ: "๋น๋ฐ๋ฒํธ๋ฅผ ์์ ์" (1) | 2024.08.28 |
| ํฅ์๋ Cyber Resilience๋ฅผ ์ํ Flask + RDF: ์๋งจํฑ ์น ๊ธฐ์ ํ์ฉ (0) | 2024.08.26 |
| [Java] Java๋ก ๊ฐ๋ ฅํ REST API ๊ตฌ์ถ 4๊ฐ์ง ํ (1) | 2024.08.25 |
| [legacy] JMS+SQS โ ๋ ๊ฑฐ์์ ๋ํ ๋์ ์๊ฐ (0) | 2024.08.23 |