βοΈ μ΄μ μκ°μ IOμ λν΄ κ³΅λΆνλ©΄μ νμΌμ μ μ₯νλ κ²κ³Ό λ€νΈμν¬ ν΅μ κ³Όλ μ ν κ΄λ ¨ μλ€κ³ μκ°νλλ°, νλ λ μ© κ³΅λΆνλ€ λ³΄λ νλμ λΏλ¦¬μμ μμλμλ€λ κ²μ μκ²λμλ€.
μ΄λ² μκ°μλ κ·Έ μ°μ₯μΌλ‘ Socket ν΅μ μ λν΄ κ³΅λΆν΄λ³΄λ €κ³ νλ€.
Socket
Socket(μ΄ν μμΌ)μ 무μμΌκΉ?
μΌμμμ λ³Ό μ μλ μ½μΌνΈ μμΌμΌ μλ μκ³ , μ ꡬλ₯Ό λΌμ°λ μμΌμΌ μλ μκ³ , μ°λ¦¬κ° μ§κΈ 곡λΆνλ €κ³ νλ μμΌμ΄λΌλ νλ‘ν μ½μΌ μλ μλ€. μ΄λ€μ 곡ν΅μ μ Aμ Bλ₯Ό μ°κ²°νκΈ° μν΄ νμν μ‘΄μ¬λΌλ κ²μ΄λ€.
A socket is an endpoint for communication between two machines.
μμΌμ λ κΈ°κΈ° κ°μ ν΅μ μ μν μλν¬μΈνΈμ΄λ€.
- Java 8 Reference
λ€νΈμν¬μ κ΄μ μμμ μμΌμ Aμ B κ°μ ν΅μ μ’
λ¨μ μ λνλ΄λλ°, μλ‘ ν΅μ νκ³ μ νλ μμΉλ₯Ό μλ³νκΈ° μν λͺ
μΈμμ κ°μ κ°λ
μ΄λ€.
λλ¬Έμ μμΌμ νλ‘ν μ½, IP μ£Όμ, Port λ±μ ꡬμ±μμλ₯Ό κ°μ§κ³ μλ€. μ¬μ΄νΈ μ΄λ
Transport Protocol
OSI 7 Layerμμ 3λ² μ§Έ λ μ΄μ΄μΈ μ μ‘ κ³μΈ΅μ μν νλ‘ν μ½μ΄λ€. ν΄λΉ κ³μΈ΅μμ ν¨ν·μ ν¬νΈ λ²νΈλ₯Ό ν€λλ‘ κ°μΈλ©°, μ΄ λμ ν¬νΈ λ²νΈλ μ€μνλ‘ μΉμλ©΄ μμΈνΉλ³μ κ°λ¨κ΅¬ μ΄λ€ μννΈ 101λ 101νΈ λΌλ μ£Όμμμ 101νΈκ° ν¬νΈ λ²νΈμ μνλ€. μ¦, μ‘μμ μμ μλ κΈ°κΈ°μ μ΄λ€ νλ‘μΈμ€μ μ κ·Όν΄μΌ νλμ§ μλ €μ£Όλ μ΄μ ν μν μ νλ€.
μ μμΌμ μ μ‘ κ³μΈ΅μ νλ‘ν μ½μ λ΄μμ ν΅μ νλκ±ΈκΉ?
μ μ‘ κ³μΈ΅μ λ€νΈμν¬ ν΅μ μ μλ ν¬μΈνΈ(λ¨λλ¨ ν΅μ )λΌλ μλ―Έλ₯Ό κ°μ§λ€. μ΄λ₯Ό μ΄ν΄νκΈ° μν΄μλ OSI 7 Layer νΉμ TCP/IP, UDP/IP λ± λ€νΈμν¬ ν΅μ λͺ¨λΈμ λν΄μ 곡λΆν΄μΌ νλλ°, κ°λ¨ν μ€λͺ νκ³ μ νλ€.
μ μ‘ κ³μΈ΅ μλμ λ€νΈμν¬, λ°μ΄ν° λ§ν¬, 물리 κ³μΈ΅μ λ€νΈμν¬ ν΅μ μ μν΄ MAC μ£Όμ, IP μ£Όμ, ν¨ν· λ± κ΅¬μ± μμλ€μ μ€λΉνλ κ³μΈ΅μ΄λ€.
μ΄λ κ² μ€λΉλ κ΅¬μ± μμλ€μ μ μ‘ κ³μΈ΅μμ νλ‘ν μ½(TCP, UDP) λͺ
μΈμ λ§κ² 쑰리νμ¬ λ€νΈμν¬ ν΅μ μ΄ μ΄λ£¨μ΄μ§λλ‘ νλ μν νΉμ μμ κ³μΈ΅μμ μ λ¬ λ°μ λ΄μ©λ€μ νμ κ³μΈ΅μκ² νμ΄μ μ λ¬νκΈ° μν μν μ κ°μ§λ€.
μ¦, μ μ‘ κ³μΈ΅μ νμ κ³μΈ΅μμ μ€λΉλ κ΅¬μ± μμλ€μ λ€νΈμν¬ ν΅μ μ νκΈ°μν μμμ (μλ΅μ κ²½μ°)μ΄μ λ€νΈμνΈ ν΅μ μμ²μ λν΄ κ΅¬μ± μμλ€μ λΆν΄νμ¬ νμ κ³μΈ΅μΌλ‘ μ μ‘νλ λ§μ§λ§ μ§μ (μμ²μ κ²½μ°)μ΄κΈ° λλ¬Έμ λ€νΈμν¬ ν΅μ μ μλ ν¬μΈνΈλΌκ³ νλ€.
λν, μ΄λ¬ν μ΄μ λλ¬Έμ μμΌμ νλ‘ν μ½μλ μ μ‘ κ³μΈ΅μ νλ‘ν μ½μ λ΄μ μ΄λ₯Ό κΈ°μ€μΌλ‘ λ€νΈμν¬ ν΅μ μ μννλ€.
π +) 2021.06.21 λͺ¨κ°μͺ μ€ν°λ λ΄μ© μΆκ°
λ€μ ν λ² μκ°ν΄λ³΄μ! μμΌμ ꡬμ±μμμ μ μ μ‘ κ³μΈ΅μ νλ‘ν μ½μ΄ ν¬ν¨λμ΄ μμκΉ?OSI 7 Layer λ TCP/IP λͺ¨λΈμ λν΄μ λ€μ μκΈ°ν΄λ³΄μ!
μ μ‘ κ³μΈ΅μ OSμμ μννΈμ¨μ΄λ‘ ꡬνλ κ³μΈ΅ μ€ κ°μ₯ λ§μ§λ§ λ¨κ³μ΄λ€.μ¦, μ΄μ체μ μμ νΈλ€λ§ ν μ μλ€λ μλ―Έμ΄κ³ , μ μ‘ κ³μΈ΅μ νλ‘ν μ½μ κΈ°μ€μΌλ‘ νλ‘κ·Έλ¨μ ꡬννλ€λ©΄ κ·Έ μμ κ³μΈ΅μ νλ‘ν μ½μ κ°λ°μκ° μ§μ ꡬν ν μ μλ€.
κ·Έλ¦¬κ³ μ μ‘ κ³μΈ΅μ μμ κ³μΈ΅μ λ€νΈμν¬ ν΅μ μ νμμ μΈ μμλΌκΈ° λ³΄λ€ λͺ©μ κ³Ό μν©(HTTP, FTP λ±)μ λ§κ² κ³ λν λ κ³μΈ΅μ΄λΌλ©΄, μ μ‘ κ³μΈ΅κ³Ό κ·Έ νμ κ³μΈ΅λ€μ λ€νΈμν¬ ν΅μ μ νμμμλ₯Ό λ΄κ³ μλ€.
κ·Έλ κΈ°μ μ μ‘ κ³μΈ΅μμ λΆν° κ°μΈμ§ ν€λμ λ΄μ©λ€μ΄ λ€νΈμν¬ ν΅μ μμ κΌ νμν μμμ΄κΈ° λλ¬Έμ μ μ‘ κ³μΈ΅μ΄ ν΅μ νλ κΈ°κΈ° κ°μ μλ ν¬μΈνΈλΌκ³ μ€λͺ νλ κ² κ°λ€.
IP Address (Client, Server)
IP μ£Όμλ λ€νΈμν¬ ν΅μ μ μν΄ κ°κ°μ κΈ°κΈ°κ° κ°μ§λ κ³ μ ν μΈν°λ· μ£Όμμ΄λ€. μ§λμ μ’νμ λΉμ·νλ€κ³ μκ°νλ©΄ μ’μ κ² κ°λ€.
μμΌμμλ ν΄λΌμ΄μΈνΈμ μλ²μ IP μ£Όμλ₯Ό κ°μ§κ³ μλλ°, κ·Έ μ΄μ λ TCP νλ‘ν μ½μ μλ‘ λ€μ΄λ³΄μλ©΄, TCP νλ‘ν μ½μ κΈ°λ³Έμ μΌλ‘ μμ²μ λν μλ΅μ λ°νν΄μΌ νλ€. κ·Έλ°λ° λ§μ½ μλ΅μ λ°μ ν΄λΌμ΄μΈνΈμ IP μ£Όμκ° μλ€λ©΄ TCP νλ‘ν μ½μ λͺ μΈμ λΆν©νμ§ μλλ€.
λλ¬Έμ μμΌμ ν΄λΌμ΄μΈνΈμ μλ² λͺ¨λμ IP μ£Όμλ₯Ό κ°μ§κ³ μλ€.
Port (Client, Server)
Port(μ΄ν ν¬νΈ)λ νꡬλΌλ μλ―ΈμΈλ°, μ΄λ A μ λ°μ΄ B νꡬμ 1 ~ 10 μ μ°©μ₯ μ€ μ΄λ€ μ μ°©μ₯μ μ λ°ν μ§λ₯Ό μλ―Ένλ€. μ¦, κ°μ IPλ₯Ό κ°μ§ μλ²λ μ‘΄μ¬νμ§ μμΌλ ν΄λΉ IPλ₯Ό κ°μ§ μλ²μ ν΅μ μ ν μ μλλ°, μλ²μμ λμ μ€μΈ μ΄λ€ νλ‘μΈμ€μ ν΅μ ν μ§λ μ μ μλ€. μ΄λ₯Ό ν¬νΈλ₯Ό ν΅ν΄μ ν΅μ νκ³ μ νλ μλ²μ νλ‘μΈμ€μ μ¬λ°λ₯΄κ² μ κ·Ό ν μ μλ€.
ν¬νΈλ IP μ£Όμμ λ§μ°¬κ°μ§λ‘ ν΄λΌμ΄μΈνΈμ μλ²μ ν¬νΈ λ²νΈλ₯Ό κ°μ§κ³ μμ΄μΌ νλ€. κΈ°λ³Έμ μΌλ‘ νλ‘μΈμ€ λΉ νλμ μ μΌν ν¬νΈ λ²νΈλ₯Ό ν λΉ λ°λλ°, μλ²μκ² μμ² ν λ ν¬νΈ λ²νΈκ° μμΌλ©΄ μ΄λ€ νλ‘μΈμ€μ ν΅μ ν΄μΌ ν μ§ μ μ μκ³ , ν΄λΌμ΄μΈνΈμ ν¬νΈ λ²νΈκ° μμΌλ©΄ μλ²κ° μμ²μ λν μλ΅μ ν΄λΌμ΄μΈνΈμ μ΄λ€ νλ‘μΈμ€λ‘ μ λ¬ ν΄μΌ νλμ§ μ μ μλ€.
(λ μ°Ύμ보λ λ©ν° νλ‘μΈμ€ νκ²½μμ μ¬λ¬ νλ‘μΈμ€μ ν¬νΈ λ²νΈλ₯Ό λμΌνκ² μ€μ ν μ μλ€κ³ νλ©°, μ΄λ μ¬λ¬ λ°©λ²μ΄ μμ§λ§ λνμ μΌλ‘ IP μ£Όμλ₯Ό κ°κ° λ€λ₯΄κ² μ€μ ν΄μ ν¬νΈ λ²νΈλ₯Ό κ°λλ‘ μ€μ ν μ μλ€κ³ νλ€.)
Socket Programming
μμΌ νλ‘κ·Έλλ°μ΄λ κΈ°κΈ° κ° λ€νΈμν¬ ν΅μ μ ν΅ν΄ λ°μ΄ν° μ‘μμ μ ν μ μλ νλ‘κ·Έλ¨μ μμ±νλ κ²μ μλ―Ένλ€. μ΄ λ, μμΌμ νλ‘ν μ½μλ μ μ‘ κ³μΈ΅μ νλ‘ν μ½μ μλ―Ένλ€κ³ 곡λΆνλλ°, λνμ μΌλ‘ TCP, UDP νλ‘ν μ½μ΄ μκ³ , μ΄μ λ°λΌμ μμΌ νλ‘κ·Έλ¨μ μμ±νλ κ΅¬μ‘°κ° λ¬λΌμ§λ€.
κ·Έ μ΄μ λ TCPμ UDPμ μ¬μ© μ©λλ λͺ μΈ λ΄μ©μ΄ κ°κ° λ€λ₯΄λ©° 무μ보λ€λ TCP νλ‘ν μ½μ μ΄μ©ν μμΌ νλ‘κ·Έλ¨μ ν¨ν·μ Streamμ λ΄μ λ€νΈμν¬ ν΅μ μ νλ λ°λ©΄, UDP νλ‘ν μ½μ μ΄μ©ν μμΌ νλ‘κ·Έλ¨μ ν¨ν·μ Datagramμ λ΄μ λ€νΈμν¬ ν΅μ μ μννλ€.
μ¬κΈ°μ Streamκ³Ό Datagramμ λν΄μ μ΄μ μ Java IO μ λν΄ κ³΅λΆνλ κ²λ€μ λ μ¬λ €λ³΄μ.
Streamμ λ¨λ°©ν₯ ν΅λ‘λ‘μ¨ Input, Output λ μ€ νλμ μν λ§ μν ν μ μκΈ° λλ¬Έμ Inputκ³Ό Output Streamμ λͺ¨λ λ§λ€μ΄μ€μΌ νλ€.
λ°λ©΄ Datagram μ Channelμ μ΄μ©νκΈ° λλ¬Έμ νλμ Channelμ ν΅ν΄μ Input, Output ν΅μ μ μν ν μ μλ€.
κ·Έλ¦¬κ³ μλ² μμΌ νλ λΉ ν΄λΌμ΄μΈνΈ μμΌ νλλ§ λ§€νλ μ μλ€. μ¦, 1κ°μ μλ² μμΌμ μ¬λ¬ κ°μ ν΄λΌμ΄μΈνΈ μμΌμ΄ μλ‘ μ°κ²°λ μ μλ€. μ¬λ¬ κ°μ ν΄λΌμ΄μΈνΈ μμΌκ³Ό μ°κ²°νκΈ° μν΄μ κ·Έ λ§νΌμ μλ² μμΌμ λ§λ€μ΄μΌ ν κΉ? μ΄λ κ΅μ₯ν λΉν¨μ¨μ μ΄λΌκ³ νλ©°, μ΄λ₯Ό ν΄κ²°νκΈ° μν΄μ μ€λ λλ‘ μμΌμ κ΄λ¦¬νκ³ ν΄λΌμ΄μΈνΈ μμΌκ³Ό 맀νλ μ μλλ‘ κ΅¬ννλ€κ³ νλ€. (ν΄λΉ λΆλΆμ λ μμ λ΄μΌκ² μ§λ§ μ΄λ€ ν€μλλ‘ κ²μν΄μΌ ν μ§ λͺ¨λ₯΄κ² λ€.)
μ΄μ체μ μμμ Socket
μμΌμ λν κ°λ
μ΄ κ·Έλ €μ§μ§ μλλ° λλΆλΆμ λΈλ‘κ·Έμμ κ΄λ
μ μΈ κ°λ
λ§ μ€λͺ
νκ³ μμ΄ μ΄λ»κ² κ²μνλ©΄ μ’μμ§ κ³ λ―Όνλ μ°°λμ OSI 7 Layer λ₯Ό 곡λΆνλ©΄μ μ μ‘ κ³μΈ΅μ μ΄μ체μ μμ μννΈμ¨μ΄λ‘ ꡬνλ κ³μΈ΅μ΄λΌλ λ΄μ©μ΄ λ μ¬λλ€.
κ·Έλμ Linux Socket μ΄λΌκ³ κ²μμ ν΄λ΄€λλ, κ·Έλ₯ μμΌμ΄λΌκ³ κ²μνλ κ²λ³΄λ€ λ μμ§μ μ 보λ€μ΄ κ²μλλ€.
λ¨Όμ 리λ
μ€ μ΄μ체μ μμλ νλ‘μΈμ€ λΏλ§ μλλΌ μ€λ λ, μμΌ μ‘°μ°¨λ νλμ νμΌλ‘ λ³Έλ€κ³ νλ€.
μ¦, 리λ
μ€λ λ©λͺ¨λ¦¬ μμμ μ‘΄μ¬νκ³ μλ λͺ¨λ κ²λ€μ΄ νλμ μμμΌλ‘ μΈμνλ€λ λ§μ΄λ©°, 리λ
μ€λ μ΄λ¬ν νμΌμ μ€ν ν μ μλ κ°μ(open files)λ₯Ό μ€μ ν μ μλλ°, λ§μ½ λ©λͺ¨λ¦¬μ μ μ¬λ νμΌμ κ°μκ° μ€μ ν κ°λ§νΌ λ§μμ§λ©΄ OOM μ΄ λ°μν μ μλ€. (Linux Socket ulimit)
λλ¬Έμ ν΄λΉ κ°μ μ΄μ체μ λ¨μμ μ§μ νΈλ€λ§νκ±°λ μ ν리μΌμ΄μ λ΄μμ λμ μΌλ‘ μμ€ν μ½μ νΈμΆνμ¬ κ°μ μμ ν΄ λ©λͺ¨λ¦¬ μ΄κ³Όλ‘ μλΉμ€κ° μ’ λ£λλ κ²μ λ―Έμ°μ λ°©μ§ ν΄μΌ ν κ²μ΄λ€.
μ°Έκ³ μ¬μ΄νΈ
'Programming > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Effective Java] μ EnumSet κ³Ό EnumMap μ μ¬μ©ν΄μΌ νλκ° (0) | 2022.11.20 |
---|---|
F018 - Serializable (μ§λ ¬ν, μμ§λ ¬ν) (0) | 2021.06.16 |
F017 - Blocking, Non-Blocking / Synchronous, Asynchronous (2) | 2021.06.15 |
F016 - File, I/O, Stream (0) | 2021.06.14 |
F015 - Set (μμ± μ€) (0) | 2021.05.31 |