๐Ÿ’ป Computer Science

05. HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹ - ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก

์• ์ •์“ฐ 2021. 5. 4. 09:32

 

๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ฐฉ์‹์€ ํฌ๊ฒŒ 2๊ฐ€์ง€์ด๋‹ค.

 

1. ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก

 - GET
 - ์ฃผ๋กœ ์ •๋ ฌ ํ•„ํ„ฐ(๊ฒ€์ƒ‰์–ด)

2. ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก

 - POST, PUT, PATCH

 - ํšŒ์› ๊ฐ€์ž…, ์ƒํ’ˆ ์ฃผ๋ฌธ, ๋ฆฌ์†Œ์Šค ๋“ฑ๋ก, ๋ฆฌ์†Œ์Šค ๋ณ€๊ฒฝ

 

์˜ˆ์‹œ)

 

1. ์ •์  ๋ฐ์ดํ„ฐ ์กฐํšŒ - ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฏธ์‚ฌ์šฉ

GET /static/start.jpg -> ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ๋กœ๋งŒ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

2. ๋™์  ๋ฐ์ดํ„ฐ ์กฐํšŒ - ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์‚ฌ์šฉ

GET /search?q=hello&hl=ko 

 

- ์ฃผ๋กœ ๊ฒ€์ƒ‰, ๊ฒŒ์‹œํŒ ๋ชฉ๋ก์—์„œ ์ •๋ ฌ ํ•„ํ„ฐ(๊ฒ€์ƒ‰์–ด)

- ์กฐํšŒ ์กฐ๊ฑด์„ ์ค„์—ฌ์ฃผ๋Š” ํ•„ํ„ฐ, ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•˜๋Š” ์ •๋ ฌ ์กฐ๊ฑด์— ์ฃผ๋กœ ์‚ฌ์šฉ

- ์กฐํšŒ๋Š” GET ์‚ฌ์šฉ

- GET์€ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ

 

3. HTML Form ๋ฐ์ดํ„ฐ ์ „์†ก - GET, POST ๋งŒ ์ง€์›ํ•œ๋‹ค.

POST ์ „์†ก - ์ €์žฅ

<form action="/save" method="post">
	<input type="text" name="name"/>
	<input type="text" name="age"/>
	<button type="submit">์ „์†ก</button>
</form>

 

์ด๋Ÿฌํ•œ HTML Form ์ด ์žˆ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ input์„ ์ฑ„์šฐ๊ณ  ์ „์†ก ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ฒŒ ๋  ๋•Œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฌด์Šจ์ผ์ด ์ƒ๊ธธ๊นŒ?

์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์•„๋ž˜์™€๊ฐ™์ด HTTP ๋ฉ”์‹œ์ง€๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์„œ๋ฒ„๋กœ ์ „์†กํ•œ๋‹ค.

 

POST /save HTTP/1.1      (์‹œ์ž‘๋ผ์ธ)

Host: localhost:8080     (header)

Content-Type: application/x-www-form-urlencoded    (header)

 

name=aejeong&age=28   (body)

 

Content-Type ์€ ๋ญ˜๊นŒ?

์ „์†ก ๋ฐ์ดํ„ฐ๋ฅผ url encoding ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด asc๊น€ -> abc%EA%B9%80 

 

๋งŒ์•ฝ form์— method="get" ์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์ด ์•„๋ž˜์™€ ๊ฐ™์ด ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์œผ๋กœ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.

 

GET /save?name=aejeong&age=28 HTTP/1.1

Host: localhost:8080

 

ํ•˜์ง€๋งŒ ์ €์žฅํ•˜๋Š” ๋กœ์ง์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์กฐํšŒํ• ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด๋‹ค. ์ฃผ์˜!

 

4. HTML Form ๋ฐ์ดํ„ฐ ์ „์†ก

multipart/form-data

๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ์—ฌ๋Ÿฌ ํŒŒ์ผ๊ณผ ํผ์˜ ๋‚ด์šฉ ํ•จ๊ป˜ ์ „์†ก ๊ฐ€๋Šฅ , ์ฃผ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP - ๊น€์˜ํ•œ / ์ธํ”„๋Ÿฐ

 HTTP API ๋ฐ์ดํ„ฐ ์ „์†ก

1. ์„œ๋ฒ„ to ์„œ๋ฒ„

 - ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ ํ†ต์‹ 

2. ์•ฑ ํด๋ผ์ด์–ธํŠธ

 - ์•„์ดํฐ, ์•ˆ๋“œ๋กœ์ด๋“œ

3. ์›น ํด๋ผ์ด์–ธํŠธ

 - HTML ์—์„œ Form ์กด์†ก ๋Œ€์‹  ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ต์‹ ์— ์‚ฌ์šฉ(AJAX)

 - React, VueJs ๊ฐ™์€ ์›น ํด๋ผ์ด์–ธํŠธ์™€ API ํ†ต์‹ 

4. POST, PUT, PATCH ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ „์†ก

5. GET : ์กฐํšŒ, ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ

6. Content-Type: application/json์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. -> ์‚ฌ์‹ค์ƒ ํ‘œ์ค€

 - TEXT,XML,JSON ๋“ฑ๋“ฑ

 

 

HTTP API ์„ค๊ณ„

1. HTTP API - ์ปฌ๋ ‰์…˜

 - POST ๊ธฐ๋ฐ˜ ๋“ฑ๋ก

 - ์˜ˆ) ํšŒ์› ๊ด€๋ฆฌ API ์ œ๊ณต

 ํด๋ผ์ด์–ธํŠธ๋Š” ๋“ฑ๋ก๋  ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ๋ชจ๋ฅธ๋‹ค. -> ์„œ๋ฒ„๊ฐ€ ์ƒˆ๋กœ ๋“ฑ๋ก๋œ ๋ฆฌ์†Œ์Šค URI๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค. (Location: members/100)

 ์ปฌ๋ ‰์…˜์ด๋ž€? 

 ์„œ๋ฒ„๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ, ์„œ๋ฒ„๊ฐ€ ๋ฆฌ์†Œ์Šค URI๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌ ์˜ˆ) /members

 

2. HTTP API - ์Šคํ† ์–ด

 - PUT ๊ธฐ๋ฐ˜ ๋“ฑ๋ก

 - ์˜ˆ) ์ •์  ์ปจํ…์ธ  ๊ด€๋ฆฌ, ์›๊ฒฉ ํŒŒ์ผ ๊ด€๋ฆฌ

 ์˜ˆ๋ฅผ๋“ค์–ด ํŒŒ์ผ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์—์„œ ํŒŒ์ผ๋“ฑ๋ก์„ ํ• ๋•Œ ๊ธฐ์กดํŒŒ์ผ์„ ์ง€์šฐ๊ณ  ๋Œ€์ฒด ํ•˜๊ฑฐ๋‚˜, ์—†์„ ๋•Œ ์ƒ์„ฑํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด PUT method๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค URI๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. -> ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง์ ‘ ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ์ง€์ •ํ•œ๋‹ค. (์Šคํ† ์–ด)

PUT /files/star.jpg 

 

์Šคํ† ์–ด๋ž€?

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ์ €์žฅ์†Œ

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ์•Œ๊ณ  ๊ด€๋ฆฌ ์˜ˆ) /files/start.jpg

 

3. HTTP FORM ์‚ฌ์šฉ

 - ์›น ํŽ˜์ด์ง€ ํšŒ์› ๊ด€๋ฆฌ

 - GET, POST๋งŒ ์ง€์›

 

HTML FORM ์‚ฌ์šฉ

HTML FORM์€ GET,POST๋งŒ ์ง€์›ํ•ด์„œ ์ œ์•ฝ์ด ์žˆ๋‹ค.

์ด๋Ÿฐ ์ œ์•ฝ์œผ๋กœ ์ปจํŠธ๋กค URI ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ. ๋™์‚ฌ๋กœ ๋œ ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.

POST ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  /members/new , /members/{id}/delete ๋“ฑ HTTP ๋ฉ”์„œ๋“œ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์• ๋งคํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. -> ์‹ค๋ฌด์—์„œ๋Š” ์• ๋งคํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฌด์‹ํ•˜๊ฒŒ ์“ฐ์ง€๋ง๊ณ  ์ตœ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค URI๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋˜ ์• ๋งคํ• ๋•Œ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.

 

API ์„ค๊ณ„์‹œ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์€ ๊ฐœ๋…

restfulapi.net/resource-naming/

 

 

๋ฐ˜์‘ํ˜•