๋ฐ๋ธŒ์ฝ”์Šค_๋ฐ์ดํ„ฐ์—”์ง€๋‹ˆ์–ด๋ง

[Week3 ์›น๋ฐ์ดํ„ฐ ํฌ๋กค ๋ฐ ๋ถ„์„] TIL 7์ผ์ฐจ - HTTP์™€ ๋ฐ์ดํ„ฐ ํฌ๋กค๋ง ๊ธฐ์ดˆ(1)

๐Ÿช„ํ•˜๋ฃจ๐Ÿช„ 2023. 10. 24. 17:30
728x90

1) ์ธํ„ฐ๋„ท๊ณผ ์›น

0. ์šฉ์–ด์ •๋ฆฌ

๋„คํŠธ์›Œํฌ(Network)

๋‘ ๊ฐœ์˜ ์ปดํ“จํ„ฐ๊ฐ€ ์—ฐ๊ฒฐํ•œ ๊ฒƒ

LAN(Local Area Network)

๊ทผ๊ฑฐ๋ฆฌ ์ง€์—ญ ๋„คํŠธ์›Œํฌ(์ผ์ • ๊ฑฐ๋ฆฌ์˜ ์ปดํ“จํ„ฐ๋“ค์„ ์—ฐ๊ฒฐํ•œ ๊ฒƒ)

์ธํ„ฐ๋„ท(Internet)

๋ฒ” ์ง€๊ตฌ์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ์—ฐ๊ฒฐํ•œ ๊ฒƒ

์›น(Web)

: ์ธํ„ฐ๋„ท์—์„œ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ, ์‹œ์Šคํ…œ

 

๊ทธ๋ ‡๋‹ค๋ฉด, ์›น ์ƒ์—์„œ ์ •๋ณด๋ฅผ ์–ด๋–ป๊ฒŒ ์ฃผ๊ณ ๋ฐ›์„๊นŒ?

 

 

1) ์›น์—์„œ ์ •๋ณด ์ฃผ๊ณ ๋ฐ›๊ธฐ

0. ์šฉ์–ด ์ •๋ฆฌ

ํด๋ผ์ด์–ธํŠธ : ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๋Š” ์ปดํ“จํ„ฐ

์„œ๋ฒ„ : ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ปดํ“จํ„ฐ

 

1. ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•

  1. ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์—๊ฒŒ HTTP ์š”์ฒญ(request)์„ ๋ณด๋‚ธ๋‹ค.
  2. ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌํ•œ๋‹ค.
  3. ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋œ ๊ฒฐ๊ณผ์— ๋Œ€ํ•ด ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ HTTP ์‘๋‹ต(response)์„ ๋ณด๋‚ธ๋‹ค.

 

2. ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•œ ๊ทœ์น™(HTTP)

HTTP(Hypter Text Transfer Protocol)

์›น ์ƒ์—์„œ ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•œ ์•ฝ์†, ๊ทœ์น™

์ •๋ณด๋ฅผ ์š”์ฒญํ•  ๋•Œ ๋ณด๋‚ด๋Š” HTTP ๊ตฌ์กฐ์™€ ์‘๋‹ต์„ ๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” HTTP ๊ตฌ์กฐ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์‚ดํŽด๋ณด์ž.

 

Request Message HTTP ๊ตฌ์กฐ (ํด๋ผ์ด์–ธํŠธ → ์„œ๋ฒ„)

ํ•ด๋‹น ๋ฉ”์‹œ์ง€ ๊ตฌ์กฐ๋Š” ํฌ๊ฒŒ ์‹œ์ž‘๋ผ์ธ start line), ํ—ค๋”๋“ค(Headers), ํ•œ ์ค„ ๋„์–ด์“ฐ๊ธฐ, ๋ฐ”๋””(Body)๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

 

์‹œ์ž‘๋ผ์ธ(Start Line)

[HTTP Method] [Request target] [HTTP version]

์‹œ์ž‘๋ผ์ธ์€ HTTP Method, Request target, HTTP ๋ฒ„์ „์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ๋‹ค.

  • HTTP ๋ฉ”์„œ๋“œ : ์„œ๋ฒ„๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ํ–‰๋™์„ ์ง€์ •ํ•œ๋‹ค.
    • GET : ์กด์žฌํ•˜๋Š” ์ž์›์— ๋Œ€ํ•œ ์š”์ฒญ
    • POST : ์ƒˆ๋กœ์šด ์ž์›์„ ์ƒ์„ฑ
    • PUT : ์กด์žฌํ•˜๋Š” ์ž์›์— ๋Œ€ํ•œ ๋Œ€์ฒด(๋ฎ์–ด์“ฐ๊ธฐ), ์—†์œผ๋ฉด ์ƒˆ๋กœ ์ƒ์„ฑ
    • PATCH : ์กด์žฌํ•˜๋Š” ์ž์›์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ(์ผ๋ถ€ ๋ณ€๊ฒฝ) 
    • DELETE : ์กด์žฌํ•˜๋Š” ์ž์›์— ๋Œ€ํ•œ ์‚ญ์ œ
    • HEAD : Body์„ ์ œ์™ธํ•œ ์ƒํƒœ์ค„๊ณผ ํ—ค๋” ๋ถ€๋ถ„๋งŒ ๋ฐ˜ํ™˜)
    • OPTIONS
    • TRACE
    • CONNECT
  • ์š”์ฒญ ํƒ€๊นƒ(Request target) : HTTP Request๊ฐ€ ์ „์†ก๋˜๋Š” ๋ชฉํ‘œ ์ฃผ์†Œ
  • HTTP ๋ฒ„์ „(HTTP version)

ํ—ค๋”๋“ค(Headers)

: ์š”์ฒญ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค.

(์—”ํ„ฐ)

๋ฐ”๋””(Body)

: ์š”์ฒญ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค. ์ „์†กํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด ํ•ด๋‹น ๋ถ€๋ถ„์„ ๋นˆ ์ƒํƒœ๋กœ ์ „์†กํ•˜๋ฉด ๋œ๋‹ค.

 

Response Message HTTP ๊ตฌ์กฐ

ํ•ด๋‹น ๋ฉ”์‹œ์ง€ ๊ตฌ์กฐ๋Š” ํฌ๊ฒŒ ์ƒํƒœ๋ผ์ธ(status line), ํ—ค๋”๋“ค(Headers), ํ•œ์ค„ ๋„์–ด์“ฐ๊ธฐ, ๋ฐ”๋””(Body)๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

 

์ƒํƒœ๋ผ์ธ(Status Line)

[HTTP version] [Status Code] [Status Text] 

์ƒํƒœ ๋ผ์ธ์€ HTTP ๋ฒ„์ „, ์ƒํƒœ์ฝ”๋“œ, ์ƒํƒœ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ๋‹ค.

  • HTTP ๋ฒ„์ „(HTTP version)
  • ์ƒํƒœ์ฝ”๋“œ(Status Code)
    • 1XX : ์ •๋ณด ์‘๋‹ต
    • 2XX : ์„ฑ๊ณต ์‘๋‹ต
    • 3XX : ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๋ฉ”์„ธ์ง€
    • 4XX : ํด๋ผ์ด์–ธํŠธ ์—๋Ÿฌ ์‘๋‹ต
    • 5XX : ์„œ๋ฒ„ ์—๋Ÿฌ ์‘๋‹ต
  • ์ƒํƒœ์ฝ”๋“œ ์„ค๋ช…(Status Text)

ํ—ค๋”๋“ค(Headers)

: ์‘๋‹ต์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค.

(์—”ํ„ฐ)

๋ฐ”๋””(Body)

: ์‘๋‹ต์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค. ์ „์†กํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด ํ•ด๋‹น ๋ถ€๋ถ„์„ ๋นˆ ์ƒํƒœ๋กœ ์ „์†กํ•˜๋ฉด ๋œ๋‹ค.

 

 

2) ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ๋žœ๋”๋ง

0. ์šฉ์–ด ์ •๋ฆฌ

์›น ํŽ˜์ด์ง€ : ์›น ์‚ฌ์ดํŠธ์— ์žˆ๋Š” ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€

์›น ์‚ฌ์ดํŠธ : ์›น ํŽ˜์ด์ง€์˜ ๋ชจ์Œ

์›น ๋ธŒ๋ผ์šฐ์ € : HTTP์‘๋‹ต ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ์‘๋‹ต๋ฐ›์€ HTML ์ฝ”๋“œ๋ฅผ ๋žœ๋”๋ง ํ•˜๋Š” ์—ญํ• 

HTML(ํŒŒ์ผ) → ์›น ๋ธŒ๋ผ์šฐ์ € → ์›น ํŽ˜์ด์ง€

์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„์€, ์›น ๋ฌธ์„œ๋ฅผ ๋กœ๋”ฉํ•œ ํ›„ ํŒŒ์‹ฑ์„ ์ง„ํ–‰ํ•œ๋‹ค.

 

1. ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๋žœ๋”๋ง

๋žœ๋”๋ง์ด๋ž€, 

์›น์‚ฌ์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•  ๋•Œ ๋ณด๊ฒŒ ๋˜๋Š” ํŽ˜์ด์ง€๋กœ ๋ฐ”๊พธ๋Š” ์ ˆ์ฐจ์ด๋‹ค.

 

  1. ํŒŒ์‹ฑ : ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ HTML, CSS, JavaScript ํŒŒ์ผ์„ ํŒŒ์‹ฑ(Parsing)ํ•œ๋‹ค. ํŒŒ์‹ฑ ๊ณผ์ •์„ ํ†ตํ•ด DOM(Document Object Model) ํŠธ๋ฆฌ, CSSOM(CSS object Model) ํŠธ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  2. ๋žœ๋” ํŠธ๋ฆฌ ์ƒ์„ฑ : DOM, CSSOM ํŠธ๋ฆฌ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‹ค์ œ ํ‘œํ˜„๋˜๋Š” ์š”์†Œ๋“ค๋งŒ ์ด์šฉํ•ด ๋žœ๋”ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  3. ๋ ˆ์ด์•„์›ƒ ์„ค์ • : ๊ฐ ๋…ธ๋“œ๋“ค์˜ ํฌ๊ธฐ์™€ ์œ„์น˜ ๊ด€๋ จํ•œ ์ •๋ณด๋“ค๋กœ ์–ด๋Š ์œ„์น˜, ์–ด๋Š ํฌ๊ธฐ๋กœ ์ถœ๋ ฅํ• ์ง€ ๊ณ„์‚ฐํ•œ๋‹ค.
  4. ์ถœ๋ ฅ : ๊ณ„์‚ฐ๋œ ๋ ˆ์ด์•„์›ƒ์— ๋”ฐ๋ผ ์š”์†Œ๋“ค์„ ์ถœ๋ ฅํ•œ๋‹ค.

cf) ํŒŒ์‹ฑ์ด๋ž€? ์ผ๋ จ์˜ ๋ฌธ์ž์—ด์„ ์˜๋ฏธ ์žˆ๋Š” ํ† ํฐ(token)์œผ๋กœ ๋ถ„ํ•ดํ•˜๊ณ , ์ด๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ํŒŒ์ŠคํŠธ๋ฆฌ(parse tree)๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด๋‹ค.

cf) DOM, CSSOM์œผ๋กœ ํŒŒ์‹ฑ ํ•˜๋Š” ์ด์œ ๋Š” ๊ฐ ๋…ธ๋“œ๋ฅผ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๋ฉด, ๋”์šฑ ์‰ฝ๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • ์›ํ•˜๋Š” ์š”์†Œ๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. (ํŠน์ • ๋…ธ๋“œ ์ถ”๊ฐ€ ์‚ญ์ œ ๊ฐ€๋Šฅ)
document.body.appendChild(๋…ธ๋“œ์ด๋ฆ„)
  • ์›ํ•˜๋Š” ์š”์†Œ๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
document.getElementbyTagName(ํƒœ๊ทธ์ด๋ฆ„)

 

 

3) ์‹ค์Šต

1. request ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•œ ์š”์ฒญ ์ „์†ก

request ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ์š”์ฒญ์„ ๋ณด๋‚ด๋ณด์ž.

ํ•ด๋‹น url์— data์™€ ํ•จ๊ป˜ GET, POST ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์ฝ”๋“œ์ด๋‹ค. 

import requests
## GET ์š”์ฒญ
res=requests.get(url, data)

## POST ์š”์ฒญ
res=requests.post(url, data)

 

P : request ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด body๋ถ€๋ถ„์„ ๊ฐ€์ ธ์˜ค๋ฉด, ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ •๋ณด๋“ค๋„ ๋„ˆ๋ฌด ๋งŽ์ด ๋ณด์ธ๋‹ค.

S : ํŒŒ์‹ฑ(2)-1๋ฒˆ ์ฐธ๊ณ )๋ฅผ ์ด์šฉํ•ด ์›ํ•˜๋Š” ์ •๋ณด๋งŒ ์ถ”์ถœํ•ด ๋ณด์ž.

 

2. ๊ฐ ์‚ฌ์ดํŠธ์˜ robots.txt ๊ด€๋ จ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ

์›น ์Šคํฌ๋ž˜ํ•‘ : ์›น ํŽ˜์ด์ง€๋กœ๋ถ€ํ„ฐ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ

์›น ํฌ๋กค๋ง : ํฌ๋กค๋Ÿฌ(๋กœ๋ด‡)๋ฅผ ์ด์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ์›น ํŽ˜์ด์ง€์˜ ์ •๋ณด๋ฅผ ์ธ๋ฑ์‹ฑ(url๋ณ„ ์–ด๋–ค ์ •๋ณด๊ฐ€ ์žˆ์—ˆ๋‹ค๋Š” ์ •๋ณด)ํ•˜๋Š” ๊ฒƒ

 

REP(Robot Exclusion Protocol) : ๋กœ๋ด‡์˜ ๋ฌด๋‹จ ์ ‘๊ทผ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ œํ•œ์„ ๋‘๊ฒŒ ํ•˜๋Š” ์•ฝ์†, ํ‘œ์ค€ ๊ถŒ๊ณ ์•ˆ(๊ฐ•์ œ๋Š” ์•„๋‹˜)

์›น ํฌ๋กค๋Ÿฌ๋“ค์€ ํ•ด๋‹น ๊ทœ์น™์„ ์ง€ํ‚ค๋ฉด์„œ ํฌ๋กค๋ง์„ ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

  1. ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ์ฃผ์ง€ ์•Š๊ณ 
  2. ๋ฐ์ดํ„ฐ์˜ ์ €์ž‘๊ถŒ์„ ์ง€์ผœ์•ผ ํ•œ๋‹ค.

๊ฐ ์›น ํŽ˜์ด์ง€์˜ ํ—ˆ์šฉ ์ •๋ณด๋Š” robots.txt ํŒŒ์ผ์— ์žˆ๋‹ค.

๋ณดํ†ต user-agent, Disallow, Allow ๋ถ€๋ถ„์„ ์‚ดํŽด๋ณด๋ฉด ๋œ๋‹ค.

 

์˜ˆ์‹œ)

user-agent : *

Disallow : /

๋ชจ๋“  ์œ ์ €์— ๋Œ€ํ•œ ์š”์ฒญ์„ ๊ฑฐ๋ถ€

 

user-agent : *

Allow :

๋ชจ๋“  ์œ ์ €์˜ ์š”์ฒญ์„ ํ—ˆ์šฉ(ํฌ๋กค๋Ÿฌ ํ—ˆ์šฉ)

 

์›นํŽ˜์ด์ง€์˜ ํ—ˆ์šฉ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ค๋Š” ์ฝ”๋“œ์ด๋‹ค.

import requests
res=requests.get(”url/robots.txt)
print(res.text)
728x90