Part.2 HTTP
๐ ์ด ๊ธ์ ์ ์ฐ๋๊ฐ
์ฌ์ค ์ด ๊ธ์ ์ฐ๊ธฐ ์ํด ์น ์๋ฒ๋ ๋ฌด์์ธ๊ฐ๋ฅผ ์์ฑํ๋ค. ํ์ ๋คํธ์ํฌ์ ๊ด์ฌ์ด ๋ง์ ํต์ ์ ์ด๋ป๊ฒ ํ๋์ง ๋ ๋ฐฑ์๋ API get, post ๋ฑ์ ์๋ฆฌ๊ฐ ์ ํํ ์ดํด๋์ง ์์๋๋ฐ ๋ง์นจ ๊น์ํ๋์ ๊ฐ์๊ฐ ๋์ ๋์๊ณ ์ง๊ธ ์ด๊ฑธ ๊ณต๋ถํด๋ ๋๋? ์ถ์ ํ์ด๋ฐ์ด์์ง๋ง ๊ถ๊ธํ ๋ ํด๋ฌ์ผ ์ธ์ ๊ฐ ์ฐ๋ฆฌ ํ๋ฉฐ ์ฟจ๊ฒฐ์ ํ ๋ฐ๋ก 5h30m ์์ฒญ์ ํ๋ค. ์ฌ์ค ๋ง์ง๋ง API ์ค๊ณ, ์ํ ์ฝ๋, ํค๋ ๋ฑ์ ๋ค์ ํ๋ฒ ๋ด์ผ๊ฒ ์ง๋ง ๊ทธ๋๋ ๋ญ, http๋ฅผ ์ ํํ ์ ๊ฒ๋ง์ผ๋ก ์ฒซ ๊ณต๋ถ๋ ์ฑ๊ณต์ด๋ค! ๊ณ ๋ก ๊ทธ ๋ด์ฉ์ ์ ๋ฆฌํด ๋ณด๋ ค ํ๋ค.
๋คํธ์ํฌ ๊ด๋ฆฌ์ฌ ๊ณต๋ถ ๋ค์ ํด์ผํ๋..
๐ฅ ๊ฐ์ ์ ๋ณด: ๋ชจ๋ ๊ฐ๋ฐ์๋ฅผ ์ํ HTTP ์น ๊ธฐ๋ณธ ์ง์
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC
1. ์ธํฐ๋ท ๋คํธ์ํฌ
- ์ธํฐ๋ท์์์ ์ด๋ค ์์ผ๋ก ํต์ ์ด ์ผ์ด๋๋๊ฐ
- ์ด๋ค ๊ท์น์ผ๋ก ๋ชฉ์ ์ง๊น์ง ์์ ํ๊ฒ ๋์ฐฉํ ๊น?
- IP, TCP, UDP, PORT, DNS ๋ฑ ์ธํฐ๋ท ๋คํธ์ํฌ์ ๋ํด์ ๊ณต๋ถํด๋ณผ ํ ๋ค
1-1. IP
- ip(์ธํฐ๋ท ํ๋กํ ์ฝ): ์ต์ํ์ ๊ท์น
- ์ง์ ํ ip์ฃผ์์ ๋ฐ์ดํฐ ์ ๋ฌ(ํจํท)
- ์๋ค ๊ฐ๋ค ๋ฃจํธ๊ฐ ๋ค๋ฅผ ์ ์๋ค.
- ํ๊ณ: ๋น์ฐ๊ฒฐ์ฑ(๋์์ด ์๋น์ค ๋ถ๋ฅ์ธ๋ฐ ํจํท ์ ์ก), ๋น์ ๋ขฐ์ฑ(์ค๊ฐ ์๋ฒ๊ฐ ๋ฌธ์ ์๊ฒจ์ ํจํท ์์ค), ํ๋ก๊ทธ๋จ ๊ตฌ๋ถ X(ํจํท ์ ๋ฌ ์์ ๋ฌธ์ ๋ฐ์)
- ์ด๊ฑธ ํด๊ฒฐํด ์ฃผ๋ ๊ฒ TCP
- ip ์์ tcp๋ฅผ ์น์ด์ ๋ณด์ํด์ค๋ค.
- ํ๋กํ ์ฝ ๊ณ์ธต: ์ ํ๋ฆฌ์ผ์ด์
, os, ๋คํธ์ํฌ ์ธํฐํ์ด์ค
1-2. TCP
- TCP segment: ์ถ๋ฐ์ง port, ๋ชฉ์ ์ง port, ์ ์ก ์ ์ด, ์์, ๊ฒ์ฆ ์ ๋ณด ๋ฑ์ด ๋ค์ด๊ฐ๋ค.
- TCP(์ ์ก ์ ์ด ํ๋กํ ์ฝ) ํน์ง: ์ฐ๊ฒฐ ์งํฅ(์ฐ๊ฒฐ ํ์ธ), ๋ฐ์ดํฐ ์ ๋ฌ ๋ณด์ฆ(์ค๊ฐ์ ๋๋ฝ๋๋ฉด ๋ด๊ฐ ์ ์ ์๋ค), ์์ ๋ณด์ฅ, ์ ๋ขฐํ ์ ์๋ ํ๋กํ ์ฝ, ํ์ฌ๋ ๋๋ถ๋ถ tcp ์ฌ์ฉ
- ์ฐ๊ฒฐ ์งํฅ: TCP 3 way handshake(๊ฐ์์ฐ๊ฒฐ์)
SYN(์ ์ ์์ฒญ) -> SYN(์ฐ๊ฒฐ ์์ด? ์ค์ผ ๋๋ ์ฐ๊ฒฐ ๊ฐ๊ฒ ์๋ต) -> ACK(์์ฒญ ์๋ฝ) -> ACK(์ ๋๋ ์์ฒญ์๋ฝ) -> ๋ฐ์ดํฐ ์ ์ก - ๋ฐ์ดํฐ ์ ๋ฌ ๋ณด์ฆ: ๋ฐ์ดํฐ ์ ์ก -> ๋ฐ์ดํฐ ์ ๋ฐ์์์ด๋ผ๊ณ ๋ณด๋ด์ค(์๋ต ์ํด์ค๋ค)
- ์์ ๋ณด์ฅ: ์์ ์๋ชป ๊ฐ๋ฉด ํด๋ผ์ด์ธํธํํ ์๋ฒ๊ฐ "์ผ ํจํท 2๋ถํฐ ๋ค์ ๋ณด๋ด"ํ๊ณ ์๋ ค์ค
- ์ฐ๊ฒฐ ์งํฅ: TCP 3 way handshake(๊ฐ์์ฐ๊ฒฐ์)
1-3. UDP
- UDP(์ฌ์ฉ์ ๋ฐ์ดํฐ๊ทธ๋จ ํ๋กํ ์ฝ) ํน์ง: ํ์ ๋ํ์ง์ ๋น์ (๊ธฐ๋ฅ์ด ๊ฑฐ์ ์์) ํ์ง๋ง, +port(ํ๋์ ip์์ ์ด๋ค ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋ณด๋ด์ผ ํ๋์ง ์๋ ๊ฒ) + ์ฒดํฌ์ฌ(๋ฉ์์ง ๊ฒ์ฆ ๋ฐ์ดํฐ) ์ ๋๋ง ์ถ๊ฐ so ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ถ๊ฐ ์์ ํ์
- tcp 3 way handshake ํ๋ ค๋ฉด ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค, ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ ๋ค ๋ฃ๊ณ ํ๋ฉด ๋ฐ์ดํฐ ์๋ ํฌ๊ณ ์ ์ก์๋๋ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ด๋ ต๋ค. ์ฆ tcp๋ ์ด๋ฏธ ์์ ๋ชป ๋๋ค. ๊ทธ๋์ ๋ ์ต์ ํํ๋ ค๊ณ udp์ ์์ ๋๋ ๊ฒ
- http3 ์คํ์ด udpํ๋กํ ์ฝ ์ฐ๋ฉด์ ๊ต์ฅํ ๋จ๊ณ ์์
1-4. PORT
- ํด๋ผ์ด์ธํธ pc๊ฐ ํ ๋ฒ์ ๋ ๊ฐ ์ด์ ์๋ฒ์ ์ฐ๊ฒฐํด์ผ ํ๋ฉด?
- port: ip๋ ๋ชฉ์ ์ง ์๋ฒ๋ฅผ ์ฐพ๋ ๊ฒ, port๋ ์๋ฒ ์์์ ๋์๊ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐพ๋ ๊ฒ ์ฆ ๊ฐ์ ip ๋ด์์ ํ๋ก์ธ์ค ๊ตฌ๋ถํ๋ ๊ฒ( ip๋ ์ํํธ port๋ ๋ช ๋ ๋ช ํธ)
- port: 0 ~ 65535 ํ ๋น ๊ฐ๋ฅ/ 0 ~ 1023 ์ ์๋ ค์ง ํฌํธ, ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์/ FTP 20,21/ TELNET 23/ HTTP 80/ HTTPS 443
1-5. DNS
- ip๋ ๊ธฐ์ตํ๊ธฐ ์ด๋ ต๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝ๋ ์๋ ์์.
- DNS(๋๋ฉ์ธ ๋ค์ ์์คํ ): ์ ํ๋ฒํธ๋ถ ๊ฐ์ ์๋ฒ๋ฅผ ์ ๊ณต, ๋๋ฉ์ธ ๋ช ์ ip์ฃผ์๋ก ๋ณํํด ์ค
- ํด๋ผ์ด์ธํธ๊ฐ DNS ์๋ฒ์ ๋๋ฉ์ธ ๋ช ๋ฑ๋ก -> ip์ฃผ์๋ก ์๋ต -> ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก ์ ์
1-6. URI
- URI(uniform Resource Identifier): resource๋ฅผ ์๋ณํ๋ ํตํฉ๋ ๋ฐฉ๋ฒ
- URI: URL/ URN: URI๋ ๋ก์ผ์ดํฐ(locator)(๊น์ํ์ด ์ฌ๊ธฐ์ ์์ด์)(๋ฆฌ์์ค๊ฐ ์๋ ์์น๋ฅผ ์ง์ ), ์ด๋ฆ(name)(๊น์ํ)(๋ฆฌ์์ค์ ์ด๋ฆ์ ๋ถ์ฌ). (doc์ฐธ๊ณ )
- URL: scheme(ํ๋กํ ์ฝ ์ ๋ณด) - authority(ํธ์คํธ๋ช
) - path(ํฌํธ๋ฒํธ, ๊ฒฝ๋ก) - query(์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ) - fragmnet
: scheme://[userinfo@]host[:port][/path][?query][#fragment]- ์คํค๋ง: ์ฃผ๋ก ํ๋กํ ์ฝ ์ฌ์ฉ, ์ด๋ค ๋ฐฉ์์ผ๋ก ์์์ ์ ๊ทผํ ๊ฒ์ธ๊ฐ ํ๋ ์ฝ์ ๊ท์น/ http๋ 80ํฌํธ, https๋ 443ํฌํธ๋ฅผ ์ฃผ๋ก ์ฌ์ฉ, ํฌํธ๋ ์๋ต ๊ฐ๋ฅ
- ํธ์คํธ๋ช : ๋๋ฉ์ธ๋ช ๋๋ ip๋ช ์ง์ ์ ๋ ฅ
- ํฌํธ: ์ ์ ํฌํธ ์ผ๋ฐ์ ์ผ๋ก ์๋ต
- path: ๋ฆฌ์์ค ๊ฒฝ๋ก, ๊ณ์ธต์ ๊ตฌ์กฐ
- query: key=value ํํ/ ?๋ก ์์, &๋ก ์ถ๊ฐ ๊ฐ๋ฅ/ query parameter, query string ๋ฑ์ผ๋ก ๋ถ๋ฆผ, ์น์๋ฒ์ ์ ๊ณตํ๋ ํ๋ผ๋ฏธํฐ, ๋ฌธ์ ํํ(์ซ์๋ฅผ ์ ์ด๋ ๋ฌธ์๋ก ๋์ด๊ฐ๋ค)
- fragment: ์ ์ฌ์ฉํ์ง ์๋๋ฐ html ๋ด๋ถ ๋ถ๋งํฌ ๋ฑ์ ์ฌ์ฉ, ์๋ฒ์ ์ ์กํ๋ ์ ๋ณด ์๋
- URN:scheme - path
- ์์น๋ ๋ณํ ์ ์์ง๋ง, ์ด๋ฆ์ ๋ณํ์ง ์๋๋ค. urn ์ด๋ฆ๋ง์ผ๋ก ์ค์ ๋ฆฌ์์ค๋ฅผ ์ฐพ์ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ณดํธํ๋์ง ์์. ๊ทธ๋ฌ๋ ์์ผ๋ก uri๋ฅผ url๊ณผ ๊ฐ์ ์๋ฏธ๋ก ์ด์ผ๊ธฐํ๊ฒ ์
1-7 ์น ๋ธ๋ผ์ฐ์ ์์ฒญ ํ๋ฆ
- ์น ๋ธ๋ผ์ฐ์ ์์ฒญ ํ๋ฆ: ์น ๋ธ๋ผ์ฐ์ ์คํ -> DNS ์กฐํ -> ip ๋์ด -> port ์ ๋ณด ์ฐพ์ -> http ์์ฒญ ๋ฉ์ธ์ง ์์ฑ -> http ๋ฉ์ธ์ง ์ ์ก(์น๋ธ๋ผ์ฐ์ -> socket ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ์ ๋ฌ(tcp/ip ์ฐ๊ฒฐ-> ๋ฐ์ดํฐ ์ ๋ฌ) -> tcp/ip ํจํท ์์ฑ, http ๋ฉ์ธ์ง ํฌํจ-> ์ธํฐ๋ท-> ์๋ฒ)
- ์์ฒญ ํจํท ์ ๋ฌ(์ธํฐ๋ท๋ง์ผ๋ก ๋์ง๊ณ ๋ ธ๋๋ฅผ ํตํด์ ์๋ฒ๋ก ๊ฐ) -> ์์ฒญ ํจํท ๋์ฐฉ(tcp/ip ํจํท ๋ค ๊น์ ๋ฒ๋ฆฌ๊ณ http ๋ฉ์์ง๋ง ๋์ง์ด๋ด์ ํด์์ ํ๋ค) -> ์๋ฒ์์ http ์๋ต ๋ฉ์์ง๋ฅผ ๋ง๋ค์ด ๋(content-type ์ค์) -> ํจํท ์์ฐ๊ณ ๋ ์น๋ธ๋ผ์ฐ์ ์ ์๋ต ๋ณด๋ -> ์น๋ธ๋ผ์ฐ์ ๊ฐ ์๋ต ๋ฉ์ธ์ง๋ฅผ ๋ฐ๊ณ ๊น์ ๋ฐ๋ก ์น๋ธ๋ผ์ฐ์ html ๋ ๋๋ง -> ์ฐ๋ฆฌ๊ฐ ๋ณธ๋ค
2. ๋ชจ๋ ๊ฒ์ด HTTP
- http(hypertext transfer protocol): ๊ฑฐ์ ๋ชจ๋ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ก ๊ฐ๋ฅ, ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋๋ ๋๋ถ๋ถ http ์ฌ์ฉ/ 1.1 1997๋ : ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ, ์ฐ๋ฆฌ์๊ฒ ๊ฐ์ฅ ์ค์ํ ๋ฒ์ /2 2015๋ : ์ฑ๋ฅ ๊ฐ์ / 3 ์งํ ์ค: tcp ๋์ ์ udp ์ฌ์ฉ, ์ฑ๋ฅ ๊ฐ์ ์ ์ด์
- ๊ธฐ๋ฐ ํ๋กํ ์ฝ: http 1.1 ์ฃผ๋ก ์ฌ์ฉ(์ด ์คํ์ ์ ์๋ฉด ๋จ), 2์ 3๋ ์ ์ ์ฆ๊ฐ( f11 ๋๋ฌ์ protocol ๋ณด๋ฉด h2, h3 ๋ณผ ์ ์์)
- ํน์ง: ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ/ ๋ฌด์ํ ํ๋กํ ์ฝ(์คํ ์ด์ค ๋ฆฌ์ค), ๋น์ฐ๊ฒฐ์ฑ, http ๋ฉ์์ง, ๋จ์ํจ, ํ์ฅ ๊ฐ๋ฅ
2-1. ํด๋ผ์ด์ธํธ - ์๋ฒ ๊ตฌ์กฐ
- ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ
:request response ๊ตฌ์กฐ
:ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ต์ ๋๊ธฐ
:์๋ฒ๊ฐ ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด์ ์๋ต - ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ฅผ ๊ฐ๋ ์ ์ผ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ ์ค์ํจ, ๋น์ฆ๋์ค ๋ก์ง, ๋ฐ์ดํฐ ๊ฐ์ ๊ฑด ์๋ฒ์ ๋ค ๋ฃ๊ณ , ui๋ ์ฌ์ฉ์ฑ์ ํด๋ผ์ด์ธํธ์ ์ง์ค. ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐ์ ํ ์ ์๋ค. ๋น์ฆ๋์ค๊ฐ ์๋ผ์ ํธ๋ํฝ์ด ํญํ๋๋ฉด ์๋ฒ์ ์ํคํ ์ฒ, ๋ฐฑ์๋ ๊ณ ๋ํ๋ฅผ ๊ณ ๋ฏผํ๋ฉด ๋จ. ํด๋ผ์ด์ธํธ๋ ๊ฑด๋ค ํ์ ์์ด.
2-2. Stateful, Stateless
- ๋ฌด์ํ ํ๋กํ ์ฝ(์คํ ์ดํธ๋ฆฌ์ค stateless)
- ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ๋ณด์กดํ์ง ์๋๋ค: stateful๊ณผ stateless์ ์ฐจ์ด. ๋ฐฑํ์ ์์ ํ ์ ๋ฌํํ ๋์๋ฐ์ผ๋ฉด context๋ฅผ ๋ณด์ , ๊ฐ์๊ธฐ ์ ๋ฌ๊ฐ ์ค๊ฐ์ ๋ฐ๋๋ฉด context ๋ณด์ ์ด ์๋จ.
์ํ ์ ์ง์์ ์ค๊ฐ์ ์ ์์ด ๋ฐ๋๋ฉด ๊ผฌ์ธ๋ค. ์ํ ์ ๋ณด๋ฅผ ๋ฐ๋ ์ ์์๊ฒ ๋ฏธ๋ฆฌ ๋ค ์๋ ค์ค์ผ ํ๋๊น. ๊ทผ๋ฐ ๋ฌด์ํ์์ ์ค๊ฐ์ ์ ์์ด ๋ฐ๋์ด๋ ๋๋ค. ๊ฐ์๊ธฐ ๊ณ ๊ฐ์ด ์ฆ๊ฐํด๋ ์ ์์ ๋๊ฑฐ ํฌ์ ํ ์ ์๋ค. ๊ฐ์๊ธฐ ํด๋ผ์ด์ธํธ ์์ฒญ์ด ์ฆ๊ฐํด๋ ์๋ฒ๋ฅผ ๋๊ฑฐ ํฌ์ ํ ์ ์๋ค. ์ฆ ๋ฌด์ํ๋ ์๋ต ์๋ฒ๋ฅผ ์ฝ๊ฒ ๋ฐ๊ฟ ์ ์๋ค -> ๋ฌดํํ ์๋ฒ ์ฆ์ค ๊ฐ๋ฅ
- stateful(์ํ ์ ์ง): ํญ์ ๊ฐ์ ์๋ฒ๊ฐ ์ ์ง๋์ด์ผ ํ๋ค. ๊ทธ๋์ ์ด ์๋ฒ๊ฐ ์ฃฝ์ผ๋ฉด ์๋ต์ด ์ค์ง ์์
- stateless(๋ฌด์ํ): ์๋ฌด ์๋ฒ๋ ํธ์ถํด๋ ๋๋ค. ๊ทธ๋์ ์๋ฒ 1๋ฒ์ด ์ฅ์ ๊ฐ ๋๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ค๊ณ์๋ฒ๊ฐ ์๋ฒ 2๋ฒ์ผ๋ก ๋์ง ์ ์๋ค.
so, ์ค์ผ์ผ ์์(์๋ฒ๋ฅผ ์ํ์ผ๋ก ํ์ฅํ๋ ๊ฒ)์ด ๊ฐ๋ฅํ๊ณ ์ ๋ฆฌํจ. ์ด๋ฒคํธ ํ์ด์ง๊ฐ ์์ผ๋ฉด ์ฅ๋น๋ฅผ ์๋ฐฑ ๋ ํ ๋๋ ค๋ฒ๋ฆฌ๋ฉด ๋~
but, ์ค๋ฌด ํ๊ณ๊ฐ ์๋ค
- ๋ชจ๋ ๊ฒ์ ๋ฌด์ํ๋ก ์ค๊ณํ ์ ์๋ ๊ฒฝ์ฐ๋ ์๊ณ ์๋ ๊ฒฝ์ฐ๋ ์๋ค.
- ๋ฌด์ํ: ๋ก๊ทธ์ธ์ด ํ์ ์๋ ๋จ์ํ ์๋น์ค ์๊ฐ ํ๋ฉด/ ์ํ ์ ์ง: ๋ก๊ทธ์ธ
- ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ๊ฒฝ์ฐ ๋ก๊ทธ์ธํ๋ค๋ ์ํ๋ฅผ ์๋ฒ์ ์ ์ง(๋ธ๋ผ์ฐ์ ์ ์๋ ์ฟ ํค์ ์๋ฒ์ ์ธ์ ์ ์กฐํฉํด์ ์ํ๋ฅผ ์ ์งํ๋ ๊ธฐ๋ฅ์ ์ด๋ค. ์ธ์ ์๋ฒ๊ฐ ์ฃฝ์ด๋ฒ๋ฆฌ๋ฉด ๋ก๊ทธ์ธ์ด ํ๋ฆฐ๋ค. ๊ทธ๋์ ์ํ ์ ์ง๋ ์ต์ํ๋ง ์ฌ์ฉ)
- stateful ๋ณด๋ค ๋ฐ์ดํฐ๋ฅผ ๋๋ฌด ๋ง์ด ๋ณด๋ธ๋ค.
2-3. ๋น ์ฐ๊ฒฐ์ฑ(connectionless)
- ๋น์ฐ๊ฒฐ์ฑ(connectionless)
- ์๋ฒ๊ฐ ์ฐ๊ฒฐ์ ๊ณ์ ์ ์งํ๋ฉด ์๋ฒ ์์์ ์๋ชจํ ์๋ฐ์ ์๋ค. ๊ทผ๋ฐ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ฐ๊ฒฐ์ ๊ณ์ ์ ์งํ์ง ์์๋ ๋๋ฉด ์ฆ ์์ฒญํ ๋๋ง ์ฐ๊ฒฐ์ ํ๋ฉด ๋๋ค๋ฉด ์๋ฒ๋ ์ต์ํ์ ์์๋ง ์ ์งํ๋ฉด ๋๋ค.
- http๋ ๊ธฐ๋ณธ์ด ์ฐ๊ฒฐ์ ์ ์งํ์ง ์๋ ๋ชจ๋ธ
- ์ผ๋ฐ์ ์ผ๋ก ์ด ๋จ์์ ์ดํ์ ๋น ๋ฅธ ์๋๋ก ์๋ต
- 1์๊ฐ ๋์ ์์ฒ ๋ช ์ด ์๋น์ค๋ฅผ ์ฌ์ฉํด๋ ์ค์ ์๋ฒ์์ ๋์์ ์ฒ๋ฆฌํ๋ ์์ฒญ์ ์์ญ ๊ฐ ์ดํ๋ก ๋งค์ฐ ์์
- ์๋ฒ ์์์ ๋งค์ฐ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์
- but ๋จ์ ์ด ์๋ค.
- tcp/ip ์ฐ๊ฒฐ์ ์๋ก ๋งบ์ด์ผ ํจ : 3 way handshake ์๊ฐ ์ถ๊ฐ
- ์น ๋ธ๋ผ์ฐ์ ๋ก ์ฌ์ดํธ๋ฅผ ์์ฒญํ๋ฉด html๋ฟ๋ง ์๋๋ผ js, css, ์ถ๊ฐ ์ด๋ฏธ์ง ๋ฑ ์๋ง์ ์์์ด ํจ๊ป ๋ค์ด๋ก๋
- ์ง๊ธ์ http ์ง์ ์ฐ๊ฒฐ(persistent connections)๋ก ๋ฌธ์ ํด๊ฒฐ
- http/2, http/3์์ ์ต์ ํ๋จ(์ด๊ธฐ์ ์ง๊ธ ๋น๊ตํ ๊ฒ)(์ฐ๊ฒฐ-์์ฒญ-์๋ต ์ฐ๊ฒฐ-์์ฒญ-์๋ต ์ด๋ฌ๋๋ฐ ์ฐ๊ฒฐ-์์ฒญ-์๋ต-์์ฒญ-์๋ต-์ข ๋ฃ ์ด๋ ๊ฒ ๋จ)
- ์คํ ์ด์ค๋ฆฌ์ค๋ฅผ ๊ธฐ์ตํ์(์๋ฒ ๊ฐ๋ฐ์๋ค์ด ์ด๋ ค์ํ๋ ์ ๋ฌด)
- ์ ๋ง ๊ฐ์ ์๊ฐ์ ๋ฑ ๋ง์ถ์ด ๋ฐ์ํ๋ ๋์ฉ๋ ํธ๋ํฝ: ์ด๋ ์ง์ง ์๋ง ๋ช ์ด ๋์ ์์ฒญ์ ์ด๋๋! ์ด๋ป๊ฒ๋ ์คํ ์ด์ค๋ฆฌ์คํ๊ฒ ์ค๊ณํ๋ ๊ฒ ์ค์ํจ! ๋์๋ฐฉ๋ฒ์ด ๋ง์์ง! ์ด์ฉ ์ ์๋ ๋ถ๋ถ์ ๋ํด์๋ง ์ํ ์ ์งํ๊ฒ ์ค๊ณํ๋ ๊ฒ ์ค์ํจ
so, ์ฒซ: ์ ์ ํ์ด์ง(์์ html) - ์ด๋ฒคํธ ์ฐธ์ฌ ๋ฒํผ ๋๋ฅด๊ฒ
2-4. HTTP ๋ฉ์์ง
- http ๋ฉ์์ง ๊ตฌ์กฐ: ์์ ๋ผ์ธ - ํค๋ - ๊ณต๋ฐฑ ๋ผ์ธ - message body (์์ฒญ/์๋ต ๋ฉ์์ง ๊ธฐ๋ณธ ๊ตฌ์กฐ)
- ์์ ๋ผ์ธ(์์ฒญ ๋ฉ์์ง๋ ๋ฆฌํ์คํธ ๋ผ์ธ)
- request-line: method(get, post..) SP(๊ณต๋ฐฑ) request-target SP HTTP-version CRLF(์ํฐ)
-
- method: GET ๋ฆฌ์์ค ์กฐํ/ POST ์์ฒญ ๋ด์ญ ์ฒ๋ฆฌ, PUT< DELETE ...
-
- request-target: absolute-path[?query]( ์ ๋ ๊ฒฝ๋ก "/"๋ก ์์ํ๋ ๊ฒฝ๋ก)
-
- HTTP ๋ฒ์ ๋ฃ์
- ์์ ๋ผ์ธ(์๋ต ๋ฉ์์ง๋ status-line)
- status-line: HTTP-version SP status-code SP reason-phrase CRLF(์ํฐ)
-
- status-code: ์์ฒญ ์ฑ๊ณต, ์คํจ๋ฅผ ๋ํ๋(200 ์ฑ๊ณต, 400 ํด๋ผ์ด์ธํธ ์์ฒญ ์ค๋ฅ, 500 ์๋ฒ ๋ด๋ถ ์ค๋ฅ)
-
- ์ด์ ๋ฌธ๊ตฌ: ์ฌ๋์ด ์ดํดํ ์ ์๋ ๋ฌธ๊ตฌ ์จ์ค
- ํค๋
: header-field = field-name":"OWS fidel-value OWS (OWS: ๋์ด์ฐ๊ธฐ ํ์ฉ)(fiedl-name์ ๋์๋ฌธ์ ๊ตฌ๋ฌธ ์์, value๋ ์์)
: http์ ์ก์ ํ์ํ ๋ชจ๋ ๋ถ๊ฐ์ ๋ณด๊ฐ ๋ค ๋ค์ด์๋ค/ ํ์ค ํค๋๊ฐ ๋๋ฌด ๋ง์/ ํ์์ ์์์ ํค๋ ์ถ๊ฐ ๊ฐ๋ฅ
- ๋ฉ์์ง ๋ฐ๋: ์ค์ ์ ์กํ ๋ฐ์ดํฐ, ๋ชจ๋ ๋ฐ์ดํฐ ์ ์ก ๊ฐ๋ฅ
- http๋ ๋จ์ํจ. ์คํ๋ ์ฝ์ด๋ณผ ๋ง.. ๋ฉ์์ง๋ ๋งค์ฐ ๋จ์ํจ. ํฌ๊ฒ ์ฑ๊ณตํ๋ ํ์ค ๊ธฐ์ ์ ๋จ์ํ์ง๋ง ํ์ฅ ๊ฐ๋ฅํ ๊ธฐ์ ์
3. HTTP API๋ฅผ ๋ง๋ค์ด๋ณด์
- http API: ์ฒซ ๋จ๊ณ, api url ์ค๊ณ (๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋ฆฌ์์ค ์๋ณ)
- ๋ฆฌ์์ค์ ์๋ฏธ๋ ๋ญ๊น? ํ์์ด๋ผ๋ ๊ฐ๋ ์์ฒด๊ฐ ๋ฐ๋ก ๋ฆฌ์์ค๋ค.
- ๋ฆฌ์์ค๋ฅผ ์ด๋ป๊ฒ ์๋ณํ๋ ๊ฒ ์ข์๊น? ํ์์ด๋ผ๋ ๋ฆฌ์์ค๋ง ์๋ณํ๋ฉด ๋๋ค -> ํ์ ๋ฆฌ์์ค๋ฅผ url์ ๋งคํ
- ๊ณ์ธต ๊ตฌ์กฐ์ ์์๋ฅผ ์ปฌ๋ ์ ์ผ๋ก ๋ณด๊ณ ๋ณต์ ๋จ์ด ์ฌ์ฉ ๊ถ์ฅ
- ๋ฆฌ์์ค์ ํ์๋ฅผ ๋ถ๋ฆฌํด์ผ ํ๋ค. ๊ฐ์ฅ ์ค์ํ ๊ฑด ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ ๊ฒ ๊ทธ๋ฌ๋ uri๋ ๋ฆฌ์์ค๋ง ์๋ณ, ํ์๋ ์ด๋ป๊ฒ ๊ตฌ๋ถ?
3-1. HTTP ๋ฉ์๋ - GET, POST
- http ๋ฉ์๋ ์ข
๋ฅ
- GET: ๋ฆฌ์์ค(representation) ์กฐํ
- POST: ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ฃผ๋ก ๋ฑ๋ก์ ์ฌ์ฉ
- PUT: ๋ฆฌ์์ค๋ฅผ ๋์ฒด, ํด๋น ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ์์ฑ
- PATCH: ๋ฆฌ์์ค ๋ถ๋ถ ๋ณ๊ฒฝ
- DELETE: ๋ฆฌ์์ค ์ญ์
- ๊ธฐํ ๋ฉ์๋: HEAD(GET๊ณผ ๋์ผํ์ง๋ง ๋ฉ์์ง ๋ถ๋ถ์ ์ ์ธํ๊ณ , ์ํ ์ค๊ณผ ํค๋๋ง ๋ฐํ), OPTIONS(๋์ ๋ฆฌ์์ค์ ๋ํ ํต์ ๊ฐ๋ฅ ์ต์ ์ ์ค๋ช ), CONNECT(๋์ ์์์ผ๋ก ์๋ณ๋๋ ์๋ฒ์ ๋ํ ํฐ๋์ ์ค์ ), TRACE( ์ปค๋ฅํธ๋ ํธ๋ ์ด์ค๋ ๊ฑฐ์ ์ ์ฐ์)
1. GET
- ๋ฆฌ์์ค ์กฐํ
- ์๋ฒ์ ์ ๋ฌํ๊ณ ์ถ์ ๋ฐ์ดํฐ๋ query(์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ, ์ฟผ๋ฆฌ ์คํธ๋ง)๋ฅผ ํตํด์ ์ ๋ฌ
- ๋ฉ์์ง ๋ฐ๋๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์ง๋ง, ์ง์ํ์ง ์๋ ๊ณณ์ด ๋ง์์ ๊ถ์ฅํ์ง ์์
- ์ง์ํ์ง ์๋ ์๋ฒ๊ฐ ๋ง๋ค. ๋ณดํต ๋ฉ์์ง ๋ฐ๋๋ฅผ ์ ํ์ฉํ์ง ์์์ ์๋ฒ๊ฐ ์ฒ๋ฆฌ ์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์
2. POST
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒํํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ํ ๋๊น ์ด ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํด์ค ๋ผ๋ ๊ฒ(๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด)
- ์๋ฒ๋ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ(๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ๋ค์ด์จ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ํ)
- ์ฃผ๋ก ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ก ์ ๊ท ๋ฆฌ์์ค ๋ฑ๋ก, ํ๋ก์ธ์ค ์ฒ๋ฆฌ์ ์ฌ์ฉ
- ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋ค๋ ๋ป์ผ๊น? ์ ํด์ง ๊ฒ์ด ์๊ณ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ๋ฆฌ์์ค๋ง๋ค ๋ฐ๋ก ์ ํด์ผ ํ๋ค.
- ์ฃผ๋ก ์ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ณ ๋ฑ๋ก/ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ(์ด๊ฒ ์ค์ํจ, ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋์ด์ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ, post์ ๊ฒฐ๊ณผ๋ก ์๋ก์ด ๋ฆฌ์์ค๊ฐ ์์ฑ๋์ง ์์ ์๋ ์์)/ ๋ค๋ฅธ ๋ฉ์๋๋ก ์ฒ๋ฆฌํ๊ธฐ ์ ๋งคํ ๊ฒฝ์ฐ
3. put
- ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ์์ ํ ๋์ฒด(์์ ์ด ์๋๋ผ ์์ ํ ๊ฐ์์น์ฐ๋ ๊ฑฐ์), ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ์์ฑ, ์ฝ๊ฒ ์ด์ผ๊ธฐํด์ ๋ฎ์ด๋ฒ๋ฆผ
- ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค๋ฅผ ์๋ณ(์ค์!!), ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค ์ ์ฒด ์์น๋ฅผ ์๊ณ uri์ง์ (post์ ํฐ ์ฐจ์ด์ )
4. patch
- ๋ฆฌ์์ค ๋ถ๋ถ ๋ณ๊ฒฝ
- but ์ง์ ์ ๋๋ ์๋ฒ๋ ์๋ค(๋๋ฌพ) ๊ทธ๋ด ๊ฒฝ์ฐ post ์จ์ผ ํจ
5. delete
- ๋ฆฌ์์ค ์ ๊ฑฐ
3-2. HTTP ๋ฉ์๋์ ์์ฑ
- http ๋ฉ์๋์ ์์ฑ
- ์์ (safe): ํธ์ถํด๋ ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝํ์ง ์๋๋ค.
- Q) ๊ณ์ ํธ์ถํด์, ๋ก๊ทธ ๊ฐ์ ๊ฒ ์์ฌ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด?
A) ์์ ์ ํด๋น ๋ฆฌ์์ค๋ง ๊ณ ๋ คํ๋ค. ๊ทธ๋ฐ ๋ถ๋ถ๊น์ง ๊ณ ๋ ค ใด- ๋จ, get๋ง ์์ ํจ. ๋๋จธ์ง ๋ค ๋ฐ๊พธ๋ ๊ฑฐ๋๊น ์์ ํ์ง ์์
- ๋ฉฑ๋ฑ(idempotent): ํ ๋ฒ ํธ์ถํ๋ ๋ ๋ฒ ํธ์ถํ๋ 100๋ฒ ํธ์ถํ๋ ๊ฒฐ๊ณผ๊ฐ ๋๊ฐ๋ค (get, put: ๊ฒฐ๊ณผ๋ฅผ ๋์ฒดํ๋๊น ๊ฐ์ ์์ฒญ์ ์ฌ๋ฌ ๋ฒ ํด๋ ์ต์ข ๊ฒฐ๊ณผ๋ ๊ฐ์, delete/ post ๋ฉฑ๋ฑ์ด ์๋๋ค! ๋ ๋ฒ ํธ์ถํ๋ฉด ๊ฐ์ ๊ฒฐ์ ๊ฐ ์ค๋ณตํด์ ๋ฐ์ํ ์ ์์)
- ์๋๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ์ ์ธ ์ ์์, ์๋ฒ๊ฐ ํ์์์ ๋ฑ์ผ๋ก ์ ์ ์๋ต์ ๋ชป ์ฃผ์์ ๋, ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ ์์ฒญ์ ๋ค์ ํด๋ ๋๋๊ฐ? ์ ํ๋จ ๊ทผ๊ฑฐ (delete๋ ๋๊ฐ์ ์์ฒญ์ ๋ ๋ฒ ํด๋ ๋๋ค)
- Q)์ฌ์์ฒญ ์ค๊ฐ์ ๋ค๋ฅธ ๊ณณ์์ ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝํด๋ฒ๋ฆฌ๋ฉด?
A)๋ฉฑ๋ฑ์ ์ธ๋ถ์์ธ์ผ๋ก ์ค๊ฐ์ ๋ฆฌ์์ค๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ ๊น์ง๋ ๊ณ ๋ คํ์ง๋ ์๋๋ค. (์ค๊ฐ์ ๋ณ๊ฒฝ๋ ๋ฆฌ์์ค๋ก ๋์ด) - ์บ์ ๊ฐ๋ฅ(cacheable): ์๋ต ๊ฒฐ๊ณผ ๋ฆฌ์์ค๋ฅผ ์บ์ ํด์ ์ฌ์ฉํด๋ ๋๋๊ฐ?/ get, head, post, patch ์บ์ ๊ฐ๋ฅ/ ์ค์ ๋ก๋ get, head ์ ๋๋ง ์บ์๋ก ์ฌ์ฉ(๋๊ฐ์ ๋ฆฌ์์ค์ ํค๊ฐ ๋ง์์ผ ํ๋๋ฐ post๋ ๋ณต์กํด์ ๊ตฌํ์ด ์ ์๋จ)/ post, patch๋ ๋ณธ๋ฌธ ๋ด์ฉ๊น์ง ์บ์ ํค๋ก ๊ณ ๋ คํด์ผ ํ๋๋ฐ, ๊ตฌํ์ด ์ฝ์ง ์์
3-4. ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ๋ฐ์ดํฐ ์ ์ก
ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ๋ฐ์ดํฐ ์ ์กํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ 2๊ฐ์ง
- ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ก
- get
- ์ฃผ๋ก ์ ๋ ฌ ํํฐ(๊ฒ์์ด)
- ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ก
- post, put, patch
- ํ์๊ฐ์ , ์ํ ์ฃผ๋ฌธ, ๋ฆฌ์์ค ๋ฑ๋ก, ๋ฆฌ์์ค ๋ณ๊ฒฝ
4๊ฐ์ง ์ํฉ
- ์ ์ ๋ฐ์ดํฐ ์กฐํ: ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ๋ฏธ์ฌ์ฉ/ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ด๋ฏธ์ง ๋ฆฌ์์ค ๊ฒฝ๋ก๋ก ๊ทธ๋ฅ ๋ด๋ ค์ค. ์ถ๊ฐ์ ์ธ ๋ฐ์ดํฐ๊ฐ ์์
- ๋์ ๋ฐ์ดํฐ ์กฐํ: ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์ฌ์ฉ/ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ ฌ ํํฐ์์ ๊ฒฐ๊ณผ๋ฅผ ๋์ ์ผ๋ก ์์ฑ/ ์ฃผ๋ก ๊ฒ์, ๊ฒ์ํ ๋ชฉ๋ก์์ ์ ๋ ฌ ํํฐ(๊ฒ์์ด)/ ์กฐํ ์กฐ๊ฑด์ ์ค์ฌ์ฃผ๋ ํํฐ, ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํ๋ ์ ๋ ฌ ์กฐ๊ฑด์ ์ฃผ๋ก ์ฌ์ฉ/ ์กฐํ๋ get ์ฌ์ฉ/ get์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ
- html form์ ํตํ ๋ฐ์ดํฐ ์ ์ก: ๋ญ๋ผ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค! ์น์๋ฒ ํ์ฑ? ์ ๋ชจ๋ฅด๊ฒ ๋ค!
method="post, get" ๋ ๋ค ๋จ
- http api๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ก
๋ชจ๋ฅด๊ฒ ๋ค!