๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Java

[์ฑ„ํŒ… ํ”„๋กœ๊ทธ๋žจ] ํด๋ž˜์Šค ServerSocket๊ณผ Socket + TCP ์†Œ์ผ“

by applemango2021 2021. 8. 15.

์ฒ˜์Œ OSI 7๊ณ„์ธต์ด๋‚˜ TCP/IP ํ”„๋กœํ† ์ฝœ์„ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก๋˜๋Š” ํฐ ํ๋ฆ„์ด ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๊ฒŒ ๋œ๋‹ค. ์ „์†ก ํ๋ฆ„์€ ์•„์ฃผ ๊ฐ„๋‹จํ•˜๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ์š”์ฒญ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์„ ์‹œ์ž‘์œผ๋กœ ์ „์†ก๊ณ„์ธต, ์ธํ„ฐ๋„ท ๊ณ„์ธต, ๋„คํŠธ์›Œํฌ ์•ก์„ธ์Šค ๊ณ„์ธต์„ ๊ฑฐ์ณ์„œ ๋ฐ์ดํ„ฐ ๋ฉ์–ด๋ฆฌ๋กœ ๋งŒ๋“ค์–ด์ง€๊ณ , ์ด๋ฅผ ์ƒ๋Œ€ ์„œ๋ฒ„์— ๋ณด๋‚ด๋ฉด ๊ฑฐ๊พธ๋กœ ๋„คํŠธ์›Œํฌ ์•ก์„ธ์Šค → ์ธํ„ฐ๋„ท → ์ „์†ก → ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์„ ๊ฑฐ์น˜๋ฉด์„œ ๋ฐ์ดํ„ฐ ๋ฉ์–ด๋ฆฌ์˜ ํฌ์žฅ์„ ํ’€๊ฒŒ ๋œ๋‹ค.  

 

์ด ํ๋ฆ„์„ ๋ณด๋ฉด์„œ ๊ฐ€์žฅ ๊ถ๊ธˆํ–ˆ๋˜ ๊ฑด "๊ฐ ๊ณ„์ธต ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฃผ๊ณ  ๋ฐ›๋Š”์ง€"์˜€๋‹ค. ์ •ํ™•ํžˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์—์„œ ์ „์†ก ๊ณ„์ธต์œผ๋กœ ํ˜น์€ ์ „์†ก ๊ณ„์ธต์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์œผ๋กœ ์ •๋ณด๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณด๋‚ด์ฃผ๋Š”์ง€๊ฐ€ ๊ถ๊ธˆํ–ˆ๋‹ค.

ํ•˜๋‚˜์˜ ์„œ๋ฒ„์— A, B, C ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ˆ˜ํ–‰๋˜๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ A ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์š”์ฒญ์€ ์–ด๋– ํ•œ ํฌํŠธ ๋ฒˆํ˜ธ๋กœ ๋“ค์–ด์˜ค๋Š”์ง€ ์–˜๋„ค(์ปดํ“จํ„ฐ ํ˜น์€ ํ”„๋กœ๊ทธ๋žจ)๊ฐ€ ์–ด๋–ป๊ฒŒ ์•Œ์ง€? ํ•˜๋‚˜์˜ ์„œ๋ฒ„์— ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋งŒ ์ˆ˜ํ–‰๋œ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ์–ด์ฐŒ๋๋“  ์ง€์ •๋œ ํฌํŠธ๋ฒˆํ˜ธ๋กœ ๋“ค์–ด์˜จ ์š”์ฒญ๋งŒ ๋ฐ›์•„์•ผ ํ•  ํ…๋ฐ ๋Œ€์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์€ ์ž๊ธฐ์™€ ์—ฐ๋™๋œ ํฌํŠธ๋ฒˆํ˜ธ๊ฐ€ ๋ญ”์ง€ ์–ด๋–ป๊ฒŒ ์•Œ๊ณ  ์‘๋‹ต์„ ์ฃผ๋Š” ๊ฑฐ์ง€? ์‹ถ์—ˆ๋‹ค. 

 

๊ทธ๋ ‡๊ฒŒ ๋ฉฐ์น ์„ ๊ณ„์† ์—ฌ๋Ÿฌ ํ‚ค์›Œ๋“œ๋กœ ๊ฒ€์ƒ‰ํ•˜๋‹ค๊ฐ€ ์™ธ๊ตญ ์‚ฌ์ดํŠธ์—์„œ Socket์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์–ธ๊ธ‰ํ•œ ๊ฑธ ์šฐ์—ฐํžˆ ๋ดค๋‹ค. ํ˜น์‹œ๋‚˜ ํ•˜๋Š” ๋งˆ์Œ์— ์ฐพ์•„๋ณด๋‹ˆ๊นŒ ๋‚ด๊ฐ€ ๊ถ๊ธˆํ•ดํ•œ ๋ถ€๋ถ„์„ ๋‹ด๋‹นํ•˜๋Š” ๊ฒŒ ๋ฐ”๋กœ TCP ์†Œ์ผ“์ด์—ˆ๋‹ค. ์–ด์ฐŒ๋‚˜ ํ—ˆํƒˆํ–ˆ๋Š”์ง€ ใ…Žใ…Ž,,,์†Œ์ผ“์ด ๋ญ”์ง€ ๋Œ€์• ์ถฉ๋งŒ ์•Œ๊ณ  ์žˆ๊ณ , ๋ณดํ†ต ์Šคํ”„๋ง๋ถ€ํŠธ๋กœ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ˆ๊นŒ ์ด๋Ÿฌํ•œ ์ž์งˆ๊ตฌ๋ ˆํ•œ ์„ค์ •๋“ค์€ ์ƒ๊ฐํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ๋ฌด์ง€ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. 

์ถœ์ฒ˜ : https://ppt-online.org/20729

 

 

์—ฌํŠผ ์š”์•ฝํ•˜์ž๋ฉด TCP ์†Œ์ผ“์€ ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ ์—์„œ ์ „์†ก๊ณ„์ธต๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋Š” ์ฐฝ๊ตฌ ์—ญํ• ์„ ํ•œ๋‹ค. 

 

์ฐธ๊ณ ๋กœ ์•„๋ž˜ ์˜ˆ์ œ์™€๋Š” ์ „ํ˜€ ์ƒ๊ด€์—†์ง€๋งŒ

๋”๋ณด๊ธฐ

HTTP ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•œ ํ”„๋กœ๊ทธ๋žจ๋“ค๋„ ๊ฒฐ๊ตญ ์†Œ์ผ“์„ ์ด์šฉํ•œ ํ†ต์‹ ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์‚ฌ์‹ค 100ํ”„๋กœ ์ž์‹ ์€ ์—†๋Š”๋ฐ, ๊ฒฐ๊ตญ HTTP๋„ TCP ์œ„์—์„œ ์ž‘๋™ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋ฉด TCP ์†Œ์ผ“์„ ์‚ฌ์šฉํ•  ์ˆ˜ ๋ฐ–์— ์—†์ง€ ์•Š์„๊นŒ..? 

๋‚ด๊ฐ€ ์ข€ ํ—ท๊ฐˆ๋ ธ๋˜ ๋ถ€๋ถ„์€ HTTP์˜ ํŠน์„ฑ์œผ๋กœ connectionless์™€ stateless๋ฅผ ๊ผฝ๋Š”๋ฐ, TCP๋Š” connection oriented๋ผ์„œ TCP ์†Œ์ผ“ ํ†ต์‹ ๊ณผ HTTP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์€ ๋ญ”๊ฐ€ ์•ˆ ๋งž๋Š”๋‹ค ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํ†ต๋กœ(์†Œ์ผ“ ํ†ต์‹ )๋Š” ์ผ๋‹จ ๋šซ์–ด๋†“๊ณ , ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š”(HTTP) ๋งค๊ฐœ์ž๋ฅผ ํ•œ๋ฒˆ ์“ฐ๊ณ  ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•˜๋ฉด ๋˜ ๊ทธ๋ ‡๊ฒŒ ์ด์ƒํ•˜์ง„ ์•Š์•„์„œใ…Ž,,,์ผ๋‹จ ๊ทธ๋ ‡๊ฒŒ ์ดํ•ดํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. 

๋‚˜๋ž‘ ๋น„์Šทํ•œ ๊ณ ๋ฏผ์„ ํ•œ ์‚ฌ๋žŒ์ด ์žˆ๋Š”๋ฐ, ๋‹ต๋ณ€์ž์˜ ๋ง์„ ๋ฐฑํ”„๋กœ ์ดํ•ด๋Š” ๋ชปํ•˜๊ฒ ์ง€๋งŒ ์–ผ์ถ” ์–ด๋–ค ๋Š๋‚Œ์ธ์ง€๋Š” ์•Œ ๊ฒƒ ๊ฐ™๋‹ค.


ํด๋ž˜์Šค ServerSocket : ์„œ๋ฒ„ ์ธก ์†Œ์ผ“

์„œ๋ฒ„์—์„œ๋Š” ํŠน์ • ๋ฒˆํ˜ธ์˜ ํฌํŠธ๋ฅผ ์—ด์–ด๋†“๊ณ , ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ด ์ถœ์ž…๊ตฌ์˜ ์—ญํ• ์„ ํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ServerSocket์ด๋‹ค. ์ƒ์„ฑ์€ ์•„๋ž˜์™€ ๊ฐ™์ด new ServerSocket(ํฌํŠธ๋ฒˆํ˜ธ)๋กœ ๊ฐ„๋‹จํžˆ ํ•  ์ˆ˜ ์žˆ๋‹ค. ServerSocket ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ bind() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ณ„๋„๋กœ ๋ฐ”์ธ๋”ฉ ์ž‘์—…์„ ํ•  ํ•„์š”๋Š” ์—†๋‹ค. ์ฐธ๊ณ ๋กœ 5000๋ฒˆ ํฌํŠธ๋กœ ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ, ์ด ์š”์ฒญ ์ •๋ณด๋ฅผ A ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋„๋ก  A์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ 5000๋ฒˆ ํฌํŠธ ๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”์ธ๋”ฉ ์ž‘์—…์ด๋‹ค.  ๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ์— 0์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ž…๋ ฅํ•˜๋ฉด ๋žœ๋ค์œผ๋กœ ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ์ง€์ •๋ฐ›๊ฒŒ ๋˜๋Š”๋ฐ, ํด๋ผ์ด์–ธํŠธ ์ธก์ด๋ฉด ๋ชฐ๋ผ๋„ ์„œ๋ฒ„ ์ธก์˜ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ๋žœ๋คํ•˜๊ฒŒ ์ง€์ •ํ•  ์ผ์ด ์žˆ์„๊นŒ ์‹ถ๋‹ค. 

ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ๋„ฃ์–ด์„œ ServerSocket์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. 

์‹ค์ œ๋กœ ํ•ด๋‹น ํฌํŠธ์— ์—ฐ๊ฒฐ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ, ์ด๋ฅผ ์ˆ˜๋ฝํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋Š” accept() ๋ฉ”์†Œ๋“œ๋‹ค. ์ผ๋‹จ accept() ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ์„ ์š”์ฒญํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋ธ”๋กœํ‚น๋œ๋‹ค.  ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด serverSocket.accept() ์ดํ›„์˜ ์ฝ”๋“œ๋Š” ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค. ํ•œ ๋งˆ๋””๋กœ ์—ฐ๊ฒฐ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํƒ€๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. 

accept() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๊ธฐ๋ฅผ ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋‹ค.
accept ๋ฉ”์†Œ๋“œ ์ด์ „์˜ ๋ฌธ๊ตฌ๋Š” ์ถœ๋ ฅ๋˜์—ˆ์ง€๋งŒ, ์ดํ›„์— ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค

 

ํด๋ž˜์Šค Socket : ํด๋ผ์ด์–ธํŠธ ์ธก ์†Œ์ผ“

์„œ๋ฒ„ ์ธก ์†Œ์ผ“์ด ํŠน์ • ๋ฒˆํ˜ธ(ex.5000)์˜ ํฌํŠธ ๋ฌธ์„ ์ง€ํ‚ค๊ณ  ์žˆ๋Š” ๋ฌธ์ง€๊ธฐ๋ผ๋ฉด,  Socket ํด๋ž˜์Šค๋Š” ๋ชฉ์ ์ง€ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ณด๋ถ€์ƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

ServerSocket๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ new Socket(์„œ๋ฒ„ IP ์ฃผ์†Œ, ์„œ๋ฒ„ ํฌํŠธ ๋ฒˆํ˜ธ)๋ฅผ ํ†ตํ•ด ์†Œ์ผ“ ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ์—ฐ๊ฒฐ ์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ์†Œ์ผ“๋งŒ ์ƒ์„ฑํ•˜๊ณ  ์—ฐ๊ฒฐ ์š”์ฒญ์€ ๋‚˜์ค‘์— ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด connect() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ๋Œ€์‹  ์ด๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ InetSocketAddress ๊ฐ์ฒด๋ฅผ ๋„˜๊ฒจ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด Socket ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€ ์ฝ”๋“œ์—์„œ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 

// ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ• : ์†Œ์ผ“ ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ์„œ๋ฒ„๋กœ ์—ฐ๊ฒฐ ์š”์ฒญ 
Socket socket = new Socket("localhost", 5001);

// ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ• : ์†Œ์ผ“ ์ƒ์„ฑ ์ดํ›„์— ๋”ฐ๋กœ ์—ฐ๊ฒฐ ์š”์ฒญ
Socket socket = new Socket();
socket.connect(new InetSocketAddress("localhost", 5001);

[Socket ํด๋ž˜์Šค ์ฝ”๋“œ] ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์˜ ๊ฒฝ์šฐ, ๋‚ด๋ถ€์—์„œ InetSocketAddress ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค 

 

ServerSocket๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Socket๋„ connect() ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด, ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ์ด ๋งบ์–ด์ง€๊ธฐ ์ „๊นŒ์ง€๋Š” ๋ธ”๋กœํ‚น๋œ๋‹ค.  ServerSocket์ฒ˜๋Ÿผ connect() ์ดํ›„์˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๊ฑธ ํ…Œ์ŠคํŠธํ•ด๋ณด๊ณ  ์‹ถ์€๋ฐ, ๊ฝค ๋น ๋ฅธ ์‹œ๊ฐ„ ์•ˆ์— Connection refused ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๊ฐ€ ๋– ์„œ  ํ™•์ธ์€ ๋ชปํ–ˆ๋‹ค. 

connect() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์„œ๋ฒ„๋กœ ์—ฐ๊ฒฐ๋˜๊ธฐ๋ฅผ ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋‹ค.
new Socket ์ดํ›„์˜ ์ฝ”๋“œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๊ณ , ConnectException์ด ๋ฐœ์ƒํ•œ๋‹ค 

 

ServerSocket๊ณผ Socket์„ ํ†ตํ•œ ํ†ต์‹  

์„œ๋ฒ„ ์†Œ์ผ“๊ณผ ํด๋ผ์ด์–ธํŠธ ์†Œ์ผ“์„ ๋ชจ๋‘ ์ด์šฉํ•ด์„œ ์‹ค์ œ๋กœ ์—ฐ๊ฒฐ์ด ๋งบ์–ด์ง€๋Š”์ง€ ๊ฐ„๋‹จํžˆ ํ™•์ธํ•ด๋ดค๋‹ค. 

์„œ๋ฒ„ ์†Œ์ผ“์„ ํฌํŠธ 50001๋ฒˆ์— ๋งž์ถฐ์„œ ์—ด์–ด๋†“๊ณ , ํด๋ผ์ด์–ธํŠธ ์†Œ์ผ“์€ ์„œ๋ฒ„์˜ 50001๋ฒˆ ํฌํŠธ๋กœ ์—ฐ๊ฒฐ ์š”์ฒญํ•˜๋„๋ก ์„ค์ •ํ•ด๋†“์•˜๋‹ค. ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ๋ถ€ํ„ฐ ๋จผ์ € ์‹คํ–‰ํ•œ ๋‹ค์Œ์— ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ–ˆ๋‹ค. ์ž˜ ์—ฐ๊ฒฐ๋œ๋‹ค!

 

Server์ธก

 

Client์ธก

 

๊ฒฐ๊ณผ 


์†Œ์ผ“์— ๋Œ€ํ•ด ๋” ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด 

- https://manzanit0.github.io/networks/2018/11/09/sockets-explained.html

- http://jkkang.net/unix/netprg/chap2/net2_1.html

- https://on1ystar.github.io/socket%20programming/2021/03/16/socket-1/