2. Fetch API & CORS
ํค์๋
Fetch API๋
Promise
ReadableStream
Unicode
CORS๋
Fetch API
๋คํธ์ํฌ๋ฅผ ํตํด์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ ์ธํฐํ์ด์ค
fetch()
Promise๋ฅผ ๋ฐํ
์ฒซ๋ฒ์งธ ์ธ์๋ก URL, ๋๋ฒ์งธ ์ธ์๋ก ์ต์ ๊ฐ์ฒด๋ฅผ ๋ฐ์
API ํธ์ถ์ด ์ฑ๊ณตํ์ ๋๋ response ๊ฐ์ฒด๋ฅผ resolve
์คํจํ์ ๋๋ ์์ธ(error) ๊ฐ์ฒด๋ฅผ reject
์ต์ ์ ํตํด HTTP Method, ์์ฒญ ํค๋, ์์ฒญ body ๋ฑ์ ์ค์ ๊ฐ๋ฅ
response ๊ฐ์ฒด๋ HTTP ์๋ต์ํ(status), header, body๋ฑ์ ์ฝ์ด์ฌ ์ ์์
Promise
์๋ฐ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์ฌ์ฉ๋๋ ๊ฐ์ฒด
์๋ฐ์คํฌ๋ฆฝํธ๋ ํน์ ์ฝ๋์ ์คํ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์ฝ๋๋ฅผ ๋จผ์ ์ํ
์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ๋ฐ๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์
์๋ต์ ๋ฐ์ ๋ค์ ๋ค์ ๋ช ๋ น์ ์ํํ๋ ค๋ฉด ์ฝ๋ฐฑํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ, ํ๋ก๋ฏธ์ค๋ ์ฝ๋ฐฑ์ด ์ค์ฒฉ๋์ด ์ฝ๋๊ฐ ์ฝ๊ธฐ ์ด๋ ค์์ง๋ ๊ฑธ ์๋ฐฉํ ์ ์์
ํ๋ก๋ฏธ์ค์ ์ธ๊ฐ์ง ์ํ
Pending(๋๊ธฐ) : ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ก์ง์ด ์๋ฃ๋์ง ์์ ์ํ
Fulfilled(์ดํ) : ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋์ด ํ๋ก๋ฏธ์ค๊ฐ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํํด์ค ์ํ
Rejected(์คํจ) : ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์คํจํ๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ํ
new Promise()
๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด Pending ์ํ๊ฐ ๋จ
new Promise()
๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ์ธํ ์ ์๊ณ , ์ฝ๋ฐฑ ํจ์์ ์ธ์๋ resolve
์ reject
resolve
๋ฅผ ์คํํ๋ฉด Fulfilled ์ํ๊ฐ ๋จ
์ดํ(์๋ฃ)์ํ๊ฐ ๋๋ฉด then()
์ ์ด์ฉํด์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐ์ ์ ์์
reject
๋ฅผ ์คํํ๋ฉด Reject ์ํ๊ฐ ๋จ
์คํจ์ํ๊ฐ ๋๋ฉด Error๋ฅผ catch()
๋ก ๋ฐ์ ์ ์์
GET ๋ฐฉ์ ํธ์ถํ๊ธฐ
๋๋ถ๋ถ์ REST API๋ JSON ํํ์ ๋ฐ์ดํฐ๋ฅผ ์๋ตํ๊ธฐ ๋๋ฌธ์ response ๊ฐ์ฒด๋ json()
๋ฉ์๋ ์ ๊ณต
์๋ต ๊ฐ์ฒด๋ก๋ถํฐ JSON ํฌ๋งท์ ์๋ต ์ ๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ก ๋ณํํ์ฌ ์ป์ ์ ์์
POST ํธ์ถ
method ์ต์ ์ POST๋ก ์ง์ , headers ์ต์ ์ผ๋ก JSON ํฌ๋งท์ ์ฌ์ฉํ๋ค๊ณ ์๋ ค์ฃผ๊ณ , ์์ฒญ ์ ๋ฌธ์ JSON ํฌ๋งท์ผ๋ก ์ง๋ ฌํํ์ฌ body ์ต์ ์ ์ค์
๋ง์ฐฌ๊ฐ์ง๋ก response.json()
ํธ์ถํ๋ฉด ์๋ต ์ ๋ฌธ์ ๊ฐ์ฒด๋ก ์ป์ ์ ์์
json()
๋ฉ์๋ ์์ด response ์ฝ์ด์ค๊ธฐ
json()
๋ฉ์๋ ์์ด response ์ฝ์ด์ค๊ธฐresponse.body()๋ ReadableStream
ReadableStream์ ๋ฐ์ดํธ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๋ ์คํธ๋ฆผ ์ ๊ณต
ReadableStream.getReader()
: Reader๋ฅผ ๋ง๋ค๊ณ ์คํธ๋ฆผ์ Reader์ ๊ณ ์ . ์คํธ๋ฆผ์ด ๊ณ ์ ๋์ด ์๋ ๋์์๋ ๋ค๋ฅธ Reader๋ฅผ ์ป์ ์ ์์
์ฝ์ด์จ ๊ฐ์ byte array -> ๋์ฝ๋ฉํด์ ์ฝ์ -> json.parse()๋ก ๊ฐ์ฒด๋ก ๋ง๋ค๊ธฐ
CORS
๋์ผ ์ถ์ฒ ์ ์ฑ (Same Origin Policy)
์ด๋ค ์ถ์ฒ์์ ๋ถ๋ฌ์จ ๋ฌธ์๋ ์คํฌ๋ฆฝํธ๊ฐ ๋ค๋ฅธ ์ถ์ฒ์์ ๊ฐ์ ธ์จ ๋ฆฌ์์ค์ ์ํธ์์ฉํ๋ ๊ฒ์ ์ ํํ๋ ๋ณด์๋ฐฉ์
๋ URL์ ํ๋กํ ์ฝ, ํฌํธ, ํธ์คํธ๊ฐ ๋ชจ๋ ๊ฐ์์ผ ํจ
์น ๋ธ๋ผ์ฐ์ ๋ Same Origin Policy์ ๋ฐ๋ผ ์น ํ์ด์ง์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ๊ณณ(์๋ฒ)์ด ์๋ก ๋ค๋ฅธ ์๋ฒ์ผ ๋ ์๋ฒ์์ ์ป์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ง์
์ด ๋ ์๋ฒ์ ์์ฒญํ๊ณ ์๋ต์ ๋ฐ์์ค๋ ๊ฑด ์งํ๋ ์ํ์ด์ง๋ง ์ฌ์ฉํ ์ ์๊ฒ ๋จ
CORS(Cross-Origin Resource Sharing, ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ )
์ถ๊ฐ HTTP ํค๋๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ถ์ฒ์์ ์คํ ์ค์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค๋ฅธ ์ถ์ฒ์ ์ ํํ ์์์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํ๋๋ก ๋ธ๋ผ์ฐ์ ์ ์๋ ค์ฃผ๋ ์ฒด์
REST API ์๋ฒ์์ Headers์
Access-Control-Allow-Origin
์์ฑ์ ์ถ๊ฐํ๋ฉด ๋จExpress์์๋ CORS ๋ฏธ๋ค์จ์ด๋ฅผ ์ค์นํ๋ฉด ๋จ
Last updated