๐ ๋ชจ๋ ํต์ ์ ๊ทผ๋ณธ: Request - Response
์ฐ๋ฆฌ๊ฐ ์ธํฐ๋ท์ ์ฐ๋ ๊ฑฐ์ ๋ชจ๋ ์๊ฐ, ์ฌ์ค ํ๋์ ๋จ์ํ ๊ตฌ์กฐ๊ฐ ๋ฐ๋ณต๋ฉ๋๋ค.
1
2
3
4
5
6
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ธ๋ค.
์๋ฒ๋ ๊ทธ ์์ฒญ์ ํ์ฑํ๋ค.
์๋ฒ๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
์๋ฒ๋ ์๋ต์ ๋ณด๋ธ๋ค.
ํด๋ผ์ด์ธํธ๋ ์๋ต์ ํ์ฑํ๊ณ ์๋นํ๋ค.
์ด ๊ตฌ์กฐ๋ ๋จ์ํ์ง๋ง ๊ฐ๋ ฅํฉ๋๋ค. HTTP, DNS, SSH, RPC, SQL, REST API, GraphQL, SOAPโฆ ์ฐ๋ฆฌ๊ฐ ์ฐ๋ ๊ฑฐ์ ๋ชจ๋ ๊ธฐ์ ์ด ์ด ํ ์์์ ์๋ํฉ๋๋ค.
๐งช ์ง์ ๋ณด๊ธฐ: curl๋ก HTTP ์์ฒญ ํด๋ถํ๊ธฐ ๊ฐ๋จํ ๋ช ๋ น ํ๋๋ก ์ด ๊ณผ์ ์ ๋์ผ๋ก ์ง์ ๋ณผ ์ ์์ต๋๋ค.
1
2
curl -v --trace out.txt http://google.com
- -v: ์์ฒญ๊ณผ ์๋ต์ ํค๋๋ฅผ ํฐ๋ฏธ๋์ ์ถ๋ ฅ
- โtrace out.txt: ๋ด๋ถ ์ก์์ ๋ก๊ทธ๋ฅผ ํ์ผ๋ก ์ ์ฅ
๐งฉ ๋ก๊ทธ ๋ถ์: ์ค์ ์์ฒญ ํ๋ฆ out.txt์๋ ๋ค์๊ณผ ๊ฐ์ ํ๋ฆ์ด ๊ธฐ๋ก๋ฉ๋๋ค:
1
2
3
4
5
6
== Info: Host google.com:80 was resolved.
== Info: IPv4: 142.250.76.142
== Info: Trying 142.250.76.142:80...
== Info: Connected to google.com (142.250.76.142) port 80
== Info: using HTTP/1.x
โค ํด๋ผ์ด์ธํธ โ ์๋ฒ ์์ฒญ
1
2
3
4
5
6
=> Send header
GET / HTTP/1.1
Host: google.com
User-Agent: curl/8.13.0
Accept: */*
โค ์๋ฒ โ ํด๋ผ์ด์ธํธ ์๋ต
1
2
3
4
5
6
7
<= Recv header
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
...
Content-Length: 219
โค HTML ์๋ต ๋ณธ๋ฌธ
1
2
3
4
5
301 Moved
301 Moved
The document has moved here.
์๋ฒ๋ ์์ฒญ์ ๋ฐ๊ณ , ์ฐ๋ฆฌ๊ฐ ๋ณด๋ธ ํค๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋จํ์ฌ HTTP 301 ๋ฆฌ๋๋ ์ ์๋ต์ ๋ณด๋ด์ค๋๋ค. ์ด ๊ณผ์ ํ๋๋ง์ผ๋ก๋ ์์ฒญ-์๋ต ๋ชจ๋ธ์ ๋ชจ๋ ๋จ๊ณ๊ฐ ๋ด๊ฒจ ์์ต๋๋ค.
- โ JSON: ๊ตฌ์กฐ ๋จ์, ํ์ฑ ๋น ๋ฆ
- โ XML: ๊ตฌ์กฐ ๋ณต์ก, ํ์ฑ ๋น์ฉ ํผ โ ์ค์๊ฐ API์์ ๋นํจ์จ
- Request - Response๋ ๋ชจ๋ ๋คํธ์ํฌ ํต์ ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ค.
- curl์ ํ์ฉํ๋ฉด ์ด ๊ณผ์ ์ ์ง์ ํ์ธํ ์ ์๋ค.
- HTTP ํค๋, ์ํ ์ฝ๋, ์๋ต ๋ณธ๋ฌธ์ ์ฝ๋ ์ฐ์ต์ ๋ชจ๋ ๊ฐ๋ฐ์์๊ฒ ์ ์ตํ๋ค.
- ํจ์จ์ ์ธ ํต์ ์ ์ํด์๋ JSON์ ๊ธฐ๋ณธ ํฌ๋งท์ผ๋ก ๊ณ ๋ คํ์.
์ด์ฒ๋ผ ๋ณต์กํ ์์คํ ๋ ๊ฒฐ๊ตญ ๋จ์ํ ์์ฒญ-์๋ต์ ๋ฐ๋ณต์ ๋๋ค. ๊ทธ ํ๋ฆ์ ์ ํํ ์ฝ๋ ๋์ ๊ฐ์ง๋ฉด, ๊ธฐ์ ์ด ๋จ์ํ๊ฒ ๋ณด์ ๋๋ค.