๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐Ÿ“„ HTTP Methods

1. RESTful API๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?โ€‹

RESTful API๋Š” ํ‘œ์ค€ํ™”๋œ ๋””์ž์ธ ์Šคํƒ€์ผ์„ ์ฑ„ํƒํ•˜์—ฌ, ๋„คํŠธ์›Œํฌ ์ƒ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ๊ฐ„ ํ†ต์‹ ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. REST ์›์น™์„ ๋”ฐ๋ฅด๊ธฐ ์œ„ํ•ด API๋Š” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ์„œ ๋‹ค์Œ ์„ธ ๊ฐ€์ง€์— ์ฃผ๋กœ ๊ด€์‹ฌ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค:

  • URL ๊ฒฝ๋กœ(url path): ํด๋ผ์ด์–ธํŠธ ์ธก ์š”์ฒญ์˜ ๋ฒ”์œ„๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ:
    • /products: ์ œํ’ˆ ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Œ
    • /products/abc: ์ œํ’ˆ ID๊ฐ€ abc์ธ ์ œํ’ˆ์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์ œ๊ณต
  • HTTP ๋ฉ”์„œ๋“œ: ๊ตฌ์ฒด์ ์ธ ์‹คํ–‰ ๋ฐฉ์‹์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค:
    • GET: ๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์‚ฌ์šฉ
    • POST: ์ƒˆ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ์— ์‚ฌ์šฉ
    • PUT: ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ์— ์‚ฌ์šฉ
    • DELETE: ๋ฐ์ดํ„ฐ ์‚ญ์ œ์— ์‚ฌ์šฉ
  • ์ƒํƒœ ์ฝ”๋“œ(status code): ์š”์ฒญ์˜ ์„ฑ๊ณต ์—ฌ๋ถ€์™€ ์‹คํŒจ ์‹œ ๋ฌธ์ œ์˜ ์›์ธ์„ ๋น ๋ฅด๊ฒŒ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ์ฃผ์š” ์ƒํƒœ ์ฝ”๋“œ:
    • 200: ์„ฑ๊ณต
    • 404: ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ
    • 500: ์„œ๋ฒ„ ์˜ค๋ฅ˜

2. GET์œผ๋กœ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์™œ POST๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋‚˜์š”?โ€‹

GET์œผ๋กœ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์™œ POST๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋‚˜์š”?

์ฃผ๋กœ ๋‹ค์Œ ๋„ค ๊ฐ€์ง€ ๊ณ ๋ ค์‚ฌํ•ญ์— ๊ธฐ๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค:

  1. ๋ณด์•ˆ์„ฑ: GET์˜ ๋ฐ์ดํ„ฐ๋Š” URL์— ์ฒจ๋ถ€๋˜์–ด ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋…ธ์ถœ๋˜๊ธฐ ์‰ฌ์šด ๋ฐ˜๋ฉด, POST๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ์˜ body์— ๋„ฃ์–ด ์ƒ๋Œ€์ ์œผ๋กœ ๋” ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฐ์ดํ„ฐ ํฌ๊ธฐ ์ œํ•œ: GET์€ ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„์˜ URL ๊ธธ์ด ์ œํ•œ(๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ์•ฝ๊ฐ„ ๋‹ค๋ฅด์ง€๋งŒ ๋Œ€๋žต 2048 bytes ์ „ํ›„)์œผ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ ์–‘์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. POST๋Š” ๋ช…๋ชฉ์ƒ ์ œํ•œ์ด ์—†์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ์•…์˜์ ์ธ ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฏธ๋“ค์›จ์–ด ์„ค์ •์œผ๋กœ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด express์˜ body-parser.
  3. ์˜๋ฏธ์  ๋ช…ํ™•์„ฑ: ๊ฐœ๋ฐœ์ž๊ฐ€ ์š”์ฒญ์˜ ๋ชฉ์ ์„ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. GET์€ ๋ณดํ†ต ๋ฐ์ดํ„ฐ ์กฐํšŒ์—, POST๋Š” ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ๋˜๋Š” ์—…๋ฐ์ดํŠธ์— ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ถˆ๋ณ€์„ฑ(Immutability): HTTP ํ”„๋กœํ† ์ฝœ์—์„œ GET ๋ฉ”์„œ๋“œ๋Š” "์•ˆ์ „ํ•œ" ๊ฒƒ์œผ๋กœ ์„ค๊ณ„๋˜์–ด, ๋ช‡ ๋ฒˆ์˜ ์š”์ฒญ์„ ๋ณด๋‚ด๋“  ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ์— ๋ณ€๋™์„ ์ผ์œผํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

3. HTTP์—์„œ PUT ๋ฉ”์„œ๋“œ์˜ ์—ญํ• ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?โ€‹

PUT ๋ฉ”์„œ๋“œ์˜ ์šฉ๋„๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

์ฃผ๋กœ ๋‘ ๊ฐ€์ง€ ์šฉ๋„์ž…๋‹ˆ๋‹ค:

  1. ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธ (์˜ˆ: ์‚ฌ์šฉ์ž ์ •๋ณด ์ˆ˜์ •)
  2. ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ƒˆ๋กœ ์ƒ์„ฑ

Exampleโ€‹

const axios = require('axios');

async function updateUser(userId, newName) {
const url = `https://api.example.com/users/${userId}`; // api URL
const data = {
name: newName,
};

try {
const response = await axios.put(url, data); // PUT ์š”์ฒญ ์‹คํ–‰
console.log('User updated:', response.data); // ์—…๋ฐ์ดํŠธ๋œ ์‚ฌ์šฉ์ž ์ •๋ณด ์ถœ๋ ฅ
} catch (error) {
console.log('Error updating user:', error); // ์—๋Ÿฌ ์ •๋ณด ์ถœ๋ ฅ
}
}

updateUser(1, 'Pitt Wu');