λͺ©λ‘μ 체 κΈ (1099)
KoreanFoodie's Study
ν¨μν νλ‘κ·Έλλ° ν¨λ¬λ€μμ λν΄ μμ보며 μ΄λ₯Ό C++ λ₯Ό μ΄μ©ν μννΈμ¨μ΄ κ°λ°μ μ΄λ»κ² μ μ©νλ©΄ μ’μμ§ μμλ³΄κ² μ΅λλ€. ν΅μ¬ : 1. νμ μ ν리μΌμ΄μ μ N κ°μ μΈμλ₯Ό κ°μ§ λλ€μμ νλμ μΈμλ₯Ό λ°μΈλ©ν΄ N-1 κ°μ μΈμλ₯Ό κ°μ§λ λλ€λ‘ λ³ννλ μ°μ°μ μλ―Ένλ€. 2. 컀λ§μ N κ°μ μΈμλ₯Ό κ°μ§ ν¨μλ₯Ό νλμ μΈμλ₯Ό κ°μ§ ν¨μ N κ°λ‘ λΆν΄νλ κ³Όμ μ μλ―Ένλ€. 3. νμ μ ν리μΌμ΄μ κ³Ό 컀λ§μ μ΄μ©νλ©΄ μ€λ³΅μ μ κ±°ν μ μκ³ , λ λ²μ©μ μΈ μ½λλ₯Ό μμ±ν μ μλ€. μ°λ¦¬λ μ΄λ² κΈμμ νμ μ ν리μΌμ΄μ κ³Ό 컀λ§μ λ°°μ°λ©°, μ΄ λ κ°μ§κ° μ΄λ»κ² μ°κ΄λμλμ§ μμλ³Ό κ²μ΄λ€. νμ μ ν리μΌμ΄μ νμ μ ν리μΌμ΄μ μ΄λ, N κ°μ μΈμλ₯Ό κ°μ§λ λλ€μμ νλμ μΈμλ₯Ό λ°μΈλ©ν΄ N-1 κ°μ μΈμλ₯Ό κ°μ§λ λλ€λ₯Ό..
ν¨μν νλ‘κ·Έλλ° ν¨λ¬λ€μμ λν΄ μμ보며 μ΄λ₯Ό C++ λ₯Ό μ΄μ©ν μννΈμ¨μ΄ κ°λ°μ μ΄λ»κ² μ μ©νλ©΄ μ’μμ§ μμλ³΄κ² μ΅λλ€. ν΅μ¬ : 1. ν¨μ(λλ€)λ κ°μ΄λ€. κ³ λ‘ ν¨μλ μΈμλ‘ μ λ¬ν μ μκ³ , λλ€λ₯Ό λ°νν μ μμΌλ©° λλ€λ λλ€λ₯Ό λ°νν μ μλ€. 2. μμ ν¨μμ μ‘°ν©μ ν΅ν μ€κ³λ λΆλ³μ±μ 보μ₯νλ€. μ°λ¦¬λ κ°λ¨ν λλ€λ₯Ό μ‘°ν©νμ¬ κ³ μ°¨μμ ν©μ± ν¨μλ₯Ό λ§λ€μ΄λΌ μ μλ€. 3. ν¨μν ν©μ±μ ν΅ν΄ μ€λ³΅μ ν¨κ³Όμ μΌλ‘ μ κ±°ν μ μλ€. λν μ¬λ¬ μΈμλ₯Ό κ°μ§ λλ€λ νλμ μΈμμ μΊ‘μ³λ κ°λ€μ κ°μ§ λ€μμ λλ€λ‘ λΆν΄ν μ μλ€. ν¨μν ν©μ± μ°λ¦¬λ κ³ λ±νκ΅ μκ°μ ν¨μ ν©μ±μ λν΄ λ°°μ λ€(νΉμ μ€νκ΅μΌμλ μλ€). λλκ²λ, μ°λ¦¬λ C++ μμ λμΌν μμ μ ν μ μλ€. π μ°λ¦¬λ μ΄μ λλ€λ₯Ό ..
ν¨μν νλ‘κ·Έλλ° ν¨λ¬λ€μμ λν΄ μμ보며, μ΄λ₯Ό C++ λ₯Ό μ΄μ©ν μννΈμ¨μ΄ κ°λ°μ μ΄λ»κ² μ μ©νλ©΄ μ’μμ§ μμλ³΄κ² μ΅λλ€. ν΅μ¬ : 1. ν¨μλ κ°μ΄λ€. ν¨μλ μΈμλ‘ μ λ¬ν μ μλ€. κ°λ¨ν ν¨μλ₯Ό μ‘°ν©ν΄ λ ν¬κ³ 볡μ‘ν ν¨μλ₯Ό λ§λ€ μ μλ€. 2. μμ ν¨μμ μ‘°ν©μ ν΅ν μ€κ³λ λΆλ³μ±μ 보μ₯νλ€. 3. λλ€λ₯Ό μμ ν¨μμ²λΌ μ¬μ©νμ. λν μΊ‘μ³μ λν΄ λͺ νν μμλμ. μ¬μ€ νμλ νλΆ κ³Όμ λ νλ‘κ·Έλλ° μΈμ΄ κ΄λ ¨ μμ μ λ€μΌλ©° ν¨μν μΈμ΄λ₯Ό μ νμ§λ§, κ·Έ λΉμμλ νλ‘κ·Έλλ° μ체μ λν ν₯λ―Έκ° κ·Έλ€μ§ μμ΄μ κ·Έλ°μ§ ν° κ΄μ¬μ κ°μ§ μμλ€. μ΄μ¬ν νμ§λ μμκ³ . π κ·Έλ¬λ€ 보λ ν¨μν μΈμ΄μ λν μ§μμ 머리 μ μ΄λ ꡬμμ μμ λ¨Όμ§λ§μ μμ§νκ³ μμλ€. κ·Έλ¬λ€ λ€μ μ΄ μ± μ μ½μΌλ©΄μ ν¨μν..
보νΈλμ΄ μλ κΈμ λλ€.
[C++ κ²μ μλ²] 3-8. Select λͺ¨λΈ ν΅μ¬ : 1. Select λͺ¨λΈμ μ¬μ©νλ©΄ μμΌμ μ ν¨μ±μ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°κΈ° μ μ 미리 체ν¬ν μ μλ€. 2. κ΄μ°°νκ³ μ νλ μμΌμ fd_set μ λ£κ³ , select νλ©΄ κ΄μ°°μ΄ μμλλ©°, μ μ΄λ νλμ μμΌμ΄ μ€λΉλλ©΄ 리ν΄λλ€(λμ€μλ μμμ μ κ±°λ¨) 3. μΈμ μ μ΄μ©ν΄μ μμΌμ κ΄λ¦¬ν μ μλ€. μΈμ μ λ κΈ°κΈ°κ°μ ν΅μ μ΄ μ°κ²°λμμ λ ꡬμΆλκ³ , λκ²Όμ λ νκ΄΄λλ μλ°©ν₯ λ§ν¬λΌκ³ μκ°νλ©΄ λλ€. μ΄λ² μκ°μλ select ν¨μκ° ν΅μ¬μ΄ λλ Selet λͺ¨λΈμ λν΄ μμ보μ. Select λͺ¨λΈμ μ¬μ©νλ©΄ μμΌ ν¨μ νΈμΆμ΄ μ±κ³΅ν μμ μ 미리 μ μ μλ€. μ΄κ²μ μλμ κ°μ μν©μμ ν° μ΄μ μΌλ‘ μμ©νλ€ : λΈλ‘νΉ μμΌ : μ‘°κ±΄μ΄ λ§μ‘±λμ§ μμμ ..
[C++ κ²μ μλ²] 3-7. λ ΌλΈλ‘νΉ μμΌ ν΅μ¬ : 1. λ ΌλΈλ‘νΉ μμΌμ, λΈλ‘νΉ μμΌκ³Ό λ€λ₯΄κ² μ°κ²° λ° μ‘μμ μ΄ μΌμμ μΌλ‘ λΆκ°λ₯ν κ²½μ°, SpinLock μ²λΌ while λ¬Έμ λλ©° λ€μ μλλ₯Ό νλ€. 2. λ ΌλΈλ‘νΉ μμΌμ λ§λλ κ²μ κ°λ¨νλ€. ioctlsocket μ μ¬μ©νλ©΄ λλ€. 3. λ ΌλΈλ‘νΉ μμΌ μ¬μ©μ, WSAEWOULDBLOCK μλ¬κ° λμ¬ κ²½μ°, λ€μ μλνλ€. μ΄λ μ‘μμ λ²νΌμ μνκ° λΉμ΄ μκ±°λ κ°λ μ°¨ μμ΄ μ‘μμ μ΄ λΆκ°λ₯ν μμμ μΈ μνμ΄κΈ° λλ¬Έμ΄λ€. μ°λ¦¬κ° μ΄μ κΈμμ νμ©νλ κ²μ μμΌμ λΈλ‘νΉ μμΌμ΄λ€. λ°λ‘ μ΅μ μ μ€μ ν κ² κ°μ§λ μμλ°? κ·ΈλΌμλ λΆκ΅¬νκ³ , μ°λ¦¬κ° λ§λ μμΌμ΄ κΈ°λ³Έμ μΌλ‘ λΈλ‘νΉ μμΌμΌλ‘ μ‘ν κ²μΈλ°.. λ ΌλΈλ‘νΉ μμΌμ μ΄μΌκΈ°νκΈ° μ μ λ¨Όμ λΈλ‘νΉ μμΌ..
[C++ κ²μ μλ²] 3-6. μμΌ μ΅μ ν΅μ¬ : 1. μμΌμλ μ΅μ μ μ€μ νκ³ , μ€μ κ°μ λΆλ¬μ¬ μ μλ€. ::getsockopt μ ::setsockopt κ° κ·Έκ²μ΄λ€. 2. μμΌ μ΅μ μ μ€μ λ¨κ³λ 3 κ°μ§λ‘, μμΌ μ½λ(SOL_SOCKET), IPv4(IPPROTO_IP), TCP νλ‘ν μ½(IPROTO_TCP) μ΄λ€. 3. SO_KEEPALIVE, SO_LINGER, SD_SEND, SO_REUSEADDR λ± μμ£Ό μ°μ΄λ μ΅μ μ λμ μ΅νλ©΄ μ’λ€! μ°λ¦¬λ μ§κΈκΉμ§ μμΌμ λ§λ€μ΄μ μλ²-ν΄λΌμ΄μΈνΈ ν΅μ μ μ§ννλλ°, μ¬μ€ νΈλν°μλ μ¬λ¬ κΈ°μ’ μ΄ μκ³ λ€μν 컀μ€ν°λ§μ΄μ§μ΄ κ°λ₯νλ―μ΄, μμΌλ μ¬λ¬ μ΅μ μ μ€ μ μλ€. μ΄λ₯Ό μ€μ νλ ν¨μλ ::setsockopt μΈλ°, μΈμλ₯Ό 보면... λ‘ λμ΄ μλ€..
[C++ κ²μ μλ²] 3-5. UDP μλ² μ€μ΅ ν΅μ¬ : 1. UDP λ TCP μ λ€λ₯΄κ², ν¨ν· κ°μ κ²½κ³κ° μκ³ μλκ° λΉ λ₯΄λ€. λ€λ§ ν¨ν·μ μμκ° λ³΄μ₯λμ§ μμΌλ©°, λ°μ΄ν°κ° μ μ€λ μνμ΄ μ‘΄μ¬νλ€. 2. UDP μ€μ΅μ κ²½μ°, TCP μ€μ΅ μ½λμμ ::connect μ ::listen λ§ μμΌλ©΄ λ‘μ§μ κ±°μ λμΌνλ€. 3. UDP λ Connected UDP(μΌμ’ μ μ¦κ²¨μ°ΎκΈ° κΈ°λ₯)μ νμ©νλ©΄, sendto λμ send λ₯Ό, recvfrom λμ recv λ₯Ό μ¬μ©νμ¬ API λ₯Ό λ κ°λ¨νκ² μ¬μ© κ°λ₯νλ€. μ λ²μλ TCP λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό μ μ‘νλ μ€μ΅μ νμΌλ, μ΄λ²μλ UDP λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό μ μ‘ν΄ λ³΄μ. μ¬μ€ 그리 λ€λ₯΄μ§λ μλ€. μ‘°κΈ κ°μνλμλ€κ³ νλ©΄ λ κΉ? 3-2 μ 보면 κΈ°λ³Έμ μΌλ‘ μμΌ..
[C++ κ²μ μλ²] 3-4. TCP vs UDP ν΅μ¬ : 1. TCP μ UDP λ λ€νΈμν¬ νλ‘ν μ½ μ€, νΈλμ€ν¬νΈ λ μ΄μ΄μ ν΄λΉνλ κ·μΉμ΄λ€. 2. TCP λ μμ νλ©°(λ°μ΄ν° μ μ€μ΄ μμ), λ°μ΄ν°μ μμκ° λ³΄μ₯λλ€. νμ§λ§ κ° ν¨ν·μ κ²½κ³(Boundary)κ° μμ΄ λ°μ΄ν°κ° ν©μ³μ§κ±°λ μͺΌκ°μ§ μ μμΌλ©°, UDP μ λΉν΄ μλμ μΌλ‘ λ리λ€. 3. UDP λ λΉ λ₯΄λ©°(μΌλ¨ λ°μ΄ν°λ₯Ό 보λ΄κ³ λ΄), ν¨ν·μ κ²½κ³κ° μμ΄ λ°μ΄ν°κ° μͺΌκ°μ§κ±°λ ν©μ³μ§μ§ μλλ€. νμ§λ§ ν¨ν· μ μ‘μ μμκ° λ³΄μ₯λμ§ μμΌλ©°, λ°μ΄ν°κ° μ μ€λ μνμ±μ΄ μλ€. μ΄λ² κΈμμλ κ°λ¨ν TCP μ UDP μ μ°¨μ΄μ λν΄ μμ보λλ‘ νμ. λ€νΈμν¬ κ³΅λΆλ₯Ό κΉκ² νμ§ μμμ΄λ, μ€λ©°κ°λ©° κ·Έ λμ μ°¨μ΄μ λν΄μλ μκ² λλλ°, μ΄λ² κΈμμλ κ·Έμ ..
[C++ κ²μ μλ²] 3-3. TCP μλ² μ€μ΅ ν΅μ¬ : 1. TCP μμλ μ‘μμ λ²νΌκ° μ‘΄μ¬νλ©°, ν΅μ μ ν λ λ²νΌμ λ°μ΄ν°λ₯Ό λ΄κ³ κΊΌλ΄λ λ°©μμΌλ‘ ν΅μ μ΄ μ΄λ£¨μ΄μ§λ€. 2. ν΄λΌμμ μ‘μ μ νλ €κ³ νλλ° μ‘μ λ²νΌκ° κ°λ μ°¨ μκ±°λ, μλ²μμ μμ μ νλ €κ³ νλλ° μμ λ²νΌκ° λΉμ΄ μμΌλ©΄ Blocking μνμ λμ νλ€. 3. μ κΈ°νκ²λ, λ²νΌ λ΄ κ° λ°μ΄ν° λ³λ‘λ λͺ νν κ²½κ³κ° μμ΄ λ°μ΄ν°λ ν©μ³μ§κ±°λ μͺΌκ°μ Έμ μΈμλ μ μλ€. μ λ²μ μμΌ νλ‘κ·Έλλ° κΈ°μ΄λ₯Ό λ€λ£¨λ©΄μ, μμΌμ λ§λ€κ³ , μ£Όμλ₯Ό ν λΉνκ³ , μμΌκ³Ό μ£Όμλ₯Ό ν λΉν ν, μ€μ λ‘ ν΅μ μ ν΄λ³΄λ μ€μ΅μ μ§ννλ€. μ΄λ² μκ°μλ TCP μ€μ΅μ ν΄ λ³Ό μμ μ΄λ€. μ½λμ PPT λ₯Ό 보면μ, μ€μ΅μ μ§νν΄ λ³΄μ. μΌλ¨ μ λ² μκ°μ μμΌ λ°μΈλ© μμ ..