๐Ÿ“–ํ”„๋ ˆ์ž„์›Œํฌ ์—†๋Š” ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ์„ ์ฝ๊ณ  - 5์žฅ. HTTP ์š”์ฒญ

MJยท2023๋…„ 1์›” 10์ผ
0

์ฑ…์„ ์ฝ๊ณ 

๋ชฉ๋ก ๋ณด๊ธฐ
5/5
post-thumbnail

์›น ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•˜๊ธฐ ์œ„ํ•ด ์šฐํ…Œ์ฝ”์—์„œ ์ถ”์ฒœ๋ฐ›์€ ์ฑ…์„ ์ฝ๊ณ 

โœ”๏ธ AJAX

Asynchronous Javascript and XML ์˜ ์•ฝ์ž๋กœ
ํŽ˜์ด์ง€๋ฅผ ์™„์ „ํžˆ ๋‹ค์‹œ ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ์ตœ์ดˆ ํŽ˜์ด์ง€๋กœ ๋กœ๋“œ ํ›„ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์„œ๋ฒ„์—์„œ ๋กœ๋“œํ•˜๋Š” ์ƒˆ๋กœ์šด ๊ธฐ์ˆ 

AJAX์™€ ๋น„AJAX์˜ ์•„ํ‚คํ…์ฒ˜์˜ ์ฐจ์ด

์ด๋ฏธ์ง€ ์ถœ์ฒ˜

  • ๋น„AJAX ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTTP์š”์ฒญ์„ ํ•˜๊ฒŒ๋˜๋ฉด ์„œ๋ฒ„๋Š” HTML+CSS ๋˜๋Š” XML+๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค
  • AJAX ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTTP์š”์ฒญ์„ ํ•˜๊ฒŒ๋˜๋ฉด JSON๋ฐ์ดํ„ฐ๋งŒ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค.

AJAX์˜ ์žฅ์ 

    1. ๋ณ€๊ฒฝ๋˜๋Š” ์ผ๋ถ€๋ถ„๋งŒ ๊ฐฑ์‹  ๊ฐ€๋Šฅํ•˜๋‹ค.
    1. ์›น ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋œ ํ›„ ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ ์š”์ฒญ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    1. ์›น ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋œ ํ›„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์‘๋‹ต์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    1. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์˜์—ญ(๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ ex. ํž™๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ)์—์„œ ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

โœ”๏ธ REST

REperesentational State Transfer์˜ ์•ฝ์ž๋กœ ์›น์„œ๋น„์Šค๋ฅผ ๋””์ž์ธํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ชจ๋“  REST API์˜ ์ถ”์ƒํ™”๋Š” ๋ฆฌ์†Œ์Šค์— ์žˆ๋‹ค.
๋„๋ฉ”์ธ์„ ๋ฆฌ์†Œ์Šค๋กœ ๋ถ„ํ• ํ•ด์•ผ ํ•˜๋ฉฐ ๊ฐ ๋ฆฌ์†Œ์Šค๋Š” ํŠน์ • URI๋กœ ์ ‘๊ทผํ•ด ์ฝ๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

REST API ์น˜ํŠธ ์‹œํŠธ

๋™์ž‘URIHTTP ๋ฉ”์„œ๋“œ
๋ชจ๋“  ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐhttps://api.example.com/user/GET
ID๊ฐ€ '1'์ธ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐhttps://api.example.com/user/1GET
์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž ์ƒ์„ฑhttps://api.example.com/user/POST
ID๊ฐ€ '1'์ธ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ ๊ต์ฒดhttps://api.example.com/user/1PUT
ID๊ฐ€ '1'์ธ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธhttps://api.example.com/user/1PATCH
ID๊ฐ€ '1'์ธ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ ์‚ญ์ œhttps://api.example.com/user/1DELETE

PUT ๋ฉ”์„œ๋“œ๋Š” HTTP์š”์ฒญ์˜ ๋ณธ๋ฌธ์— ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์•ผํ•œ๋‹ค.
PATCH ๋ฉ”์„œ๋“œ๋Š” ์ด์ „ ์ƒํƒœ์™€ ์ฐจ์ด๋งŒ ํฌํ•จํ•œ๋‹ค.

โœ”๏ธ XMLHttpRequest

์ฝœ๋ฐฑ์œผ๋กœ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” HTTP ํด๋ผ์ด์–ธํŠธ์˜ ํ•ต์‹ฌ์ธ request ๋ฉ”์„œ๋“œ๋‹ค.

  • ์™„๋ฃŒ๋œ ์š”์ฒญ : onload ์ฝœ๋ฐฑ
  • ์˜ค๋ฅ˜๋กœ ๋๋‚œ HTTP : onerror ์ฝœ๋ฐฑ
  • ํƒ€์ž„์•„์›ƒ๋œ ์š”์ฒญ : ontimeout ์ฝœ๋ฐฑ

๋””ํดํŠธ๋กœ ํƒ€์ž„์•„์›ƒ์€ ์—†์ง€๋งŒ ๊ฐ์ฒด์˜ timeout์†์„ฑ์„ ์ˆ˜์ •ํ•˜๋ฉด ํƒ€์ž„์•„์›ƒ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
HTTP ํด๋ผ์ด์–ธํŠธ์˜ ๊ณต๊ฐœ API๋Š” Promise๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
request๋ฉ”์„œ๋“œ๋Š” ํ‘œ์ค€ XMLHttpRequest์š”์ฒญ์„ ์ƒˆ๋กœ์šด Promise ๊ฐ์ฒด๋กœ ๋ฌถ๋Š”๋‹ค.
๊ณต๊ฐœ ๋ฉ”์„œ๋“œ get,post,put,patch,delete๋Š” ์ฝ”๋“œ๋ฅผ ๋” ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ํ•ด์ฃผ๋Š” request ๋ฉ”์„œ๋“œ์˜ ๋ ˆํผ(์ ์ ˆํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š”)๋‹ค.

XMLHttpRequest๋ฅผ ์‚ฌ์šฉํ•œ HTTP ์š”์ฒญ์˜ ํ๋ฆ„

  1. ์ƒˆ๋กœ์šด XMLHttpRequest ๊ฐ์ฒด ์ƒ์„ฑ
  2. ํŠน์ • URI๋กœ ์š”์ฒญ์„ ์ดˆ๊ธฐํ™”
  3. ์š”์ฒญ(ํ—ค๋” ์„ค์ •, ํƒ€์ž„์•„์›ƒ ๋“ฑ)์„ ๊ตฌ์„ฑ
  4. ์š”์ฒญ ์ „์†ก
  5. ์š”์ฒญ์ด ๋๋‚ ๋•Œ ๊นŒ์ง€ ๋Œ€๊ธฐ
    a. ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ๋๋‚˜๋ฉด onload ์ฝœ๋ฐฑ ํ˜ธ์ถœ
    b. ์š”์ฒญ์ด ์˜ค๋ฅ˜๋กœ ๋๋‚˜๋ฉด onerror ์ฝœ๋ฐฑ ํ˜ธ์ถœ
    c. ์š”์ฒญ์ด ํƒ€์ž„์•„์›ƒ์œผ๋กœ ๋๋‚˜๋ฉด ontimeout ์ฝœ๋ฐฑ ํ˜ธ์ถœ

โœ”๏ธ Fetch

์›๊ฒฉ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๊ณ ์ž ๋งŒ๋“ค์–ด์ง„ ์ƒˆ๋กœ์šด API๋‹ค.
๋ชฉ์ ์€ Request๋‚˜ Response๊ฐ™์€ ๋งŽ์€ ๋„คํŠธ์›Œํฌ ๊ฐ์ฒด์— ๋Œ€ํ•œ ํ‘œ์ค€ ์ •์˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์ด ๋ฐฉ์‹์œผ๋กœ ์ด ๊ฐ์ฒด๋Š” ServieWorker์™€ Cache๊ฐ™์€ ๋‹ค๋ฅธ API์™€ ์ƒํ˜ธ ์šด์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ”๏ธ Axios

๋‹ค๋ฅธ ๋ฐฉ์‹๊ณผ ๊ฐ€์žฅ ํฐ ์ฐจ์ด๋Š” ๋ธŒ๋ผ์šฐ์ €์™€ Node.js์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ํŠน์ง•์ธ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค.
Promise๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  ์žˆ์–ด Fetch API์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜๋‹ค.

โœ”๏ธ ์ ์ ˆํ•œ HTTP API๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•

1. ํ˜ธํ™˜์„ฑ

Fetch API๋Š” ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „ ๋ฒ„์ „์— ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด Axios๋‚˜ XMLHttpRequest๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
์ต์Šคํ”Œ๋กœ๋Ÿฌ์˜ ์ง€์›์˜ ์ค‘๋‹จ์œผ๋กœ Fetch API๋ฅผ ๊ถŒ์žฅํ•œ๋‹ค.

2. ํœด๋Œ€์„ฑ

Fetch API์™€ XMLHttpRequest๋Š” ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜์ง€๋งŒ Node.js๋‚˜ ๋ฆฌ์—‘ํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ๊ฐ™์€ ๋‹ค๋ฅธ JSํ™˜๊ฒฝ์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ axios๊ฐ€ ๋งค์šฐ ์ข‹์€ ์†”๋ฃจ์…˜์ด๋‹ค.

3. ๋ฐœ์ „์„ฑ

Fetch API์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” Request๋‚˜ Response ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๊ด€๋ จ ๊ฐ์ฒด์˜ ํ‘œ์ค€ ์ •์˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์ด ํŠน์„ฑ์€ ServiceWorker API๋‚˜ Cache API์™€ ์ž˜๋งž๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ ๋ฒ ์ด์Šค๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ฐœ์ „์‹œํ‚ค๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐFetch API๋ฅผ ๋งค์šฐ ์œ ์šฉํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

4. ๋ณด์•ˆ

axios์—๋Š” cross-site requet ์œ„์กฐ๋‚˜ XSRF์— ๋Œ€ํ•œ ๋ณดํ˜ธ ์‹œ์Šคํ…œ์ด ๋‚ด์žฅ๋ผ ์žˆ๋‹ค. XMLHttpRequest๋‚˜ Fetch API๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๋ณด์•ˆ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ด ์ฃผ์ œ์— ๋Œ€ํ•œ axios ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์‚ดํŽด ๋ด์•ผ ํ•œ๋‹ค.

5. ํ•™์Šต ๊ณก์„ 

axios๋‚˜ Fetch API ๊ธฐ๋ฐ˜์˜ ์ฝ”๋“œ๋Š” ์ดˆ๋ณด์ž๋„ ์˜๋ฏธ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.
์ฝœ๋ฐฑ ์ž‘์—…์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ XMLHttpRequest๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋ฉด ๋‚ด๋ถ€ API๋ฅผ Promise๋กœ ๋ž˜ํ•‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

profile
A fancy web like a rose

0๊ฐœ์˜ ๋Œ“๊ธ€