1.Express

Express ๋ž€

  1. Node.js๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์—ˆ๋‹ค. ์ฆ‰, Node.js์™€ ๋™์ผํ•œ ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ณ ์„ฑ๋Šฅ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์ด์ƒ์ ์ด๋‹ค.

  2. ๋กœ๊น…, ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ, ์ธ์ฆ ๋“ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ๋ฏธ๋“ค์›จ์–ด ๋ชจ๋“ˆ์„ ์ œ๊ณตํ•œ๋‹ค. ๋˜ํ•œ ๊ณ ์œ ํ•œ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋™์ž‘์„ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

  3. ๋™์  HTML ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Pug(์ด์ „์˜ Jade), EJS ๋ฐ Handlebars๋ฅผ ๋น„๋กฏํ•œ ๋‹ค์–‘ํ•œ ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ์ง€์›ํ•œ๋‹ค.

  4. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ URL ๊ฒฝ๋กœ๋ฅผ ์ •์˜ํ•˜๊ณ  ์ด๋ฅผ ํŠน์ • ์ž‘์—… ๋˜๋Š” ํ•ธ๋“ค๋Ÿฌ์— ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋ผ์šฐํŒ… ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด RESTful API๋ฅผ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•˜๊ณ  ๋ณต์žกํ•œ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  5. ํฌ๊ณ  ํ™œ๋ฐœํ•œ ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์žˆ๋‹ค. ์ฆ‰, ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ํƒ€์‚ฌ ๋ชจ๋“ˆ๊ณผ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ๋‹ค. npm(Node.js ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž)์„ ์‚ฌ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

URL ๊ตฌ์กฐ

  • URL(Uniform Resource Locator)์€ ์ธํ„ฐ๋„ท์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ์ž์—ด์ด๋‹ค.

protocol://domain_name_or_IP_address:port/path?query_string#fragment_identifier

  1. ํ”„๋กœํ† ์ฝœ(Protocol): ํ”„๋กœํ† ์ฝœ์€ HTTP, HTTPS, FTP ๋˜๋Š” SSH์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœํ† ์ฝœ(์ปดํ“จํ„ฐ ๋‚ด๋ถ€์—์„œ, ๋˜๋Š” ์ปดํ“จํ„ฐ ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ์˜ ๊ตํ™˜ ๋ฐฉ์‹์„ ์ •์˜ํ•˜๋Š” ๊ทœ์น™ ์ฒด๊ณ„)์„ ์ง€์ •ํ•œ๋‹ค.

  2. ๋„๋ฉ”์ธ ์ด๋ฆ„ ๋˜๋Š” IP ์ฃผ์†Œ(Domain Name or IP Address): ๋„๋ฉ”์ธ ์ด๋ฆ„ ๋˜๋Š” IP ์ฃผ์†Œ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ์„œ๋ฒ„๋ฅผ ์‹๋ณ„ํ•œ๋‹ค. ๋„๋ฉ”์ธ ์ด๋ฆ„์€ DNS(๋„๋ฉ”์ธ ์ด๋ฆ„ ์‹œ์Šคํ…œ)์— ์˜ํ•ด IP ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜๋˜๋Š” ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ด๋ฆ„์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'www.google.com'์€ IP ์ฃผ์†Œ '216.58.194.174'์— ํ•ด๋‹นํ•˜๋Š” ๋„๋ฉ”์ธ ์ด๋ฆ„์ด๋‹ค.

  3. ํฌํŠธ(Port): ํฌํŠธ ๋ฒˆํ˜ธ๋Š” ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋„คํŠธ์›Œํฌ ํฌํŠธ๋ฅผ ์‹๋ณ„ํ•œ๋‹ค. ํฌํŠธ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ํ”„๋กœํ† ์ฝœ์˜ ๊ธฐ๋ณธ ํฌํŠธ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค(์˜ˆ: HTTP์˜ ๊ฒฝ์šฐ ํฌํŠธ 80).

  4. ๊ฒฝ๋กœ(Path): ๊ฒฝ๋กœ๋Š” ์„œ๋ฒ„์—์„œ ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹์ง€์ •ํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์Šฌ๋ž˜์‹œ๋กœ ๊ตฌ๋ถ„๋œ ์ผ๋ จ์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ฐ ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด URL http://www.example.com/images/logo.png์—์„œ ๊ฒฝ๋กœ๋Š” /images/logo.png์ด๋‹ค.

  5. ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด(Query String): ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์€ ๊ฒ€์ƒ‰ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋˜๋Š” ์–‘์‹ ๋ฐ์ดํ„ฐ์™€ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๋ฌผ์Œํ‘œ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ์•ฐํผ์ƒŒ๋“œ๋กœ ๊ตฌ๋ถ„๋œ ์ผ๋ จ์˜ ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด URL http://www.example.com/search?q=example&limit=10์—์„œ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์—๋Š” q=example ๋ฐ limit=10์ด๋ผ๋Š” ๋‘ ๊ฐœ์˜ ํ‚ค-๊ฐ’ ์Œ์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

  6. ์กฐ๊ฐ ์‹๋ณ„์ž(Fragment Identifier): ์กฐ๊ฐ ์‹๋ณ„์ž๋Š” HTML ๋ฌธ์„œ ๋‚ด์˜ ์„น์…˜๊ณผ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค์˜ ํŠน์ • ๋ถ€๋ถ„์„ ์‹๋ณ„ํ•œ๋‹ค. ํ•ด์‹œ ๊ธฐํ˜ธ(#)๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๋ฌธ์ž์—ด๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด URL http://www.example.com/page.html#section2์—์„œ ํ”„๋ž˜๊ทธ๋จผํŠธ ์‹๋ณ„์ž๋Š” section2์ด๋‹ค.

URL ๊ตฌ์กฐ๋Š” ์ธํ„ฐ๋„ท์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ๊ณ  ์•ก์„ธ์Šคํ•˜๋Š” ํ‘œ์ค€ํ™”๋œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์›น์„ ์‰ฝ๊ฒŒ ํƒ์ƒ‰ํ•˜๊ณ  ํ•„์š”ํ•œ ์ •๋ณด์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค

REST API

REST API๋Š” Representational State Transfer Application Programming Interface์˜ ์•ฝ์ž์ด๋‹ค.

REST๋Š” ์ผ๋ จ์˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์›น ์„œ๋น„์Šค๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์ด๋‹ค.

REST๋Š” ์ฒ˜์Œ์— ์ธํ„ฐ๋„ท๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ๋„คํŠธ์›Œํฌ์—์„œ ํ†ต์‹ ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ง€์นจ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค. ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ๋ชจ๋“  ์žฅ์น˜ ๋˜๋Š” ํ”Œ๋žซํผ์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋ณ๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ์›น ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

API๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ทœ์น™ ๋˜๋Š” ํ”„๋กœํ† ์ฝœ ์ง‘ํ•ฉ์ด๋‹ค.

REST ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์„ ๋”ฐ๋ฅด๋Š” API๋ฅผ REST API๋ผ๊ณ  ํ•œ๋‹ค.

REST API์—๋Š” ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ์›น ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ํŠน์„ฑ์ด ์žˆ๋‹ค. ์ฃผ์š” ํŠน์ง• ์ค‘ ์ผ๋ถ€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ์ƒํƒœ ๋น„์ €์žฅ(Stateless): REST API๋Š” ์ƒํƒœ ๋น„์ €์žฅ์ด๋ฏ€๋กœ ์š”์ฒญ ๊ฐ„์— ํด๋ผ์ด์–ธํŠธ ์ปจํ…์ŠคํŠธ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ํด๋ผ์ด์–ธํŠธ์˜ ๊ฐ ์š”์ฒญ์—๋Š” ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

  2. ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜(Client-server architecture): REST API๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์„œ๋กœ ๋ถ„๋ฆฌ๋˜๊ณ  ๋…๋ฆฝ์ ์ธ ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋”ฐ๋ฅธ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ์š”์ฒญ(request)์„ ๋ณด๋‚ด๊ณ  ์„œ๋ฒ„๋Š” ์‘๋‹ต(response)์„ ๋‹ค์‹œ ๋ณด๋‚ธ๋‹ค.

  3. ํ†ต์ผ๋œ ์ธํ„ฐํŽ˜์ด์Šค(Uniform interface): REST API์—๋Š” ํ†ต์ผ๋œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋‹ค. ์ฆ‰, GET, POST, PUT, DELETE ๋“ฑ๊ณผ ๊ฐ™์€ ํ‘œ์ค€ HTTP ๋ฉ”์„œ๋“œ ์ง‘ํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” API๋ฅผ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

  4. ๋ฆฌ์†Œ์Šค ๊ธฐ๋ฐ˜(Resource-based): REST API๋Š” ๋ฆฌ์†Œ์Šค ๊ธฐ๋ฐ˜์ด๋‹ค. ์ฆ‰, API์˜ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๊ณ ์œ ํ•œ URI(Uniform Resource Identifier)๋กœ ์‹๋ณ„๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฆฌ์†Œ์Šค๋Š” ํŒŒ์ผ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋˜๋Š” ๊ธฐํƒ€ ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ์ผ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์šฉ ๋ฐ์ดํ„ฐ ํ˜•์‹์ธ JSON ๋˜๋Š” XML ํ˜•์‹์ด๋‹ค.

  5. ์บ์‹œ ๊ฐ€๋Šฅ: REST API๋Š” ์บ์‹œ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค. ์ฆ‰, ์„œ๋ฒ„์˜ ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์บ์‹œํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

  6. ๊ณ„์ธตํ™”๋œ ์‹œ์Šคํ…œ: REST API๋Š” ๊ณ„์ธตํ™”๋œ ์‹œ์Šคํ…œ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ๋‹ค. ์ฆ‰, ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์˜ ๊ธฐ๋ณธ ๊ตฌํ˜„์— ๋Œ€ํ•ด ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ „๋ฐ˜์ ์œผ๋กœ REST API๋Š” ๋‹จ์ˆœํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์œ ์—ฐํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ์›น ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•์— ๋„๋ฆฌ ์‚ฌ์šฉ๋œ๋‹ค.

HTTP Method(CRUD)

HTTP(Hypertext Transfer Protocol)๋Š” ์›น ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ํ†ต์‹ ์— ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค. HTTP๋Š” ๋ฆฌ์†Œ์Šค์—์„œ ์ˆ˜ํ–‰ํ•  ์›ํ•˜๋Š” ์ž‘์—…์„ ๋‚˜ํƒ€๋‚ด๋Š” ์š”์ฒญ ๋ฉ”์„œ๋“œ(๋˜๋Š” ๋™์‚ฌ) ์ง‘ํ•ฉ์„ ์ •์˜ํ•œ๋‹ค. HTTP ๋ฉ”์„œ๋“œ๋Š” URL๋กœ ์‹๋ณ„๋˜๋Š” ๋ฆฌ์†Œ์Šค์—์„œ ์ˆ˜ํ–‰ํ•  ์ž‘์—…์„ ์ง€์ •ํ•œ๋‹ค.

  1. GET: GET ๋ฐฉ์‹์€ ์„œ๋ฒ„์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ด๊ฒƒ์€ ์•ˆ์ „ํ•˜๊ณ  ๋ฉฑ๋“ฑ์ ์ธ(idempotent) ๋ฐฉ๋ฒ•์ด๋‹ค. ์ฆ‰, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋™์ผํ•œ ์š”์ฒญ์ด ๋™์ผํ•œ ์‘๋‹ต์„ ์ƒ์„ฑํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. GET ๋ฉ”์„œ๋“œ๋Š” ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋‹ค.

  2. POST: POST ๋ฐฉ์‹์€ ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๋ฆฌ์†Œ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋Š” ์•ˆ์ „ํ•˜๊ฑฐ๋‚˜ ๋ฉฑ๋“ฑ์„ฑ์ด ์•„๋‹ˆ๋‹ค. ์ฆ‰, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋™์ผํ•œ ์š”์ฒญ์ด ๋‹ค๋ฅธ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  3. PUT: PUT ๋ฉ”์„œ๋“œ๋Š” ์„œ๋ฒ„์˜ ๊ธฐ์กด ๋ฆฌ์†Œ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋Š” ๋ฉฑ๋“ฑ์ (idempotent)์ด๋ฉฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋™์ผํ•œ ์š”์ฒญ์ด ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฉฐ ์•ˆ์ „ํ•˜์ง€ ์•Š์•„ ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

  4. DELETE: DELETE ๋ฉ”์†Œ๋“œ๋Š” ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๋ฉฑ๋“ฑ์„ฑ(idempotent)์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋™์ผํ•œ ์š”์ฒญ์ด ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•จ์„ ์˜๋ฏธํ•˜๋ฉฐ ์•ˆ์ „ํ•˜์ง€ ์•Š์•„ ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•จ์„ ์˜๋ฏธํ•œ๋‹ค.

  5. PATCH: PATCH ๋ฐฉ์‹์€ ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค ์ผ๋ถ€๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋Š” ์•ˆ์ „ํ•˜๊ฑฐ๋‚˜ ๋ฉฑ๋“ฑ์„ฑ์ด ์•„๋‹ˆ๋‹ค. ์ฆ‰, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋™์ผํ•œ ์š”์ฒญ์ด ๋‹ค๋ฅธ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  6. HEAD: HEAD ๋ฉ”์†Œ๋“œ๋Š” ๋ฆฌ์†Œ์Šค ์ž์ฒด๋ฅผ ๊ฒ€์ƒ‰ํ•˜์ง€ ์•Š๊ณ  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ—ค๋” ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์•ˆ์ „ํ•˜๊ณ  ๋ฉฑ๋“ฑ์ ์ธ(idempotent) ๋ฐฉ๋ฒ•์ด๋‹ค.

  7. OPTIONS: OPTIONS ๋ฉ”์„œ๋“œ๋Š” ์ง€์›๋˜๋Š” ๋ฉ”์„œ๋“œ ๋ฐ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๊ธฐํƒ€ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์•ˆ์ „ํ•˜๊ณ  ๋ฉฑ๋“ฑ์ ์ธ(idempotent) ๋ฐฉ๋ฒ•์ด๋‹ค.

๋ฉฑ๋“ฑ์„ฑ(Idempotent)

๋™์ผํ•œ ์š”์ฒญ์„ ํ•œ ๋ฒˆ ๋ณด๋‚ด๋Š” ๊ฒƒ๊ณผ ์—ฌ๋Ÿฌ ๋ฒˆ ์—ฐ์†์œผ๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ์ง€๋‹ˆ๊ณ , ์„œ๋ฒ„์˜ ์ƒํƒœ๋„ ๋™์ผํ•˜๊ฒŒ ๋‚จ์„ ๋•Œ, ํ•ด๋‹น HTTP ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์กŒ๋‹ค๊ณ  ๋งํ•œ๋‹ค.

์ฆ‰, ๋ฉฑ๋“ฑ์„ฑ ์—ฐ์‚ฐ์€ ํ•œ ๋ฒˆ ๋˜๋Š” ์—ฌ๋Ÿฌ ๋ฒˆ ์ˆ˜ํ–‰ํ•ด๋„ ๊ฒฐ๊ณผ๋Š” ๋™์ผํ•˜๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‘ ๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋”ํ•˜๋Š” ๊ณ„์‚ฐ๊ธฐ๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์ž. 2 + 3์„ ํ•œ ๋ฒˆ ๋”ํ•˜๋ฉด ๊ฒฐ๊ณผ๋Š” 5๊ฐ€ ๋œ๋‹ค. ๋‹ค์‹œ 2 + 3์„ ๋”ํ•ด๋„ ๊ฒฐ๊ณผ๋Š” ์—ฌ์ „ํžˆ 5๋‹ค. ์ด ์ž‘์—…์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ˆ˜ํ–‰ํ•ด๋„ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋ฏ€๋กœ ์ด ์ž‘์—…์€ ๋ฉฑ๋“ฑ์ ์ด๋‹ค.

์›น ๊ฐœ๋ฐœ์˜ ๋งฅ๋ฝ์—์„œ ๋ฉฑ๋“ฑ์„ฑ์€ ์„œ๋ฒ„์— ๋Œ€ํ•œ ๋ฐ˜๋ณต ์š”์ฒญ์ด ๋‹จ์ผ ์š”์ฒญ๊ณผ ๋™์ผํ•œ ํšจ๊ณผ๋ฅผ ๊ฐ–๋„๋ก ๋ณด์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด HTTP GET ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฆฌ์†Œ์Šค๊ฐ€ ์„œ๋ฒ„์—์„œ ์ˆ˜์ •๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฉฑ๋“ฑ์„ฑ ์ž‘์—…์ด๋‹ค. ๋ฆฌ์†Œ์Šค ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์›ํ•˜๋Š” ๋งŒํผ GET ์š”์ฒญ์„ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜๋ฉด์— HTTP POST ๋ฉ”์„œ๋“œ๋Š” ์–‘์‹์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ œ์ถœํ•˜๋ฉด ์„œ๋ฒ„์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋ผ๋Š” ์—ฌ๋Ÿฌ ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉฑ๋“ฑ์„ฑ์ด ์•„๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์˜๋„ํ•˜์ง€ ์•Š์€ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์š”์•ฝํ•˜๋ฉด ๋ฉฑ๋“ฑ์„ฑ์„ ํ†ตํ•ด ์˜๋„ํ•˜์ง€ ์•Š์€ ๊ฒฐ๊ณผ ์—†์ด ์ž‘์—…์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋™์ž‘์„ ์ผ์œผํ‚ค์ง€ ์•Š๊ณ  ๋ฐ˜๋ณต๋˜๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์€ ์›น ๊ฐœ๋ฐœ์—์„œ ์ค‘์š”ํ•œ ๊ฐœ๋…์ด๋‹ค.

Last updated