μ£Όμ†Œμ°½μ— google.com을 μž…λ ₯ν•˜λ©΄ μƒκΈ°λŠ” 일

  • 1. μ‚¬μš©μžκ°€ μž…λ ₯ν•œ url μ£Όμ†Œ μ€‘μ—μ„œ 도메인 λ„€μž„μ„ DNS μ„œλ²„μ—μ„œ κ²€μƒ‰ν•œλ‹€.
    γ€€DNS μ„œλ²„μ—μ„œ ν•΄λ‹Ή 도메인 λ„€μž„μ— ν•΄λ‹Ήν•˜λŠ” IPμ£Όμ†Œλ₯Ό μ°Ύμ•„ μ‚¬μš©μžκ°€ μž…λ ₯ν•œ URL 정보와 ν•¨κ»˜ μ „λ‹¬ν•œλ‹€.

πŸ“ URLμ—μ„œ 도메인 λ„€μž„ μΆ”μΆœ

도메인 λ„€μž„μ€ 일반적으둜 "www.example.com"κ³Ό 같은 ν˜•μ‹μ„ κ°–μŠ΅λ‹ˆλ‹€.

πŸ“ URL 정보와 ν•¨κ»˜ 전달

https://www.example.com:8080/path/to/resource?id=123&name=example#section1
  • ν”„λ‘œν† μ½œ: https
  • 호슀트: www.example.com
  • 포트: 8080
  • 경둜: /path/to/resource
  • 쿼리 λ¬Έμžμ—΄: ?id=123&name=example
  • ν”„λž˜κ·Έλ¨ΌνŠΈ: #section1
  • 2. μ›Ή νŽ˜μ΄μ§€ URL + IP μ£Όμ†ŒλŠ” HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ HTTP μš”μ²­ λ©”μ„Έμ§€λ₯Ό μƒμ„±ν•œλ‹€.
//일반적으둜 HTTP μš”μ²­ λ©”μ‹œμ§€λŠ” μ•„λž˜μ™€ 같은 ν˜•μ‹μ„ κ°–μŠ΅λ‹ˆλ‹€.

GET / HTTP/1.1
Host: www.example.com
  • HTTP μš”μ²­ λ©”μ‹œμ§€μ˜ λ‚΄μš©μ—λŠ” μš”μ²­ν•œ νŽ˜μ΄μ§€μ˜ 경둜, HTTP λ©”μ†Œλ“œ(GET, POST λ“±), 헀더(Host λ“±), μš”μ²­ λ°”λ”” 등이 ν¬ν•¨λ©λ‹ˆλ‹€.
  • 3. HTTP μš”μ²­ λ©”μ„Έμ§€λŠ” TCP/IP λ„€νŠΈμ›Œν¬λ₯Ό 톡해 TCP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ 인터넷을 거쳐 ν•΄λ‹Ή IP μ£Όμ†Œμ˜ μ»΄ν“¨ν„°λ‘œ μ „μ†‘λœλ‹€ μ΄λ ‡κ²Œ λ„μ°©ν•œ HTTP μš”μ²­ λ©”μ„Έμ§€λŠ” HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ μ›Ή νŽ˜μ΄μ§€ URL μ •λ³΄λ‘œ λ³€ν™˜λœλ‹€.
  • 4. μ›Ή μ„œλ²„λŠ” λ„μ°©ν•œ μ›Ή νŽ˜μ΄μ§€ URL 정보에 ν•΄λ‹Ήν•˜λŠ” 데이터λ₯Ό κ²€μƒ‰ν•œλ‹€.
  • 5. κ²€μƒ‰λœ μ›Ή νŽ˜μ΄μ§€ λ°μ΄ν„°λŠ” λ˜λ‹€μ‹œ HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ HTTP 응닡 λ©”μ„Έμ§€λ₯Ό μƒμ„±ν•œλ‹€.

πŸ“ HTTP 응닡 λ©”μ‹œμ§€ 생성

HTTP 응닡 λ©”μ‹œμ§€λŠ” 일반적으둜 μƒνƒœ μ½”λ“œ, 헀더 및 본문으둜 κ΅¬μ„±λ©λ‹ˆλ‹€. μ•„λž˜λŠ” κ°„λ‹¨ν•œ HTTP 응닡 λ©”μ‹œμ§€λ₯Ό μƒμ„±ν•˜λŠ” JavaScript μ½”λ“œμž…λ‹ˆλ‹€.
// μƒνƒœ μ½”λ“œ
const statusCode = 200;

// 헀더 μ„€μ •
const headers = {
  'Content-Type': 'text/plain', // ν…μŠ€νŠΈ ν˜•μ‹μ˜ 응닡
  'Content-Length': 12 // 본문의 길이
};

// 응닡 λ³Έλ¬Έ
const responseBody = 'Hello, World!';

// HTTP 응닡 λ©”μ‹œμ§€ 생성
const httpResponse = 'HTTP/1.1 ${statusCode} OK\r\n' +
                      Object.keys(headers).map(key => ${key}: ${headers[key]}).join('\r\n') + '\r\n' +
                      '\r\n' +
                      responseBody;

console.log(httpResponse);
        
μœ„ μ½”λ“œλŠ” λ‹€μŒκ³Ό 같은 HTTP 응닡 λ©”μ‹œμ§€λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 12

Hello, World!
        
  • 6. μ΄λ ‡κ²Œ μƒμ„±λœ HTTP 응닡 λ©”μ„Έμ§€λŠ” TCP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ 인터넷을 거쳐 μ›λž˜ μ»΄ν“¨ν„°λ‘œ μ „λ‹¬λœλ‹€.
  • 7. λ„μ°©ν•œ HTTP 응닡 λ©”μ„Έμ§€λŠ” HTTP ν”„λ‘œν† μ½œμ„ μ΄μš©ν•˜μ—¬ μ›Ή νŽ˜μ΄μ§€ λ°μ΄ν„°λ‘œ λ³€ν™˜λ˜κ³ , μ›Ή λΈŒλΌμš°μ €μ— μ˜ν•΄ 좜λ ₯λ˜μ–΄ μ‚¬μš©μžκ°€ λ³Ό 수 있게 λœλ‹€.