Amenable
Amenable's Blog
Amenable
  • λΆ„λ₯˜ 전체보기 (189)
    • πŸ“‚ JAVA (87)
      • μ΄νŽ™ν‹°λΈŒ μžλ°” (65)
      • μ£Όμš” κ°œλ… (22)
    • πŸ“‚ 개발 μ„œμ  (22)
      • μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨Έ (1)
      • 객체지ν–₯의 사싀과 μ˜€ν•΄ (2)
      • 클린 μ½”λ“œ (8)
      • ν•¨κ»˜ 자라기 (1)
      • 그림으둜 λ°°μš°λŠ” HTTP&Network Basic (10)
    • πŸ“‚ λ°μ΄ν„°λ² μ΄μŠ€ (8)
      • κ°œλ… (8)
      • λ¬Έμ œν’€μ΄ (0)
    • πŸ“‚ λ„€νŠΈμ›Œν¬ (14)
      • κ°œλ… (6)
      • 성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리 (8)
    • πŸ“‚ μŠ€ν”„λ§ (13)
      • κΈ°λ³Έ κ°œλ… (13)
    • πŸ“‚ WEB (5)
    • πŸ“‚ 자료ꡬ쑰 (12)
      • κ°œλ… (2)
      • μ •λ ¬ (8)
      • 트리 (2)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜ (10)
      • μ΅œμ†Œμ‹ μž₯트리 (2)
      • μ΅œλ‹¨ 경둜 (2)
      • λ¬Έμžμ—΄ (2)
      • ETC (4)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜_λ¬Έμ œν’€μ΄ (4)
      • BOJ_λ°±μ€€ (4)
    • πŸ“‚ ν”„λ‘œκ·Έλž˜λ° (3)
    • πŸ“‚ DevOps (2)
      • 배포 (2)
    • πŸ“‚ ν›„κΈ° (8)
      • μš°μ•„ν•œ ν…Œν¬μ½”μŠ€(ν”„λ¦¬μ½”μŠ€) (4)
      • 2023λ…„ (3)
      • 2024λ…„ (1)
    • πŸ“‚ 회고 (1)
      • 2023λ…„ (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸš€ GitHub

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
Amenable

Amenable's Blog

ν”„λ‘œν† μ½œ μŠ€νƒμ— λ©”μ‹œμ§€ 솑신을 μ˜λ’°ν•œλ‹€. - [Ch 01. μ›Ή λΈŒλΌμš°μ €κ°€ λ©”μ‹œμ§€λ₯Ό λ§Œλ“ λ‹€]
πŸ“‚ λ„€νŠΈμ›Œν¬/성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리

ν”„λ‘œν† μ½œ μŠ€νƒμ— λ©”μ‹œμ§€ 솑신을 μ˜λ’°ν•œλ‹€. - [Ch 01. μ›Ή λΈŒλΌμš°μ €κ°€ λ©”μ‹œμ§€λ₯Ό λ§Œλ“ λ‹€]

2023. 7. 9. 10:50

  이전 과정을 톡해 IP μ£Όμ†Œλ₯Ό μ–»μ—ˆλ‹€. 이번 κΈ€μ—μ„œλŠ” λ°μ΄ν„°μ˜ μ†‘μ‹ κ³Ό μˆ˜μ‹ μ΄ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ μ•Œμ•„λ³΄κ³ μž ν•œλ‹€.

 

πŸ“™ 1. 데이터 솑·μˆ˜μ‹  λ™μž‘μ˜ κ°œμš”

  IP μ£Όμ†Œλ₯Ό μ΄μš©ν•˜μ—¬ μ•‘μ„ΈμŠ€ λŒ€μƒ μ›Ή μ„œλ²„μ— λ©”μ‹œμ§€λ₯Ό μ†‘μ‹ ν•˜κΈ° μœ„ν•΄ OS의 내뢀에 μžˆλŠ” ν”„λ‘œν† μ½œ μŠ€νƒμ— μ˜λ’°ν•œλ‹€.

  데이터 솑·μˆ˜μ‹  λ™μž‘λ„ DNS μ„œλ²„μ— IP μ£Όμ†Œλ₯Ό μ‘°νšŒν•  λ•Œμ²˜λŸΌ Socket λΌμ΄λΈŒλŸ¬λ¦¬μ— λ“€μ–΄μžˆλŠ” ν”„λ‘œκ·Έλž¨ λΆ€ν’ˆμ„ μ΄μš©ν•˜λŠ”λ°, IP μ£Όμ†Œλ₯Ό μ‘°νšŒν•  λ•Œμ²˜λŸΌ ν”„λ‘œκ·Έλž¨ λΆ€ν’ˆμ„ ν•˜λ‚˜μ”© ν˜ΈμΆœν•˜κ³  λλ‚˜λŠ” 게 μ•„λ‹ˆλΌ 볡수의 λΆ€ν’ˆμ„ κ²°μ •λœ μˆœλ²ˆλŒ€λ‘œ ν˜ΈμΆœν•œλ‹€.

  Socket 라이브러리λ₯Ό μ΄μš©ν•œ 데이터 솑·μˆ˜μ‹  λ™μž‘μ€ μœ„μ™€ κ°™λ‹€.

  데이터λ₯Ό 솑·μˆ˜μ‹ ν•˜λŠ” 컴퓨터 사이에 λ°μ΄ν„°μ˜ ν†΅λ‘œ(νŒŒμ΄ν”„) 같은 것이 있고 νŒŒμ΄ν”„μ˜ μ–‘ 끝에 λ°μ΄ν„°μ˜ μΆœμž…κ΅¬μΈ μ†ŒμΌ“μ΄ μžˆλ‹€.

  그리고 μ•„λž˜μ™€ 같이 4κ°€μ§€ 과정을 κ±°μ³μ„œ 솑·μˆ˜μ‹  λ™μž‘μ΄ μˆ˜ν–‰λœλ‹€.

  1. μ†ŒμΌ“ μž‘μ„± 단계
    ν΄λΌμ΄μ–ΈνŠΈμ˜ μ†ŒμΌ“μ„ λ§Œλ“ λ‹€.
    (μ„œλ²„ μΈ‘μ—μ„œλŠ” μ†ŒμΌ“μ„ λ§Œλ“€μ–΄ 놓고 연결을 기닀리고 μžˆλ‹€.)
  2. 접속 단계
    μ„œλ²„ 츑의 μ†ŒμΌ“μ— νŒŒμ΄ν”„λ₯Ό μ—°κ²°ν•œλ‹€.
  3. 솑·μˆ˜μ‹  단계
    데이터λ₯Ό 솑·μˆ˜μ‹ ν•œλ‹€.
  4. μ—°κ²° 끊기 단계
    νŒŒμ΄ν”„λ₯Ό λΆ„λ¦¬ν•˜κ³  μ†ŒμΌ“μ„ λ§μ†Œν•œλ‹€.

  μ΄μ œλΆ€ν„° 각 과정을 ν•˜λ‚˜μ”© μˆœμ„œλŒ€λ‘œ μ‚΄νŽ΄λ³΄μž.

 

 

πŸ“™ 2. [1단계] μ†ŒμΌ“μ˜ μž‘μ„± λ‹¨κ³„

  μš°μ„ , 전체적인 톡신 과정은 μœ„μ™€ κ°™λ‹€.

 

<λ””μŠ€ν¬λ¦Όν„°> = socket(<IPv4 μ‚¬μš©>, <μŠ€νŠΈλ¦Όν˜•,...);

  μ†ŒμΌ“μ„ λ§Œλ“€κΈ° μœ„ν•΄μ„œ μ†ŒμΌ“ 라이브러리의 socketμ΄λΌλŠ” ν”„λ‘œκ·Έλž¨ λΆ€ν’ˆμ„ ν˜ΈμΆœν•˜λ©΄ λœλ‹€.

  μ†ŒμΌ“μ΄ 생기면 λ””μŠ€ν¬λ¦½ν„°λΌλŠ” 것이 λŒμ•„μ˜€λŠ”λ°, 이것은 ν•˜λ‚˜ν•˜λ‚˜μ˜ μ†ŒμΌ“μ— ν• λ‹Ήν•œ λ²ˆν˜Έμ™€ 같은 것이닀. (볡수의 μ†ŒμΌ“μ΄ ν•œ λŒ€μ˜ 컴퓨터에 μ‘΄μž¬ν•  수 있기 λ•Œλ¬Έμ— μ‚¬μš©ν•œλ‹€.)

 

 

πŸ“™ 3. [2단계] νŒŒμ΄ν”„λ₯Ό μ—°κ²°ν•˜λŠ” μ ‘속 λ‹¨κ³„

connect(<λ””μŠ€ν¬λ¦½ν„°>, <μ„œλ²„μ˜ IP μ£Όμ†Œμ™€ 포트 번호>,...);

  λ§Œλ“  μ†ŒμΌ“μ„ μ„œλ²„ 츑의 μ†ŒμΌ“μ— μ ‘μ†ν•˜κΈ° μœ„ν•΄ Socket 라이브러리의 connectλΌλŠ” ν”„λ‘œκ·Έλž¨ λΆ€ν’ˆμ„ ν˜ΈμΆœν•œλ‹€.

  connectλ₯Ό ν˜ΈμΆœν•  λ•Œ, 'λ””μŠ€ν¬λ¦½ν„°, μ„œλ²„μ˜ IPμ£Όμ†Œ, 포트 번호'λ₯Ό μ§€μ •ν•œλ‹€. κ·Έ μ΄μœ λŠ” μ•„λž˜μ™€ κ°™λ‹€.

  1. λ””μŠ€ν¬λ¦½ν„°
    ν”„λ‘œν† μ½œ μŠ€νƒμ΄ 톡지받은 λ””μŠ€ν¬λ¦½ν„°λ₯Ό 보고 μ–΄λŠ μ†ŒμΌ“μ„ μ„œλ²„ 츑의 μ†ŒμΌ“μ— μ—°κ²°ν• μ§€λ₯Ό νŒλ‹¨ν•œλ‹€.
  2. IP μ£Όμ†Œ
    μ•‘μ„ΈμŠ€ λŒ€μƒ μ„œλ²„μ˜ IP μ£Όμ†Œλ‹€.
  3. 포트 번호
    IP μ£Όμ†Œλ‘œ μ§€μ •ν•  수 μžˆλŠ” 것은 λ„€νŠΈμ›Œν¬μ˜ μ–΄λŠ 컴퓨터인가 ν•˜λŠ” κ²ƒκΉŒμ§€λ‹€.
    즉, IP μ£Όμ†Œλ‘œλŠ” μ†ŒμΌ“μ„ μ§€μ •ν•  수 μ—†λ‹€.
    κ·Έλž˜μ„œ ν¬νŠΈ λ²ˆν˜Έλ₯Ό μ΄μš©ν•˜μ—¬ ν•΄λ‹Ή IP μ£Όμ†Œμ˜ μ†ŒμΌ“을 μ§€μ •ν•œλ‹€.

  κ·Έλ ‡λ‹€λ©΄ ν•œ κ°€μ§€ 의문점이 μžˆλ‹€. 포트 λ²ˆν˜Έμ— λŒ€ν•œ 정보가 μ—†λŠ”λ° 포트 번호λ₯Ό λͺ‡ 번으둜 μ§€μ •ν•΄μ•Ό ν•˜λŠ”κ°€μ— λŒ€ν•œ μ˜λ¬Έμ΄λ‹€.

  그에 λŒ€ν•œ 닡은 'μ„œλ²„ 츑의 포트 λ²ˆν˜ΈλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ’…λ₯˜μ— 따라 미리 κ²°μ •λœ 값을 μ‚¬μš©ν•œλ‹€.'이닀. 예λ₯Ό λ“€μ–΄ μ›Ήμ€ 80번, 메일은 25λ²ˆμ„ μ‚¬μš©ν•˜λŠ” 식이닀.

 

 

πŸ“™ 4. [3단계] λ©”μ‹œμ§€λ₯Ό μ£Όκ³ λ°›λŠ” μ†‘·μˆ˜μ‹  λ‹¨κ³„

write<λ””μŠ€ν¬λ¦½ν„°>, <솑신 데이터>, <솑신 데이터 길이>);

  λ””μŠ€ν¬λ¦½ν„°μ™€ 솑신데이터λ₯Ό μ§€μ •ν•˜μ—¬ writeλ₯Ό ν˜ΈμΆœν•˜λ©΄ ν”„λ‘œν† μ½œ μŠ€νƒμ— 솑신 데이터λ₯Ό μ„œλ²„μ— μ „μ†‘ν•œλ‹€.

  솑신 λ°μ΄ν„°λŠ” λ„€νŠΈμ›Œν¬λ₯Ό 톡해 μ „λΆ€ κ·ΈλŒ€λ‘œ μ•‘μ„ΈμŠ€ λŒ€μƒμ˜ μ„œλ²„μ— λ„μ°©ν•œλ‹€. 그리고 μ„œλ²„λŠ” μˆ˜μ‹  λ™μž‘μ„ μ‹€ν–‰ν•˜μ—¬ 받은 λ°μ΄ν„°μ˜ λ‚΄μš©μ„ μ‘°μ‚¬ν•˜κ³  μ μ ˆν•œ 처리λ₯Ό μ‹€ν–‰ν•˜μ—¬ 응닡 λ©”μ‹œμ§€λ₯Ό 보낸닀.

 

<μˆ˜μ‹  데이터 길이> = read(<λ””μŠ€ν¬λ¦½ν„°), <μˆ˜μ‹  버퍼>,...);

  응닡 λ©”μ‹œμ§€κ°€ 였면 μ΄λ²ˆμ—λŠ” λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•˜λŠ” λ™μž‘μ΄ μ‹€ν–‰λœλ‹€. μˆ˜μ‹ ν•  λ•ŒλŠ” Socket 라이브러리의 readλΌλŠ” ν”„λ‘œκ·Έλž¨ λΆ€ν’ˆμ„ 톡해 ν”„λ‘œν† μ½œ μŠ€νƒμ— μˆ˜μ‹  λ™μž‘μ„ μ˜λ’°ν•œλ‹€.

  μˆ˜μ‹ ν•œ 응닡 λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹  버퍼라고 λΆ€λ₯΄λŠ” λ©”λͺ¨λ¦¬ μ˜μ—­μ— μ €μž₯ν•œλ‹€. μˆ˜μ‹  λ²„퍼에 λ©”μ‹œμ§€λ₯Ό μ €μž₯ν•œ μ‹œμ μ— λ©”μ‹œμ§€λ₯Ό μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— κ±΄λ„€μ€€λ‹€.

 

 

πŸ“™ 5. [4단계] μ—°κ²° λŠκΈ° λ‹¨κ³„

close(<λ””μŠ€ν¬λ¦½ν„°>);

  μ›Ήμ—μ„œ μ‚¬μš©ν•˜λŠ” HTTP ν”„λ‘œν† μ½œμ—μ„œλŠ” 본래 응닡 λ©”μ‹œμ§€μ˜ 솑신을 μ™„λ£Œν–ˆμ„ λ•Œ μ›Ή μ„œλ²„ μΈ‘μ—μ„œ μ—°κ²° 끊기 λ™μž‘μ„ μ‹€ν–‰ν•˜λ―€λ‘œ λ¨Όμ € μ›Ή μ„œλ²„ μΈ‘μ—μ„œ closeλ₯Ό ν˜ΈμΆœν•˜μ—¬ 연결을 λŠλŠ”λ‹€.

  그러면 이것이 ν΄λΌμ΄μ–ΈνŠΈ 츑에 μ „λ‹¬λ˜μ–΄ ν΄λΌμ΄μ–ΈνŠΈμ˜ μ†ŒμΌ“μ€ μ—°κ²° 끊기 λ‹¨κ³„λ‘œ λ“€μ–΄κ°„λ‹€.

  그리고 λΈŒλΌμš°μ €κ°€ read둜 μˆ˜μ‹  λ™μž‘μ„ μ˜λ’°ν–ˆμ„ λ•Œ readλŠ” μˆ˜μ‹ ν•œ 데이터λ₯Ό κ±΄λ„€μ£ΌλŠ” λŒ€μ‹  솑·μˆ˜μ‹  λ™μž‘μ΄ μ™„λ£Œλ˜μ–΄ 연결이 λŠκ²Όλ‹€λŠ” 사싀을 λΈŒλΌμš°μ €μ— ν†΅μ§€ν•œλ‹€. 이둜써 솑·μˆ˜μ‹ μ΄ μ’…λ£Œλ˜μ—ˆλ‹€λŠ” 것을 μ•Œ 수 μžˆμœΌλ―€λ‘œ λΈŒλΌμš°μ €μ—μ„œλ„ closeλ₯Ό ν˜ΈμΆœν•˜μ—¬ μ—°κ²° 끊기 단계에 λ“€μ–΄κ°„λ‹€.

 

  μœ„μ—μ„œ μ‚΄νŽ΄λ³Έ κ²ƒμ²˜λŸΌ λ³Έλž˜λŠ” '접속, λ¦¬ν€˜μŠ€νŠΈ λ©”μ‹œμ§€ 솑신, 응닡 λ©”μ‹œμ§€ μˆ˜μ‹ , μ—°κ²° 끊기'λΌλŠ” λ™μž‘μ„ λ°˜λ³΅ν•œλ‹€.

  κ·ΈλŸ¬λ‚˜ μ΄λ ‡κ²Œ 계속 λ°˜λ³΅ν•˜λŠ” 것은 λΉ„νš¨μœ¨μ μ΄κΈ° λ•Œλ¬Έμ— 연결을 λŠμ§€ μ•Šκ³  μš”μ²­κ³Ό 응닡을 μ£Όκ³ λ°›λŠ” 것을 κ°€λŠ₯ν•˜κ²Œ ν•˜μ˜€λ‹€.  이 λΆ€λΆ„은 λ’€μ—μ„œ μ•Œμ•„보도둝 ν•˜μž.

 

ν•΄λ‹Ή 글은 Tsutomu Tone λ‹˜μ˜ '성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리'λ₯Ό μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

'πŸ“‚ λ„€νŠΈμ›Œν¬ > 성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

μ„œλ²„μ— μ ‘μ†ν•œλ‹€. - [Ch 02. TCP/IP의 데이터λ₯Ό μ „κΈ° μ‹ ν˜Έλ‘œ λ§Œλ“€μ–΄ 보낸닀.]  (0) 2023.07.18
μ†ŒμΌ“μ„ μž‘μ„±ν•œλ‹€. - [Ch 02. TCP/IP의 데이터λ₯Ό μ „κΈ° μ‹ ν˜Έλ‘œ λ§Œλ“€μ–΄ 보낸닀.]  (0) 2023.07.10
μ „ μ„Έκ³„μ˜ DNS μ„œλ²„κ°€ μ—°λŒ€ν•œλ‹€. - [Ch 01. μ›Ή λΈŒλΌμš°μ €κ°€ λ©”μ‹œμ§€λ₯Ό λ§Œλ“ λ‹€]  (0) 2023.07.09
μ›Ή μ„œλ²„μ˜ IPμ£Όμ†Œλ₯Ό DNS μ„œλ²„μ— μ‘°νšŒν•œλ‹€. - [Ch 01. μ›Ή λΈŒλΌμš°μ €κ°€ λ©”μ‹œμ§€λ₯Ό λ§Œλ“ λ‹€]  (0) 2023.07.08
HTTP λ¦¬ν€˜μŠ€νŠΈ λ©”μ‹œμ§€λ₯Ό μž‘μ„±ν•œλ‹€. - [Ch 01. μ›Ή λΈŒλΌμš°μ €κ°€ λ©”μ‹œμ§€λ₯Ό λ§Œλ“ λ‹€]  (0) 2023.07.07
    'πŸ“‚ λ„€νŠΈμ›Œν¬/성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • μ„œλ²„μ— μ ‘μ†ν•œλ‹€. - [Ch 02. TCP/IP의 데이터λ₯Ό μ „κΈ° μ‹ ν˜Έλ‘œ λ§Œλ“€μ–΄ 보낸닀.]
    • μ†ŒμΌ“μ„ μž‘μ„±ν•œλ‹€. - [Ch 02. TCP/IP의 데이터λ₯Ό μ „κΈ° μ‹ ν˜Έλ‘œ λ§Œλ“€μ–΄ 보낸닀.]
    • μ „ μ„Έκ³„μ˜ DNS μ„œλ²„κ°€ μ—°λŒ€ν•œλ‹€. - [Ch 01. μ›Ή λΈŒλΌμš°μ €κ°€ λ©”μ‹œμ§€λ₯Ό λ§Œλ“ λ‹€]
    • μ›Ή μ„œλ²„μ˜ IPμ£Όμ†Œλ₯Ό DNS μ„œλ²„μ— μ‘°νšŒν•œλ‹€. - [Ch 01. μ›Ή λΈŒλΌμš°μ €κ°€ λ©”μ‹œμ§€λ₯Ό λ§Œλ“ λ‹€]
    Amenable
    Amenable
    CS, μžλ°”, 자료ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜, μŠ€ν”„λ§, μŠ€ν”„λ§ λΆ€νŠΈμ— ν•΄λ‹Ήν•˜λŠ” κ°œλ°œμ— κ΄€ν•œ λ‚΄μš©μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”