2.Fetch API & Cors
Fetch API ๋
Fetch API๋ ์๋ฒ์์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํ ์ต์ JavaScript ์ธํฐํ์ด์ค๋ค. ์ด์ XMLHttpRequest(XHR) API๋ณด๋ค HTTP ์์ฒญ์ ๋ง๋ค๊ณ ์๋ต์ ์ฒ๋ฆฌํ๋ ๋ ๊ฐ๋จํ๊ณ ์ ์ฐํ๋ฉฐ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
Fetch API๋ URL์ ๊ฐ์ ธ์ ์์ฒญ์ ๋ํ ์๋ฒ์ ์๋ต์ ๋ํ๋ด๋ Response ๊ฐ์ฒด๋ก ํ์ธ๋๋ Promise๋ฅผ ๋ฐํํ๋ fetch() ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค. Response ๊ฐ์ฒด๋ ์๋ต ํค๋, ๋ณธ๋ฌธ ๋ฐ ์ํ๋ฅผ ๊ฒ์ฌํ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค. Response ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ Blob ๋ฐ JSON ๊ฐ์ฒด์ ๊ฐ์ ๋ค๋ฅธ ์ ์ฉํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์๋ ์๋ค.
์ด ์์ ์์๋ fetch() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ URL 'https://example.com/data.json'์์ JSON ํ์ผ์ ๊ฐ์ ธ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ fetch()์ ์ํด ๋ฐํ๋ Promise๋ ์๋ต ๊ฐ์ฒด์ json() ๋ฉ์๋๋ฅผ ํธ์ถํ๋๋ก ์ฐ๊ฒฐ๋์ด ์๋ต ๋ณธ๋ฌธ์ JSON์ผ๋ก ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ ๋ค๋ฅธ Promise๋ฅผ ๋ฐํํ๋ค. ๋ง์ง๋ง then() ๋ฉ์๋๋ JSON ๋ฐ์ดํฐ๋ฅผ ์ฝ์์ ๊ธฐ๋กํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ catch() ๋ฉ์๋๋ ๊ฐ์ ธ์ค๊ธฐ ์์ ์ค์ ๋ฐ์ํ ์ ์๋ ๋ชจ๋ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ค.
Fetch API๋ ํค๋, ๋ฉ์๋ ๋ฐ ๋ณธ๋ฌธ๊ณผ ๊ฐ์ ์์ฒญ์ ์ฌ์ฉ์ ์ง์ ํ๋ ์ต์ ๋ ์ ๊ณตํ๋ค.
์ด ์์ ์์๋ JSON ํ์ด๋ก๋์ ํจ๊ป URL 'https://example.com/api/data'์ POST ์์ฒญ์ ๋ณด๋ด๋ ๋ฐ fetch() ๋ฉ์๋๊ฐ ์ฌ์ฉ๋๋ค. headers ์ต์ ์ ํ์ด๋ก๋์ ์ฝํ ์ธ ์ ํ์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋๊ณ body ์ต์ ์ JSON ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ด๋ก ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์๋ฒ๋ ์์ฒญ ๋ณธ๋ฌธ์์ JSON ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์๋ค.
์ ๋ฐ์ ์ผ๋ก Fetch API๋ ์ต์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ HTTP ์์ฒญ์ ๋ง๋ค๊ธฐ ์ํ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ ๋๊ตฌ์ด๋ค. ์์ฒญ์ ๋ง๋ค๊ณ ์๋ต์ ์ฒ๋ฆฌํ๋ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ๊ณ ์ฌ์ฉํ๊ณ ์ดํดํ๊ธฐ ์ฌ์ด ๊น๋ํ Promise ๊ธฐ๋ฐ API๋ฅผ ์ ๊ณตํ๋ค.
Blob
Blob(Binary Large Object)์ ์ด๋ฏธ์ง, ์ค๋์ค ๋๋ ๋น๋์ค ํ์ผ๊ณผ ๊ฐ์ ์ด์ง ๋ฐ์ดํฐ ์ฒญํฌ๋ฅผ ๋ํ๋ด๋ JavaScript์ ๋ฐ์ดํฐ ์ ํ์ด๋ค. Blob์ ์๋ฒ์์ ๋ณด๋ด๊ฑฐ๋ ์๋ฒ์์ ๋ฐ์์ผ ํ๋ ์ด์ง ๋ฐ์ดํฐ๋ก ์์ ํ ๋ ์น ๊ฐ๋ฐ์ ์ ์ฉํ๋ค.
Blob ๊ฐ์ฒด๋ ์ค์ ์ด์ง ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ๋ฅผ ์ค๋ช ํ๋ ๋ฉํ๋ฐ์ดํฐ ์งํฉ(์: MIME ์ ํ ๋ฐ ํ์ผ ์ด๋ฆ)์ ๋ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋๋ค. ์ด์ง ๋ฐ์ดํฐ๋ ํ ์คํธ, ์ด๋ฏธ์ง, ์ค๋์ค ๋๋ ๋น๋์ค๋ฅผ ํฌํจํ ๋ชจ๋ ์ ํ์ ๋ฐ์ดํฐ๊ฐ ๋ ์ ์๋ค.
์น ๊ฐ๋ฐ์์ Blob์ ์ผ๋ฐ์ ์ธ ์ฉ๋ ์ค ํ๋๋ ์ฌ์ฉ์๊ฐ ํ์ผ์ ์๋ฒ์ ์ ๋ก๋ํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค. Blob API๋ ํ์ผ ์ ๋ ฅ ์์์์ ์ Blob ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ฉฐ, ๊ทธ๋ฐ ๋ค์ Fetch API ๋๋ XHR์ ์ฌ์ฉํ์ฌ ์๋ฒ๋ก ๋ณด๋ผ ์ ์๋ค.
Promise
JavaScript์์ Promise๋ ์์ง ์ฌ์ฉํ ์ ์์ง๋ง ๋ฏธ๋์ ์ด๋ ์์ ์ ์์ ๊ฐ์ ๋ํ๋ด๋ ๋ด์ฅ ๊ฐ์ฒด๋ค. Promise๋ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ๋ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ๋ฏ๋ก ํ๋ ์น ๊ฐ๋ฐ์ ๊ธฐ๋ณธ ๋๊ตฌ๋ค.
Promise ๊ฐ์ฒด์๋ ๋ณด๋ฅ, ์ดํ ๋ฐ ๊ฑฐ๋ถ์ ์ธ ๊ฐ์ง ์ํ๊ฐ ์๋ค. Promise๊ฐ ์์ฑ๋๋ฉด ๋๊ธฐ ์ค ์ํ๊ฐ ๋๋ค. ์ด๋ Promise๊ฐ ๋ํ๋ด๋ ๊ฐ์ ์์ง ์ฌ์ฉํ ์ ์์์ ์๋ฏธํ๋ค. Promise๊ฐ ์ดํ๋๋ฉด ์ดํ ์ํ๊ฐ ๋๊ณ Promise๊ฐ ๋ํ๋ด๋ ๊ฐ์ ์ฌ์ฉํ ์ ์๋ค. ์คํ ์ค์ Promise์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด Promise๋ ๊ฑฐ๋ถ๋ ์ํ๊ฐ ๋๊ณ ์ค๋ฅ ๊ฐ์ฒด๊ฐ ๋ฐํ๋๋ค.
Promise์ ๋ง๋ค๊ธฐ ์ํ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ด ์์์๋ resolve ๋ฐ reject๋ผ๋ ๋ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ Promise๋ฅผ ๋ง๋ญ๋๋ค. ํจ์์๋ ๊ฒฐ๊ตญ Promise๋ฅผ ํด๊ฒฐํ๊ฑฐ๋ ๊ฑฐ๋ถํ ๋น๋๊ธฐ ์ฝ๋๊ฐ ํฌํจ๋์ด ์๋ค. ์์ ์ด ์ฑ๊ณตํ๋ฉด ๋ฐํํ ๊ฐ๊ณผ ํจ๊ป resolve ํจ์๊ฐ ํธ์ถ๋๋ค. ์คํจํ๋ฉด ์ค๋ฅ ๊ฐ์ฒด์ ํจ๊ป ๊ฑฐ๋ถ ํจ์๊ฐ ํธ์ถ๋๋ค.
Promise๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด then() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ดํ๋ ์ํ๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ catch() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๊ฑฐ๋ถ๋ ์ํ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
์ด ์์์ then() ๋ฉ์๋๋ Promise์ ์ดํ ์ํ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๊ณ catch() ๋ฉ์๋๋ ๊ฑฐ๋ถ๋ ์ํ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ด๋ฌํ ๋ฉ์๋์ ์ ๋ฌ๋ ์ฝ๋ฐฑ ํจ์๋ ๊ฐ๊ฐ Promise์์ ๋ฐํ๋ ๊ฐ ๋๋ ์ค๋ฅ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ค.
Promise๋ then() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐ๋ ์๋ ์์ผ๋ฏ๋ก ๋ณด๋ค ๋ณต์กํ ์์ ์ ์์ฐจ์ ์ผ๋ก ์ํํ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๋ค๋ฅธ Promise๊ฐ ์ดํ๋ ํ Promise๋ฅผ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ Promise๋ฅผ ํจ๊ป ์ฐ๊ฒฐํ ์ ์๋ค.
์ด ์์์ promise2๋ then() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ promise1์ ์ฐ๊ฒฐ๋์ด promise1์ด ์ดํ๋ ํ ์คํ๋ ์ ์๋ค. then()์ ์ ๋ฌ๋ ์ฝ๋ฐฑ ํจ์๋ ์ฒด์ธ์ ๋ค์ then() ๋ฉ์๋์ ์ ๋ฌ๋๋ ์ ๊ฐ ๋๋ Promise๋ฅผ ๋ฐํํ๋ค.
์ ๋ฐ์ ์ผ๋ก Promise๋ JavaScript์์ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ๋ค. ๋น๋๊ธฐ ์์ ์์ ์ ์ํ ๊นจ๋ํ๊ณ ์ดํดํ๊ธฐ ์ฌ์ด ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๊ณ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ฑ๊ณต ๋ฐ ์ค๋ฅ ์ฌ๋ก๋ฅผ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ค.
ReadableStream
ReadableStream์ ์ต์ ์น ๋ธ๋ผ์ฐ์ ์ Node.js์ ๋ด์ฅ๋ ๊ฐ์ฒด๋ก, ๋ฐ์ดํฐ ์์ค์์ ์๋น์๋ก ๋ฐ์ดํฐ, ํนํ ๋์ฉ๋ ๋ฐ์ดํฐ์ธํธ๋ฅผ ํจ์จ์ ์ผ๋ก ์คํธ๋ฆฌ๋ฐํ ์ ์๋ค. ReadableStream์ ์ ์ด๋๊ณ ํจ์จ์ ์ธ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๋น๋๊ธฐ์์ผ๋ก ์์ฑํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ฌ ์๋น์๊ฐ ์ ์ฒด ๋ฐ์ดํฐ ์ธํธ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ๋ ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ค.
ReadableStream์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ์์ค์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ์ฒ๋ฆฌํ๋ ์๋น์๋ก ๊ตฌ์ฑ๋๋ค. ์์ค๋ ํ์ผ, ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋๋ ์์ฑ๋ ๋ฐ์ดํฐ ์คํธ๋ฆผ๊ณผ ๊ฐ์ ๋ชจ๋ ์ ํ์ ๋ฐ์ดํฐ๊ฐ ๋ ์ ์๋ค. ์๋น์๋ ๋ฐ์ดํฐ๋ฅผ ํ์ผ์ ์ฐ๊ฑฐ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฒ๋ฆฌํ๊ฑฐ๋ UI์ ํ์ํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ชจ๋ ์ ํ์ ์์ ์ด ๋ ์ ์๋ค.
ReadableStream์ ์์ฑํ๊ธฐ ์ํ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ด ์์ ์์๋ start() ๋ฐ cancel()์ด๋ผ๋ ๋ ๊ฐ์ง ๋ฉ์๋๊ฐ ํฌํจ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ ReadableStream์ ๋ง๋ ๋ค. start() ๋ฉ์๋์๋ ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์์ฑํ๋ ์ฝ๋๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ ์คํธ๋ฆผ ์ ์ด๋ฅผ ์ํ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด๊ฐ ์ ๋ฌ๋๋ค. cancel() ๋ฉ์๋๋ ์ ํ ์ฌํญ์ด๋ฉฐ ์๋น์๊ฐ ์คํธ๋ฆผ์ ์ทจ์ํ ๊ฒฝ์ฐ ์คํ๋๋ ์ ๋ฆฌ ์ฝ๋๋ฅผ ํฌํจํ๋ค.
ReadableStream์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํ๋ ๊ธฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ํด๋น read() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์ฒญํฌ๋ฅผ ๊ฒ์ํ ์ ์๋ค.
์ด ์์ ์์๋ ReadableStream ๊ฐ์ฒด์ getReader() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ๊ธฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค. ๊ทธ๋ฐ ๋ค์ readData() ํจ์๋ read() ๋ฉ์๋์์ ๋ฐํ๋ Promise๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๊ท์ ์ผ๋ก ํธ์ถ๋๋ค. ์ด ๋ฉ์๋๋ ์คํธ๋ฆผ์ด ์ข ๋ฃ๋์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ๋ถ์ธ ๊ฐ๊ณผ ๋ฐ์ดํฐ ๋ฉ์ด๋ฆฌ๋ฅผ ํฌํจํ๋ ๊ฐ์ฒด๋ก ํ์ธ๋๋ค.
์ ๋ฐ์ ์ผ๋ก ReadableStreams๋ ์น ๊ฐ๋ฐ์์ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ์ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ๋ค. ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์ํ ํ์คํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ฌ ํนํ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ๋ก ์์ ํ ๋ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ ์ฝ๋๋ฅผ ๊ตฌํํ๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ๊ฐ ๋ ์ฝ๋ค.
Unicode
Unicode๋ ์ ์ธ๊ณ ์ธ์ด์ ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ์ฌ ์ธ๊ฐ ์ธ์ด์์ ์ฌ์ฉ๋๋ ๊ฐ ๋ฌธ์์ ๊ณ ์ ํ ์ซ์ ๊ฐ(์ฝ๋ ํฌ์ธํธ)์ ํ ๋นํ๋ ๋ฒ์ฉ ๋ฌธ์ ์ธ์ฝ๋ฉ ํ์ค์ด๋ค. Unicode์ ๋ชฉํ๋ ์ ๋ณด ์์ค ์์ด ๋ค์ํ ํ๋ซํผ, ์์ฉ ํ๋ก๊ทธ๋จ ๋ฐ ์ฅ์น ๊ฐ์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ์ ์๋๋ก ๋ชจ๋ ์ธ์ด ๋๋ ์คํฌ๋ฆฝํธ๋ก ํ ์คํธ๋ฅผ ๋ํ๋ด๋ ์ผ๊ด๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ๊ฒ์ด๋ค.
Unicode๋ ๋ฌธ์, ์ซ์, ๋ฌธ์ฅ ๋ถํธ, ๊ธฐํธ ๋ฐ ์ ์ด ๋ฌธ์๋ฅผ ํฌํจํ์ฌ 143,000๊ฐ ์ด์์ ๋ฌธ์๋ฅผ ํฌํจํ๋ ํฌ๊ณ ๋ณต์กํ ํ์ค์ด๋ค. ๊ฐ ๋ฌธ์๋ 0x000000์์ 0x10FFFF๊น์ง์ 32๋นํธ ์ ์์ธ ๊ณ ์ ํ ์ฝ๋ ํฌ์ธํธ๋ก ์๋ณ๋๋ค.
Unicode ํ์ค์ UTF-8, UTF-16 ๋ฐ UTF-32๋ฅผ ํฌํจํ์ฌ Unicode ๋ฌธ์๋ฅผ ์ด์ง ํ์์ผ๋ก ๋ํ๋ด๋ ์ฌ๋ฌ ์ธ์ฝ๋ฉ ์ฒด๊ณ๋ฅผ ์ ์ํ๋ค. ๊ฐ ์ธ์ฝ๋ฉ ์ฒด๊ณ๋ Unicode ์ฝ๋ ํฌ์ธํธ๋ฅผ ์ปดํจํฐ์์ ์ ์ฅ, ์ ์ก ๋ฐ ์ฒ๋ฆฌํ ์ ์๋ ์ผ๋ จ์ ๋ฐ์ดํธ์ ๋งคํํ๋ค.
UTF-8์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ธ์ฝ๋ฉ ์ฒด๊ณ์ด๋ฉฐ ์์ด์ ์๋ 7๋นํธ ๋ฌธ์ ์ธ์ฝ๋ฉ ํ์ค์ธ ASCII์์ ํ์ ํธํ์ฑ์ ์ ๊ณตํ๋ค. UTF-8์ ๋จ์ผ ๋ฐ์ดํธ๋ก ์ธ์ฝ๋ฉ๋ ASCII ๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋ ํฌ์ธํธ์ ๊ฐ์ ๋ฐ๋ผ ๊ฐ Unicode ์ฝ๋ ํฌ์ธํธ๋ฅผ 1~4๋ฐ์ดํธ๋ก ์ธ์ฝ๋ฉํ๋ค. UTF-16์ ๊ฐ Unicode ์ฝ๋ ํฌ์ธํธ๋ฅผ ํ๋ ๋๋ ๋ ๊ฐ์ 16๋นํธ ์ฝ๋ ๋จ์๋ก ์ธ์ฝ๋ฉํ๊ณ UTF-32๋ ๊ฐ ์ฝ๋ ํฌ์ธํธ๋ฅผ ๋จ์ผ 32๋นํธ ์ฝ๋ ๋จ์๋ก ์ธ์ฝ๋ฉํ๋ค.
Unicode๋ ํ๋ ์ปดํจํ ์ ํ์ ์์๊ฐ ๋์์ผ๋ฉฐ ์ํํธ์จ์ด ๊ฐ๋ฐ, ์น ์์ฉ ํ๋ก๊ทธ๋จ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ๋ฐ ์ด์ ์ฒด์ ์์ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ชจ๋ ์ธ์ด ๋๋ ์คํฌ๋ฆฝํธ์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๋ค๊ตญ์ด ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ง๋ค ์ ์์ผ๋ฏ๋ก ์๋ก ๋ค๋ฅธ ๋ฌธํ ๋ฐ ์ง์ญ ๊ฐ์ ๋ ์ฝ๊ฒ ํต์ ํ ์ ์๋ค.
์์ฝํ๋ฉด Unicode๋ ๊ฐ ๋ฌธ์์ ํ ๋น๋ ๊ณ ์ ํ ์ฝ๋ ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์ธ์ด ๋๋ ์คํฌ๋ฆฝํธ๋ก ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ด๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ด๋ค. UTF-8, UTF-16 ๋ฐ UTF-32์ ๊ฐ์ Unicode ์ธ์ฝ๋ฉ ์ฒด๊ณ๋ ์ปดํจํฐ์์ ์ ์ฅ, ์ ์ก ๋ฐ ์ฒ๋ฆฌํ ์ ์๋ Unicode ๋ฌธ์์ ์ด์ง ํํ์ ์ ๊ณตํ๋ค.
CORS ๋
CORS๋ Cross-Origin Resource Sharing์ ์ฝ์๋ก, ์น ํ์ด์ง๊ฐ ์ ๊ณต๋ ๋๋ฉ์ธ์ด๋ ํฌํธ๊ฐ ์๋ ๋ค๋ฅธ ๋๋ฉ์ธ์ด๋ ํฌํธ์ ๋ํ ์์ฒญ์ ํ์ง ๋ชปํ๋๋ก ์น ํ์ด์ง๋ฅผ ์ ํํ๋ ์ต์ ์น ๋ธ๋ผ์ฐ์ ์ ๊ตฌํ๋ ๋ณด์ ๊ธฐ๋ฅ์ด๋ค. CORS๋ ์ ์์ ์ธ ์คํฌ๋ฆฝํธ๊ฐ ์ฌ๋ฌ ๋๋ฉ์ธ์์ ์ค์ํ ๋ฐ์ดํฐ์ ์ก์ธ์คํ์ง ๋ชปํ๋๋ก ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋๋ ํ์ ๋ณด์ ๊ธฐ๋ฅ์ด๋ค.
๋์ผ ์ถ์ฒ ์ ์ฑ (same-origin policy)์ ์น ํ์ด์ง๊ฐ ์์ฒด ์ถ์ฒ๊ฐ ์๋ ๋ค๋ฅธ ์ถ์ฒ(๋๋ฉ์ธ, ํ๋กํ ์ฝ ๋๋ ํฌํธ)์ ๋ฆฌ์์ค์ ์ก์ธ์คํ๋ ๊ฒ์ ์ ํํ๋ ์น ๋ธ๋ผ์ฐ์ ์ ์ํด ๊ตฌํ๋ ๊ธฐ๋ณธ ๋ณด์ ๊ฐ๋ ์ด๋ค. ๊ทธ๋ฌ๋ ์น ํ์ด์ง๊ฐ ๋ค๋ฅธ ๋๋ฉ์ธ์์ ํธ์คํ ๋๋ REST API์ ๊ฐ์ด ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค์ ์ก์ธ์คํด์ผ ํ๋ ์ ํจํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์๋ค. CORS๋ ์ ์ด๋ ๋ฐฉ์์ผ๋ก ๋์ผํ ์ถ์ฒ ์ ์ฑ ์ ์ํํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ฌ ์น ํ์ด์ง๊ฐ ์ถ์ฒ ๊ฐ ์์ฒญ์ ํ ์ ์๋๋ก ํ๋ ๋์์ ์ ์์ ์ธ ์คํฌ๋ฆฝํธ๊ฐ ๊ธฐ๋ฅ์ ๋จ์ฉํ์ง ๋ชปํ๋๋ก ํ๋ค.
CORS๋ ์๋ฒ์ ์๋ต์ HTTP ํค๋๋ฅผ ์ถ๊ฐํ์ฌ ์๋ํ๋ฉฐ, ์ด๋ ์๋ณธ ๊ฐ ์์ฒญ์ ํ ์ ์๋ ๋๋ฉ์ธ๊ณผ ์ง์๋๋ HTTP ๋ฉ์๋๋ฅผ ๋ํ๋ธ๋ค. ์๋ฒ๋ ๋ค์ CORS ํค๋ ์ค ํ๋๋ก ์๋ตํ ์ ์๋ค.
Access-Control-Allow-Origin: ๋ฆฌ์์ค์ ์ก์ธ์คํ ์ ์๋ ๋๋ฉ์ธ์ ์ง์ ํ๋ค. ํค๋๊ฐ ์๊ฑฐ๋ ์์ผ๋์นด๋ "*"๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ๋ชจ๋ ๋๋ฉ์ธ์ด ๋ฆฌ์์ค์ ์ก์ธ์คํ ์ ์๋ค.
Access-Control-Allow-Methods: GET, POST, PUT, DELETE ๋ฑ๊ณผ ๊ฐ์ ์๋ณธ ๊ฐ ์์ฒญ์ ๋ํด ํ์ฉ๋๋ HTTP ๋ฉ์๋๋ฅผ ์ง์ ํ๋ค.
Access-Control-Allow-Headers: ๊ต์ฐจ ์ถ์ฒ ์์ฒญ์ ํ์ฉ๋๋ ์์ฒญ ํค๋๋ฅผ ์ง์ ํ๋ค.
Access-Control-Allow-Credentials: ์๋ณธ ๊ฐ ์์ฒญ์ ์ฟ ํค ๋๋ HTTP ์ธ์ฆ๊ณผ ๊ฐ์ ์๊ฒฉ ์ฆ๋ช ์ ํฌํจํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ธ๋ค.
์น ํ์ด์ง๊ฐ ๊ต์ฐจ ์ถ์ฒ ์์ฒญ์ ํ๋ฉด ์น ๋ธ๋ผ์ฐ์ ๋ ์์ฒญ๋ ๋ฆฌ์์ค๊ฐ ํ์ฉ๋๋์ง ํ์ธํ๊ธฐ ์ํด ํ๋ฆฌํ๋ผ์ดํธ ์์ฒญ์ ์๋ฒ๋ก ๋ณด๋ธ๋ค. ์คํ ์ ์์ฒญ์๋ HTTP OPTIONS ๋ฉ์๋์ ์๋ณธ ๊ฐ ์์ฒญ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ง์ ํ๋ ์ถ๊ฐ ํค๋๊ฐ ํฌํจ๋๋ค. ์๋ฒ๋ ์๋ณธ ๊ฐ ์์ฒญ์ด ํ์ฉ๋๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ์ ์ ํ CORS ํค๋๋ก ์๋ตํ๋ค. ์์ฒญ์ด ํ์ฉ๋๋ฉด ์น ๋ธ๋ผ์ฐ์ ๋ ์์ฒญ๋ ๋ฉ์๋ ๋ฐ ํค๋์ ํจ๊ป ์ค์ ์์ฒญ์ ๋ณด๋ธ๋ค. preflight ์์ฒญ์ cross-origin ์์ฒญ์ด ํ์ฉ๋๋์ง ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ ์๋ฒ๋ ์ ์ ํ CORS ํค๋๋ก ์๋ตํ๋ค.
Reference
Last updated