• toc {:toc}

Notice

Computer Networks 글은 κ²½ν¬λŒ€ν•™κ΅ μ†Œν”„νŠΈμ›¨μ–΄μœ΅ν•©λŒ€ν•™ 이성원 κ΅μˆ˜λ‹˜μ˜ [컴퓨터 λ„€νŠΈμ›Œν¬ CSE302] μˆ˜μ—…μ„ 기반으둜 μ •λ¦¬ν•œ λ‚΄μš©μž…λ‹ˆλ‹€.

Socket Programming

  • Socket : IP Address + Port Number

  • 컴퓨터 λ„€νŠΈμ›Œν¬μ—μ„œ λ…Έλ“œ μ‚¬μ΄μ˜ 데이터λ₯Ό μ£Όκ³  λ°›λŠ” λ‚΄λΆ€μ˜ endpointλ₯Ό λ§ν•œλ‹€.

  • Socket Programming : TCP/IP λ„€νŠΈμ›Œν¬μ˜ 톡신을 ν•˜λŠ” 기본적인 κΈ°μˆ μ΄λ‹€.

    • μ†ŒμΌ“μ€ μ–‘λ°©ν–₯ 끝단 톡신을 μ œκ³΅ν•œλ‹€.
    • μ†ŒμΌ“ 연결은 주둜 LAN λ˜λŠ” 인터넷을 톡해 두 개의 λ‹€λ₯Έ 컴퓨터 μ‚¬μ΄μ—μ„œ μž‘λ™ν•˜λ‚˜, ν•˜λ‚˜μ˜ 컴퓨터 μ•ˆμ—μ„œλ„ μƒν˜Έ ν†΅μ‹ ν•˜λŠ”λ° μ‚¬μš©λœλ‹€.
  • 전톡적인 μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ°μ€ ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ μ•„ν‚€ν…μ²˜λ₯Ό μ‚¬μš©ν•œλ‹€.

    • μ†ŒμΌ“ μ„œλ²„ : μ›Ήμ„œλ²„, 이메일 μ„œλ²„μ™€ 같이 μ—°κ²°λœ λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ˜ μš”μ²­μ„ λ“£λŠ” ν”„λ‘œκ·Έλž¨μ΄λ‹€.
    • μ†ŒμΌ“ ν΄λΌμ΄μ–ΈνŠΈ : λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ— 연결을 ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ΄λ‹€.
  • μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ° 절차

image(https://www.oreilly.com/library/view/distributed-computing-in/9781787126992/02dd04be-0dbb-4732-8bc5-1961644e8875.xhtml)

  • μ„œλ²„

    • 항상 μ‚΄μ•„μžˆμ–΄μ•Ό ν•œλ‹€.
    • μ‹€μ œ ν”„λ‘œκ·Έλž˜λ°μ˜ κ²½μš°μ— 정말 근본적인 TCP의 였λ₯˜ κ²€μΆœκ³Ό 같은 뢀뢄듀을 λ‹€λ£¨μ§€λŠ” μ•ŠλŠ”λ‹€. μ•Œμ•„μ„œ λ§Œλ“€λΌ λ§ν•œλ‹€.
    • bind : μ†ŒμΌ“μ„ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ IP, 포트λ₯Ό μš΄μ˜μ²΄μ œμ—κ²Œ μ§€μ •ν•˜λΌ λͺ…λ Ή
    • listen : ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ λŒ€κΈ°
  • ν΄λΌμ΄μ–ΈνŠΈ

    • μ†ŒμΌ“μ„ λ§Œλ“€κ³  μ—°κ²° μš”μ²­ β†’ μ„œλ²„κ°€ 수락
  • μ„œλ‘œ 톡신을 μ§„ν–‰ν•˜κ³  ν΄λΌμ΄μ–ΈνŠΈκ°€ λ‹«μœΌλ©΄ μ„œλ²„λ„ 이λ₯Ό λ°›μ•„ λ‹«λŠ”λ‹€.

  • 전톡적 μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ°μ€ μ–΄λ–€ λ‘œμ§λ„ μ œκ³΅ν•˜μ§€ μ•Šκ³  A와 Bλ₯Ό μ—°κ²°ν•  뿐이닀.

  • λ‘œμ§μ— λŒ€ν•΄μ„œλŠ” ν”„λ‘œκ·Έλž˜λ¨Έμ˜ λͺ«μ΄λ‹€.

ZeroMQ

  • μ΄μ „λΆ€ν„°λŠ” κΈ°μ—…μ•ˆμ—μ„œ λŒ€ν˜• μ„œλ²„λ₯Ό ν†΅ν•΄μ„œ 메일 λ“± 데이터λ₯Ό μ£Όκ³  λ°›λŠ” ν˜•νƒœμ˜€λŠλ‚˜, 2000λ…„ ν›„λ°˜λΆ€ν„° www으둜 인해 μ›ΉλΈŒλΌμš°μ €λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•œ μ›Ήμ„œλ²„κ°€ κΈ‰λΆ€μƒν–ˆλ‹€.

  • κ°œμΈλ“€μ΄ μ›ΉλΈŒλΌμš°μ €λ₯Ό ν†΅ν•΄μ„œ 데이터λ₯Ό μ£Όκ³  받을 수 있고 각 μ›ΉλΈŒλΌμš°μ €λ₯Ό μœ„ν•œ μ„œλ²„κ°€ 많이 λ§Œλ“€μ–΄μ‘Œλ‹€. 즉, λŒ€μ€‘λ“€μ΄ 인터넷을 μ‚¬μš©ν•˜λ©΄μ„œ λŒ€κ·œλͺ¨μ˜ μ‚¬μš©μžμ™€ μ„œλ²„μ˜ 관계가 λ§Œλ“€μ–΄μ‘Œλ‹€.

  • 과거의 경우 μ„œλ²„μ˜ μ‚¬μš©μžλŠ” ν•œμ •λ˜μ–΄ μžˆμœΌλ‚˜, 2000λ…„ ν›„λ°˜λΆ€ν„°λŠ” μ‚¬μš©μžμ˜ 수λ₯Ό μ•Œ 수 μ—†λ‹€. λ•Œλ¬Έμ— μ„œλ²„μ˜ μš©λŸ‰μ— λŒ€ν•œ 고민이 μ΄μ–΄μ‘Œλ‹€.

  • 2010λ…„, ν΄λΌμš°λ“œ μ»΄ν“¨νŒ…μ΄ λ‚˜νƒ€λ‚˜λ©΄μ„œ ν•„μš”ν•  λ•Œ ν•„μš”ν•œ 만큼 κ°€μƒμ˜ μ»΄ν“¨νŒ…μ„ μ‚¬μš©ν•  수 μžˆλŠ” 방식이 λ‚˜νƒ€λ‚˜λ©΄μ„œ λ°©μ‹μ˜ λ³€ν™˜μ΄ μ΄λ£¨μ–΄μ‘Œλ‹€.

  • ν΄λΌμš°λ“œ μ»΄ν“¨νŒ… β‡’ μˆ˜λ§Žμ€ μ„œλ²„ ν”„λ‘œκ·Έλž¨ μ‚°μΆœ β‡’ μ„œλ²„ ν”„λ‘œκ·Έλž˜λ° 방식을 μ˜€ν”ˆμ†ŒμŠ€λ‘œ κ³΅κ°œν•˜μž.

  • ZeroMQ : 높은 μ„±λŠ₯의 비동기화 λ©”μ‹œμ§€ 라이브러리(μ˜€ν”ˆμ†ŒμŠ€ 라이브러리)

  • OSI κ³„μΈ΅μ—μ„œλŠ” μ–΄λ–€ 계측에 μ†ν•œ μ§€λ₯Ό κ·œμ •ν•  수 μ—†λ‹€.

  • TCP의 경우 큰 μžμ›μ„ κ°€μ§€κ³  큰 μ„œλ²„ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€μ–΄ μ‚¬μš©ν•œλ‹€.

  • μ›ΉλΈŒλΌμš°μ €

  • ZeroMQλŠ” λΆ„μ‚°λ˜κ³  λ™μ‹œλ‹€λ°œμ μΈ ν”„λ‘œκ·Έλž¨λ“€μ΄ μ„œλ‘œ 톡신을 ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ‘Œλ‹€.

  • κ³΅ν†΅μ μœΌλ‘œ 자주 μ‚¬μš©ν•˜λŠ” ꡬ쑰의 ν”„λ‘œκ·Έλž¨μ„ ν†΅ν•©μ μœΌλ‘œ ν”„λ‘œκ·Έλž˜λ°ν•˜μ—¬ μ˜€ν”ˆ μ†ŒμŠ€λ‘œ ν•¨κ»˜ μ‚¬μš©ν•˜μž!

  • Features

    • ZeroMQ API β†’ μ†ŒμΌ“ 제곡
    • μ†ŒμΌ“μ€ λ‹€μˆ˜ λŒ€ λ‹€μˆ˜ 연결을 ν‘œν˜„ν•œλ‹€.
    • Messaging νŒ¨ν„΄μ„ μ‚¬μš©ν•˜μ—¬ μš”μ²­μ„ μ£Όκ³  λ°›λŠ”λ‹€.
  • μ˜ˆμ‹œ : Client & Worker

image

  • ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μš”μ²­μ„ 보내면 μ„œλ²„μ—μ„œ λ‘œμ§μ— 따라 μ €μž₯된 데이터 정보λ₯Ό μ œκ³΅ν•˜λŠ” ν˜•νƒœ

  • λ‹€μˆ˜μ˜ μ„œλ²„κ°€ λ‚˜μ˜¨ μƒν™©μ—μ„œ λŒ€λΆ€λΆ„ λΉ„μŠ·ν•œ ꡬ쑰λ₯Ό κ°€μ§€κΈ° λ•Œλ¬Έμ— κ³΅ν†΅μœΌλ‘œ μ˜€ν”ˆμ†ŒμŠ€ν™”

  • μ˜ˆμ‹œ : Publish & Scribe (μœ„μ ―)

image

  • κ³΅κΈ‰μž(Publisher)κ°€ μ‘΄μž¬ν•˜κ³  μ—¬λŸ¬ λͺ…μ˜ κ΅¬λ…μž(Subscriber)κ°€ μ‘΄μž¬ν•˜μ—¬ 정보λ₯Ό μ œκ³΅ν•˜λŠ” ν˜•νƒœ
  • 였λ₯Έμͺ½ κ·Έλ¦Ό - 넀이버에 κ³΅κΈ‰ν•˜λŠ” ν˜•νƒœλΌ μƒκ°ν•˜λ©΄ λœλ‹€.
  • 날씨, λ‰΄μŠ€ λ“± μ—¬λŸ¬ κ³΅κΈ‰μžλ“€μ΄ 정보λ₯Ό 넀이버(κ³΅κΈ‰μž μž…μž₯μ—μ„œλŠ” κ΅¬λ…μž, κ΅¬λ…μž μž…μž₯μ—μ„œλŠ” κ³΅κΈ‰μž)λ₯Ό 톡해 정보λ₯Ό 제곡, κ΅¬λ…μžλ“€μ€ 넀이버λ₯Ό 톡해 정보λ₯Ό λ°›λŠ”λ‹€.

RabbitMQ

image

  • Centralized Message Queue의 ꡬ쑰λ₯Ό κ°–λŠ”λ‹€.
  • PDFλ₯Ό 생성해 λ§Žμ€ μ‚¬μš©μžμ—κ²Œ μ „μ†‘ν•˜κ³  싢은 경우 μ„œλ²„μ—κ²Œ μ „λ‹¬ν•˜λŠ”λ°, 이λ₯Ό Producer 라고 ν•œλ‹€.
  • ProducerλŠ” 데이터λ₯Ό publishν•˜κ³  μ„œλ²„λŠ” μ†ŒλΉ„μžμ—κ²Œ μ „μ†‘ν•œλ‹€.
  • 앱을 κ°œλ°œν•˜κ³  앱에 λŒ€ν•œ μ•ŒλžŒ λ©”μ‹œμ§€λ₯Ό 전솑할 λ•Œ 직접 μ†ŒλΉ„μžμ—κ²Œ μ „μ†‘ν•˜λŠ” ν˜•νƒœκ°€ μ•„λ‹Œ, κ΅¬κΈ€μ΄λ‚˜ μ• ν”Œμ˜ μ„œλ²„λ₯Ό 거쳐 전솑을 ν•΄μ•Ό ν•œλ‹€. μ΄λ•Œ RabbitMQ와 같은 λ°©μ‹μœΌλ‘œ μ‚¬μš©λœλ‹€.