1. async/await
- Promise๋ฅผ ํ์ฉํ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ๋ ๋ฌธ๋ฒ
- async/await ๋ฌธ๋ฒ์ผ๋ก ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋๊ธฐ ์ฝ๋์ฒ๋ผ ๊ฐ๊ฒฐํ๊ฒ ์์ฑ ๊ฐ๋ฅ
- await ํค์๋๋ ๋ฐ๋์ async ํจ์ ์์์๋ง ์ฌ์ฉํด์ผ ํจ
- async๋ก ์ ์ธ๋ ํจ์๋ ๋ฐ๋์ Promise๋ฅผ ๋ฆฌํด
-
async function asyncFunc() { let data = await fetchData(); let user = await; fetchUser(data); return user; }
- async ํจ์๋ function ํค์๋ ์์ async๋ฅผ ๋ถ์ฌ ๋ง๋ ๋ค.
- fetchData, fetchUser๋ Promise๋ฅผ ๋ฆฌํด!
- await ํค์๋๋ then ๋ฉ์๋ ์ฒด์ธ์ ์ฐ๊ฒฐํ ๊ฒ์ฒ๋ผ ์์๋๋ก ๋์
-
async function asyncFunc() { let data1 = await fetchData1(); let data2 = await fetchData2(data1); let data3 = await fetchData3(data2); return data3; } function promiseFunc() { return fetchData1() .then(fetchData2) .then(fetchData3); }
- try-catch ๊ตฌ๋ฌธ์ผ๋ก ์๋ฌ ์ฒ๋ฆฌ
-
async function asyncFunc() { try { let data1 = await fetchData1(); return fetchData2(data1); } catch (e) { console.log("์คํจ: ", e); // e = Promise์ catch ๋ฉ์๋๊ฐ ๋ฐ๋ ๋ฐํ ๊ฐ๊ณผ ๋์ผ } }
2. HTTP (Hypertext Transfer Protocol)
- Web์์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ํต์ ํ๋ ๋ฐฉ๋ฒ์ ์ ํ ๊ฒ
- ํด๋ผ์ด์ธํธ: ์น ๋ธ๋ผ์ฐ์ ๋ฑ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๋ ๋์
- ์๋ฒ: ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ๊น์ง ๋์ X
- ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ฌ์ด์๋ ๋ฌด์ํ ๋ง์ ์์๊ฐ ์กด์ฌํ๋ฉฐ, HTTP๋ ์ด๋ฐ ์กด์ฌ๋ค ์ฌ์ด์ ํต์ ๋ฐฉ๋ฒ์ ๊ท์
2-1. HTTP Message
- ์๋ฒ ์ฃผ์, ์์ฒญ ๋ฉ์๋, ์ํ ์ฝ๋, target path, ํค๋ ์ ๋ณด, ๋ฐ๋ ์ ๋ณด ๋ฑ์ด ํฌํจ
- ์์ฒญ ๋ฉ์์ง, ์๋ต ๋ฉ์์ง์ ๋ชจ์์ด ๋ค๋ฆ
- HTTP/1.1 ๋ฉ์์ง๋ ์ฌ๋์ด ์ฝ์ ์ ์์
2-2. HTTP Header
- ์ฝํ ์ธ ๊ด๋ จ ์ ๋ณด, ์ธ์ฆ ๊ด๋ จ ์ ๋ณด, ์ฟ ํค ์ ๋ณด, ์บ์ ๊ด๋ จ ์ ๋ณด ๋ฑ
- ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ ํต์ ์ ํ์ํ ์ ๋ณด๋ฅผ ๋ด๋๋ค.
- ํด๋ผ์ด์ธํธ ์์ฒญ ์, ์๋ฒ ์๋ต ์ ๋ชจ๋ ํค๋์ ์ ๋ณด๋ฅผ ๋ด์ ์ ์๋ค.
2-3. HTTP Status
- HTTP ์์ฒญ ์, ํด๋ผ์ด์ธํธ๋ ์์ฒญ์ ๊ฒฐ๊ณผ์ ๋ํ ์ํ ์ ๋ณด๋ฅผ ์ป๋๋ค.
- 200, 400, 500 ๋ฑ ์ซ์ ์ฝ๋์, OK, NOT FOUND ๋ฑ์ ํ ์คํธ๋ก ์ด๋ฃจ์ด์ง๋ค.
- ์ฝ๋๋ฅผ ์ด์ฉํด ๊ฐ ๊ฒฐ๊ณผ์ ํด๋นํ๋ ํ์๋ฅผ ํ ์ ์๋ค.
2-4. ์์ฒญ ๋ฉ์๋
- HTTP์์, ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ธ๋ค.
- ์์ฒญ ์ ์์ฒญ ๋ฉ์๋๋ก ํน์ ์์ฒญ์ ๋ํ ๋์์ ์ ์ํ๋ค.
- GET, POST, PUT, PATCH, DELETE, OPTIONS, CONNECT, TRACE ๋ฑ์ด ๊ท์ ๋๋ค.
3. REST API(Representational State Transfer API)
- REST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง API
- REST API๋ HTTP์ ์์ฒญ ๋ฉ์๋์ ์ํ๋ ์๋ฒ API์ ํด๋ผ์ด์ธํธ ๊ฐ ํต์ ์ ๊ตฌ์กฐ๊ฐ ์ง์ผ์ผ ํ ์ข์ ๋ฐฉ๋ฒ์ ๋ช ์ํ ๊ฒ์ด๋ค.
- ๊ตฌ์ฒด์ ์ธ ๋ด์ฉ์ผ๋ก๋ ์์ฒญ ๋ฉ์๋์ ์๋ฏธ, URI ์ค๊ณ, ํด๋ผ์ด์ธํธ์ ์ํ์ ๋ํ ๋์ ๋ฑ์ ์ ์ํ๋ค.
3-1. REST(Represetational State Transfer)
- ์์์ ์ด๋ฆ์ผ๋ก ๊ตฌ๋ถํ์ฌ ํด๋น ์์์ ์ํ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ชจ๋ ๊ฒ
- HTTP URI(Uniform Resource Identifier)๋ฅผ ํตํด ์์์ ๋ช ์ํ๊ณ , HTTP Method(POST, GET, PUT, DELETE)๋ฅผ ํตํด ํด๋น ์์(URI)์ ๋ํ CRUD Operation์ ์ ์ฉํ๋ ๊ฒ
- REST์ ๊ตฌ์ฑ ์์
- 1. ์์(Resource): HTTP URI
- 2. ์์์ ๋ํ ํ์(Verb): HTTP Method
- 3. ์์์ ๋ํ ํ์์ ๋ด์ฉ(Representations): HTTP Message Pay Load
3-2. API(Application Programming Interface)
- ์ฌ์ฉ์๊ฐ ํน์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋๋ก ์ ๊ณตํ๋ ํจ์
- ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ด์์ฒด์ , ๊ทธ๋ฆฌ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ ์ฌ์ด์ ์ํธ ์์ฉ์ ๋์์ค๋ค.
- ์๋ฅผ ๋ค์ด, ๋ ์คํ ๋์ ๊ฐ๋ค๊ณ ๊ฐ์ ํ์. ์ ์์ด ๊ฐ์ ธ๋ค์ค ๋ฉ๋ดํ์ ๋ณด๋ฉด์ ์คํ
์ดํฌ๋ฅผ ๊ณ ๋ฅด๋ฉด, ์ ์์ด ์ฃผ๋ฌธ์ ๋ฐ์ ์๋ฆฌ์ฌ์๊ฒ ์์ฒญํ๋ค. ๊ทธ๋ฌ๋ฉด ์๋ฆฌ์ฌ๋ ์คํ
์ดํฌ๋ฅผ ๋ง๋ค์ด ์ ์์๊ฒ ์ฃผ๊ณ , ์ฐ๋ฆฌ๋ ์ ์์ด ๊ฐ์ ธ๋ค์ค ๋ง์๋ ์คํ
์ดํฌ๋ฅผ ๋จน์ ์ ์๊ฒ ๋๋ค.
- ์ฌ๊ธฐ์ ์ ์์ ์ญํ ์? ์๋์๊ฒ ๋ฉ๋ด๋ฅผ ์๋ ค์ฃผ๊ณ , ์ฃผ๋ฐฉ์ ์ฃผ๋ฌธ๋ฐ์ ์๋ฆฌ๋ฅผ ์์ฒญํ๋ค. ๊ทธ ๋ค์, ์ฃผ๋ฐฉ์์ ์์ฑ๋ ์๋ฆฌ๋ฅผ ์๋๊ป ๋ค์ ์ ๋ฌํ๋ค.
- API๋ ์ฌ๊ธฐ์์ ์ ์๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ค.
- API๋ ์๋(ํ๋ก๊ทธ๋จ)์ด ์ฃผ๋ฌธํ ์ ์๊ฒ ๋ฉ๋ด(๋ช ๋ น ๋ชฉ๋ก)๋ฅผ ์ ๋ฆฌํ๊ณ , ์ฃผ๋ฌธ(๋ช ๋ น)์ ๋ฐ์ผ๋ฉด ์๋ฆฌ์ฌ(์์ฉ ํ๋ก๊ทธ๋จ)์ ์ํธ์์ฉํ์ฌ ์์ฒญ๋ ๋ฉ๋ด(๋ช ๋ น์ ๋ํ ๊ฐ)๋ฅผ ์ ๋ฌํ๋ค.
- ์ฆ, API๋ ํ๋ก๊ทธ๋จ๋ค์ด ์๋ก ์ํธ์์ฉํ๋ ๊ฒ์ ๋์์ฃผ๋ ๋งค๊ฐ์ฒด์ด๋ค.
3-3. REST API ์์ฒญ ๋ฉ์๋์ ์๋ฏธ
- GET: ๋ฆฌ์์ค ์ ๋ณด๋ฅผ ์ป์
- POST: ๋ฆฌ์์ค๋ฅผ ์์ฑ
- PUT: ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ฑฐ๋ ์ ๋ฐ์ดํธ
- DELETE: ๋ฆฌ์์ค๋ฅผ ์ ๊ฑฐ
3-4. REST API์ ์ค๊ณ ๊ฐ์ด๋
1. URI๋ ๋์ฌ๋ณด๋ค๋ ๋ช ์ฌ๋ฅผ, ๋๋ฌธ์๋ณด๋ค๋ ์๋ฌธ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
๐ Bad http://www.example.com/Running/
๐ Good http://www.example.com/run/
2. ๋ง์ง๋ง์ ์ฌ๋์(/)๋ฅผ ํฌํจํ์ง ์๋๋ค.
๐ Bad http://www.example.com/test/
๐ Good http://www.example.com/test
3. ์ธ๋๋ฐ ๋์ ํ์ดํ(-)์ ์ด์ฉํ๋ค.
๐ Bad http://www.example.com/test_value
๐ Good http://www.example.com/test-value
4. ํ์ผํ์ฅ์๋ URI์ ํฌํจํ์ง ์๋๋ค.
๐ Bad http://www.example.com/test.jpg
๐ Good http://www.example.com/test
5. ํ์๋ฅผ ํฌํจํ์ง ์๋๋ค.
๐ Bad http://www.example.com/delete-something/1
๐ Good http://www.example.com/something/1
4. Fetch API
- ๊ธฐ์กด์ XMLHTTPRequest๋ฅผ ๋์ฒดํ๋ HTTP ์์ฒญ API
- ES6์ ์ถ๊ฐ๋ Promise๋ฅผ ๋ฆฌํด
- ๋คํธ์ํฌ ์์ฒญ ์ฑ๊ณต์, Promise๋ Response ๊ฐ์ฒด๋ฅผ resolve
- ๋คํธ์ํฌ ์์ฒญ ์คํจ์, Promise๋ ์๋ฌ๋ฅผ reject
4-1. Response ๊ฐ์ฒด
- ๊ฒฐ๊ณผ์ ๋ํ ๋ค์ํ ์ ๋ณด๋ฅผ ๋ด๋๋ค.
- response.ok: HTTP Status code๊ฐ 200-299 ์ฌ์ด๋ฉด true, ๊ทธ ์ธ false
- response.status: HTTP status code
- response.url: ์์ฒญํ URL ์ ๋ณด
- response.headers: Response ๊ฐ์ฒด์ ํค๋ ์ ๋ณด
- response.json(): ์ป์ด์จ body ์ ๋ณด๋ฅผ json์ผ๋ก ๋ง๋๋ Promise๋ฅผ ๋ฐํ
- Promise๊ฐ resolve ๋๋ฉด ์ป์ด์จ body ์ ๋ณด๋ฅผ ์ฝ์
- .text(), .blob(), .formData() ๋ฑ์ ๋ฉ์๋๋ก ๋ค๋ฅธ ํํ์ ๋ฐ๋ ์ฝ์
- fetch(url, options)๋ก fetch ๋ฉ์๋ ์ต์ ์ ๋ฃ๋๋ค.
- method ํ๋๋ก ์ฌ๋ฌ ์์ฒญ ๋ฉ์๋ ํ์ฉ
- headers, body ํ๋๋ฅผ ํ์ฉ โก ์๋ฒ์ ์ถ๊ฐ ์ ๋ณด ์ ์ก
fetch(serverURL, {
method: 'post',
headers: {
'Content-Type': 'application/json; charset=utf-8',
Authentication: 'mysecret'
},
body: JSON.stringify(formData)
})
.then(response => {
return response.json()
})
.then(json => {
console.log('POST ์์ฒญ ๊ฒฐ๊ณผ:', json)
})
์ฐธ๊ณ