🐼Before Start Mini Node Server (2)

🐧HTTP advanced + Network Tab

λΈŒλΌμš°μ € μ£Όμ†Œμ°½μ— URL λ₯Ό μž…λ ₯ν–ˆμ„ λ•Œ λ²Œμ–΄μ§€λŠ” 일을 정리해 λ³΄μ•˜λ‹€.

(예) http://www.google.com/intl/ko_kr/about

μ—¬κΈ°μ„œ google λ‹·μ»΄ (Domain name) 이 μ‹€μ œ μ–΄λ–€ ip λ₯Ό κ°–κ³  μžˆλŠ”μ§€ DNS μ„œλ²„μ— IP λ₯Ό μš”μ²­ν•˜λ©΄,

μ„œλ²„μ—μ„œ 숫자둜 된 κ³ μœ ν•œ 아이피 μ£Όμ†Œλ₯Ό μ€€λ‹€ (사내망, λ˜λŠ” κΈ€λ‘œλ²Œ ip).

ν•΄λ‹Ή ip 둜 접속해도 같은 화면을 λ³Ό 수 μžˆλ‹€.

google λ‹·μ»΄ λ’€μ—λŠ” λΌμš°νŒ…μΈλ°, ν•œ μ„œλ²„μ—μ„œλ„ μ €λ ‡κ²Œ 갈림길이 μžˆλŠ” κ±°λ‹€.

λ””ν…ŒμΌν•œ μ£Όμ†Œ 같은 λŠλ‚ŒμœΌλ‘œ μƒκ°ν•˜λ©΄ 쉽닀. (λͺ‡ 측으둜 κ°€λ©΄ λ‘œλΉ„, 17측에 κ°€λ©΄ 사무싀 λ“±λ“±..)

STEP 1. 도메인 이름 탐색

1-1. DNS μ„œλ²„μ— μ ‘μ†ν•œ ν›„, www.google. com 의 IP κ°€ 무엇인지 μš”μ²­

1-2. DNS μ„œλ²„λŠ” μš”μ²­μ— λŒ€ν•œ μ‘λ‹΅μœΌλ‘œ 216.58.197.196 리턴

μ΄κ±°λ‘œλ„ 접속가λŠ₯ - κΈ€λ‘œλ²Œ IP μž„

STEP 2: μ›Ή μ„œλ²„(HTTP) μš”μ²­

2-1. μ›Ή μ„œλ²„μ˜ λΌμš°νŒ… (routing: μ£Όμ†Œ 탐색 κ·œμΉ™) 에 따라 μš”μ²­ 처리

πŸΌλ‹¨μˆœν•˜κ²Œ 정적 파일만 μ œκ³΅ν•˜λŠ” 경우 λ‹€μŒκ³Ό 같이 쑰회

(URL): μ›Ήμ„œλ²„λ£¨νŠΈ/intl/ko_kr/about/index.html

πŸΌμ„œλ²„κ°€ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ‹€ν–‰ν•˜λ„λ‘ μš”μ²­ν•  μˆ˜λ„ 있음

  • μ›Ήμ„œλ²„λ£¨νŠΈ/search?q=codestates
  • μ›Ήμ„œλ²„λ£¨νŠΈ/preferences

2-2. μ„œλ²„κ°€ μš”μ²­μ— λŒ€ν•œ 응닡을 μžμ› (resource: HTML/JS 파일 λ“±) 의 ν˜•νƒœλ‘œ 전달

2-3. μ„œλ²„κ°€ λ³΄λ‚΄μ£ΌλŠ” μžμ›μ„ λΈŒλΌμš°μ €μ—μ„œ 처리

🐧IF STEP2 FAILS ??

κ·Έ λœ»μ€ μ›Ή μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•œ λ¦¬μ†ŒμŠ€λ₯Ό 찾을 수 μ—†λ‹€!!

즉, 404 NOT FOUND 리턴!

🐧HTTP

μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈκ°€ 주둜 HTML λ“±μ˜ λ¬Έμ„œλ₯Ό μ£Όκ³ λ°›λŠ” 데 μ‚¬μš©ν•˜λŠ” ν”„λ‘œν† μ½œ 이닀.

주둜 TCP/UDP 80번 포트λ₯Ό μ‚¬μš©ν•œλ‹€κ³  ν•œλ‹€.

μš”μ²­κ³Ό 응닡은 Start/Status Line, Header 그리고 Body 둜 이루어져 μžˆλ‹€.

http message mdn 으둜 검색 ν•΄λ³΄μ•˜λ‹€.

https://developer.mozilla.org/ko/docs/Web/HTTP/Messages

HTTP request ν•  λ•Œ 헀더

HTTP request μ‹œ ν—€λ”λŠ” μ–΄λ–€ λͺ¨μ–‘μœΌλ‘œ λ³΄λ‚΄μ§€λŠ”μ§€ 확인해 λ³Έ μ΄λ―Έμ§€λŠ” μ•„λž˜μ™€ κ°™λ‹€.

HTTP response ν•  λ•Œ 헀더

HTTP response μ‹œμ— ν—€λ”λŠ” μ–΄λ–€ λͺ¨μ–‘μœΌλ‘œ λ°›μ•„μ˜€λŠ”μ§€ μ•„λž˜ 그림으둜 보자.

HTTP μš”μ²­, 응닡 λ§ˆμ§€λ§‰ 뢀뢄에 λ“€μ–΄κ°€λŠ” Body

첫번째 κ·Έλ¦Ό 맨 밑에 μ‹€μ œμ μΈ 컨텐츠가 담겨진닀. (payload == body)

이제 ν΄λΌμ΄μ–ΈνŠΈκ°€ λ°›μ•„μ„œ ν™”λ©΄μœΌλ‘œ ν™•μΈν•œλ‹€.

개발자 λ„κ΅¬μ˜ network 탭에 λ“€μ–΄κ°€μ„œ 확인해 λ³΄μ•˜λ‹€. μ–΄λ–€ λͺ¨μ–‘인지! μ–΄λ–€ μš”μ²­μ΄ 이루어 지고 μžˆλŠ”μ§€!

chatterbox λ₯Ό μ—΄μ–΄ λ³΄λŠ” 확인을 거쳐 λ³΄μ•˜λ‹€.

🐧URL 과 URI 의 차이

URI ? URL 이 λ‹¨μˆœν•œ 파일 처리 뿐만 μ•„λ‹ˆλΌ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§λ„ μ²˜λ¦¬ν•΄ μ£ΌκΈ° λ•Œλ¬Έμ— Identifier 라고 ν•΄μ„œ μ €λ ‡κ²Œ λΆ€λ₯΄κ²Œ λ˜μ—ˆλ‹€κ³  함.

톡합 μžμ› μ‹λ³„μž URIλŠ” Uniform Resource Identifier 의 μ•½μžμ΄λ©° 인터넷에 μžˆλŠ” μžμ›μ„ λ‚˜νƒ€λ‚΄λŠ” μœ μΌν•œ μ£Όμ†Œμ΄λ‹€.

URI 의 μ‘΄μž¬λŠ” μΈν„°λ„·μ—μ„œ μš”κ΅¬λ˜λŠ” 기본쑰건 μœΌλ‘œμ„œ 인터넷 ν”„λ‘œν† μ½œμ— 항상 λΆ™μ–΄ λ‹€λ‹Œλ‹€. URI λŠ” 인터넷 μƒμ˜ μžμ›μ„ μ‹λ³„ν•˜κΈ° μœ„ν•œ λ¬Έμžμ—΄ μ •λ„λ‘œ 생각할 수 μžˆλ‹€.

즉, λ„€νŠΈμ›Œν¬ μƒμ—μ„œ μžμ›μ΄ μ–΄λ”” μžˆλŠ”μ§€λ₯Ό μ•Œλ €μ£ΌκΈ° μœ„ν•œ κ·œμ•½μ΄λ‹€. μ΄λŠ” 인터넷 μƒμ˜ μžμ› μœ„μΉ˜λΌκ³  μƒκ°ν•˜λ©΄ λœλ‹€.

URI κ°€ κ°€μž₯ 큰 μƒμœ„κ°œλ…μ΄κ³  μ΄κ²ƒμ˜ ν•˜μœ„ κ°œλ…μœΌλ‘œ URL κ³Ό URN 이 μžˆλ‹€.

URL은 Uniform Resource Locator 의 μ•½μž 이고 URL 은 URI 의 ν•œ ν˜•νƒœλ‘œ,

URI λŠ” URL 을 ν¬ν•¨ν•˜λŠ” κ°œλ…μ΄λ‹€.

https://dev-seolleung2.netlify.app/ μ΄λΌλŠ” μ£Όμ†ŒλŠ” URL μ΄λ©΄μ„œ URI 이닀.

https://dev-seolleung2.netlify.app/development/

와 같은 ν˜•μ‹μ€ development λΌλŠ” μΈν„°λ„·μƒμ˜ μžμ› μœ„μΉ˜λ₯Ό μ˜λ―Έν•œλ‹€.

μ΄λ˜ν•œ URL μ΄λ©΄μ„œ URI 이닀.

https://192.168.3.x.x/category/index.html μ΄λΌλŠ” μ£Όμ†ŒλŠ” 192 둜 μ‹œμž‘ν•˜λŠ” 호슀트 μ£Όμ†Œ ν•˜μœ„μ˜ category μ•„λž˜μ— index.html μ΄λΌλŠ” μžμ›μ˜ μœ„μΉ˜λ₯Ό 가리킀고 μžˆμœΌλ―€λ‘œ URL μ΄λ©΄μ„œ URI 이닀.

https://dev-seolleung2.netlify.app/development/111

의 μ£Όμ†ŒλŠ” μ’€ λ‹€λ₯΄κ²Œ λ³Ό 수 μžˆλ‹€. μ—¬κΈ°μ„œ URL 은 https://dev-seolleung2.netlify.app/development κΉŒμ§€ 이닀.

λ‚΄κ°€ μ›ν•˜λŠ” μ •λ³΄κΉŒμ§€ λ„λ‹¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” 111 μ΄λΌλŠ” μ‹λ³„μž (Identifier) κ°€ ν•„μš”ν•œ 것이닀.

즉, https://dev-seolleung2.netlify.app/development/111 의 μ£Όμ†ŒλŠ” URI μ§€λ§Œ, URL 은 μ•„λ‹ˆκ²Œ λœλ‹€.

  • HTTP 의 μš”μ²­μ€ URI λ₯Ό 톡해 ν•  수 μžˆλ‹€.
  • μ£Όμ†Œμ°½μ„ 톡해 ν•˜λŠ” μš”μ²­μ€ μ „λΆ€ GET Request

🐧HTTP Status Code

https://developer.mozilla.org/ko/docs/Web/HTTP/Status

200 - μš”μ²­ 성곡

304 - μš”μ²­μ— λŒ€ν•œ 응닡이 μˆ˜μ •λ˜μ§€ μ•ŠμŒ (Cache)

403 - 컨텐츠에 μ ‘κ·Όν•  κΆŒν•œ μ—†μŒ

404 - μš”μ²­λ°›μ€ λ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•  수 μ—†μŒ

500 - μ„œλ²„κ°€ μ²˜λ¦¬ν•  수 μ—†λŠ” μš”μ²­

🐧HTTP Request Methods

https://developer.mozilla.org/ko/docs/Web/HTTP/Methods

GET - νŠΉμ • λ¦¬μ†ŒμŠ€λ₯Ό κ°€μ Έμ˜€λ„λ‘ μš”μ²­

POST - 데이터λ₯Ό μ„œλ²„λ‘œ μ œμΆœν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©ν•˜λ©°, μ„œλ²„ μƒνƒœμ˜ λ³€ν™”λ₯Ό μΌμœΌν‚΄

PUT - POST 와 λΉ„μŠ·ν•˜λ‚˜, 연속적인 μš”μ²­μ‹œμ—λ„ 같은 효과λ₯Ό κ°€μ Έμ˜΄. κΈ°μ‘΄ 데이터λ₯Ό κ΅μ²΄ν•˜λŠ” μš©λ„λ‘œ 쓰일 수 있음 (UPDATE)

DELETE - λ¦¬μ†ŒμŠ€μ˜ μ‚­μ œλ₯Ό μš”μ²­ν•  λ•Œ μ‚¬μš©

λ©”μ†Œλ“œκ°€ PATCH OPTIONS 도 μžˆκΈ΄ν•˜μ§€λ§Œ 일단.. νŒ¨μ“°

GET μš”μ²­μ€ μ£Όμ†Œλ§Œ 지정해주면 (ν˜ΈμŠ€νŠΈμ™€ url 의 λ’· μͺ½ 뢀뢄을 μ΄μš©ν•΄μ„œ 경둜λ₯Ό 톡해 λΌμš°νŒ… μ΄μš©ν•΄μ„œ λ°›μ•„μ˜΄) μš”μ²­μ„ 넣을 수 μžˆμ§€λ§Œ,

POST μš”μ²­μ€ 넣어쀄 λ‚΄μš©λ“€μ΄ ν•„μš”ν•˜λ‹ˆκΉŒ (μ‚¬μš©μž μ½”λ©˜νŠΈ λ“±) Payload κ°€ μžˆλ‹€.

예둜,

{
  username: β€œκ°•κ±΄λ§ˆβ€,
  text:β€λ‚˜μ˜108κ³„λ‹¨μ½€λ³΄λŠ”μžλΉ„μ‹¬μ΄ 없닀”,
  roomname:β€λŸ­ν‚€μ§±β€
}

request λ₯Ό 보낼 λ•Œ 보낼 body(payload) 의 νƒ€μž…μ΄ 즉 Content-Type 을 λͺ…μ‹œν•΄ μ€€λ‹€.

주둜 많이 μ“°μ΄λŠ”κ²Œ application/json 이닀.

그럼 이제 μ•„λž˜μ˜ Payload λ₯Ό,

{
  username: β€œκ°•κ±΄λ§ˆβ€,
  text:β€λ‚˜μ˜108κ³„λ‹¨μ½€λ³΄λŠ”μžλΉ„μ‹¬μ΄ 없닀”,
  roomname:β€λŸ­ν‚€μ§±β€
}

json ν™” ν•΄μ„œ μ„œλ²„λ‘œ λ³΄λ‚΄μ§ˆ 것이닀.

μ„œλ²„μ— μ–΄λ–€ 데이터λ₯Ό μ—…λ°μ΄νŠΈ ν•˜λŠ” 경우 (POST 처럼) μ—λŠ” payload 와 같이 μš”μ²­μ„ 보낸닀!


Written by@[DotoriMook]
ν”„λ‘ νŠΈμ—”λ“œ μ£Όλ‹ˆμ–΄ 개발자 λ„ν† λ¦¬λ¬΅μ˜ 기술개발 λΈ”λ‘œκ·Έ μž…λ‹ˆλ‹€.

GitHubMediumTwitterFacebook