์†Œ์ผ“ (Socket)์ด๋ž€?

โ€œ์†Œ์ผ“โ€์€ ํ”„๋กœ์„ธ์Šค A์™€ ํ”„๋กœ์„ธ์Šค B๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•ด ์—ฌ๋Š” ๋ฌธ(ํ†ต๋กœ)
๊ทธ ๋ฌธ์ด ํŒŒ์ผ ์‹œ์Šคํ…œ ์•ˆ์— ์žˆ๋А๋ƒ, IPยทํฌํŠธ ์ฃผ์†Œ๋กœ ๋…ธ์ถœ๋˜๋А๋ƒ์— ๋”ฐ๋ผ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰จ


์™œ ์†Œ์ผ“์„ ์จ์•ผ ํ• ๊นŒ?

ํ‘œ์ค€ IPC API
  • socket() โ†’ bind() โ†’ listen() โ†’ accept() ํ˜ธ์ถœ๋งŒ ์•Œ๋ฉด ๋‚ด๋ถ€ยท์™ธ๋ถ€ ํ†ต์‹ ์„ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
์–‘๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆผ
  • ํ•œ์ชฝ์ด send() ํ•˜๋ฉด ์ƒ๋Œ€๊ฐ€ recv()๋กœ ๋ฐ”๋กœ ์ฝ์Œ. ํŒŒ์ดํ”„ยท๋ฉ”์‹œ์ง€ ํ๋ณด๋‹ค ์œ ์—ฐ
์–ธ์–ดยทํ”Œ๋žซํผ ๋…๋ฆฝ
  • C, Python, Go, Java ๋“ฑ ๋ญ๋กœ ๋งŒ๋“ค์–ด๋„ ์„œ๋กœ ๋ถ™์ผ ์ˆ˜ ์žˆ์Œ

์†Œ์ผ“์˜ ์ข…๋ฅ˜

์œ ๋‹‰์Šค ๋„๋ฉ”์ธ ์†Œ์ผ“ (UDS, .sock)
ํŠน์ง•์„ค๋ช…
์ฃผ์†ŒํŒŒ์ผ ๊ฒฝ๋กœ(AF_UNIX), ์˜ˆ: /var/run/docker.sock
๋ฒ”์œ„๊ฐ™์€ ๋จธ์‹ 
์†๋„TCP๋ณด๋‹ค ๋น ๋ฆ„ (์ปค๋„ ๋‚ด๋ถ€ ๋ณต์‚ฌ ํ•œ ๋ฒˆ)
๊ด€๋ฆฌํŒŒ์ผ ๊ถŒํ•œ์œผ๋กœ ์ ‘๊ทผ ์ œ์–ด
์‚ฌ์šฉ์ฒ˜Docker CLI โ†” dockerd, Nginx โ†” PHP-FPM, MySQL ๋กœ์ปฌ ์ ‘์† ๋“ฑ
# Docker ๋ฐ๋ชฌ์— ์ง์ ‘ REST ์š”์ฒญ
curl --unix-socket /var/run/docker.sock http://localhost/containers/json
๋„คํŠธ์›Œํฌ ์†Œ์ผ“ (TCP/UDP)
ํŠน์ง•์„ค๋ช…
์ฃผ์†ŒIP:ํฌํŠธ(AF_INET), ์˜ˆ: 127.0.0.1:8080, 0.0.0.0:443
๋ฒ”์œ„๋กœ์ปฌ โ†” LAN โ†” ์ธํ„ฐ๋„ท ์–ด๋””๋“ 
ํ”„๋กœํ† ์ฝœTCP(์—ฐ๊ฒฐ ์ง€ํ–ฅ), UDP(๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ)
๋ณด์•ˆ๋ฐฉํ™”๋ฒฝยทTLSยทmTLS ํ•„์š”
์‚ฌ์šฉ์ฒ˜์›น ์„œ๋ฒ„, REST API, ๊ฒŒ์ž„ ์„œ๋ฒ„, IoT
# ํŒŒ์ด์ฌ ๋ฏธ๋‹ˆ TCP ์„œ๋ฒ„
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("0.0.0.0", 8888))
s.listen()
conn, _ = s.accept()
conn.sendall(b"Hello over TCP!\n")
๋น„๊ต
ํ•ญ๋ชฉ์œ ๋‹‰์Šค ๋„๋ฉ”์ธ ์†Œ์ผ“๋„คํŠธ์›Œํฌ ์†Œ์ผ“
์ฃผ์†Œ ํ˜•ํƒœํŒŒ์ผ ๊ฒฝ๋กœIP:Port
ํ†ต์‹  ๋ฒ”์œ„๋กœ์ปฌ ๋จธ์‹ ๋กœ์ปฌ โ†” ์›๊ฒฉ
์˜ค๋ฒ„ํ—ค๋“œ๋‚ฎ์Œ๋†’์Œ
์ ‘๊ทผ ์ œ์–ดํŒŒ์ผ ํผ๋ฏธ์…˜๋ฐฉํ™”๋ฒฝยทTLS
์ฃผ์š” ์‚ฌ์šฉ์ฒ˜๋ฐ๋ชฌ โ†” CLI, IPCHTTP, gRPC, ๊ฒŒ์ž„

์–ธ์ œ ๋ฌด์—‡์„ ์“ฐ๋ฉด ์ข‹์„๊นŒ?

์ƒํ™ฉ์ถ”์ฒœ ์†Œ์ผ“
๊ฐ™์€ ์„œ๋ฒ„ ์•ˆ ๋‘ ํ”„๋กœ์„ธ์ŠคUDS
์ปจํ…Œ์ด๋„ˆ โ†” ํ˜ธ์ŠคํŠธ ๋ฐ๋ชฌUDS
๋‹ค๋ฅธ ๋จธ์‹ ๊ณผ ํ†ต์‹ TCP/UDP
๋ชจ๋ฐ”์ผยท๋ธŒ๋ผ์šฐ์ € ์ ‘๊ทผTCP/UDP

์ฒ˜์Œ์—” UDS๋กœ ๊ฐœ๋ฐœํ•˜๊ณ , ๋ฐฐํฌ ๋‹จ๊ณ„์—์„œ ๋„คํŠธ์›Œํฌ ์†Œ์ผ“์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ํŒจํ„ด๋„ ์ž์ฃผ ์‚ฌ์šฉ


๋ณด์•ˆ ๋ฌธ์ œ

UDS๋„ โ€œ๋ฃจํŠธ ์—ด์‡ โ€๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ
  • /var/run/docker.sock ์“ฐ๊ธฐ ๊ถŒํ•œ์€ ๋„์ปค ๋ฐ๋ชฌ ์ „๊ถŒ์„ ์˜๋ฏธ
TCP 2375(๋ฌดTLS) ๋…ธ์ถœ ๊ธˆ์ง€
  • dockerd -H tcp://0.0.0.0:2375 ๊ทธ๋Œ€๋กœ ๋„์šฐ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๊ฐ€๋Šฅ
TLS/mTLS, SSH ํ„ฐ๋„ ํ•„์ˆ˜
  • ์›๊ฒฉ ์†Œ์ผ“์€ ๋ฐ˜๋“œ์‹œ ์•”ํ˜ธํ™” + ์ธ์ฆ ๊ณ„์ธต์„ ์–น์–ด์•ผ ํ•จ

๋งˆ๋ฌด๋ฆฌ

์†Œ์ผ“์€ โ€œํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋Œ€ํ™” ์ฐฝ๊ตฌโ€

  • UDS๋Š” ๊ฐ™์€ ์„œ๋ฒ„ ์—์„œ ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ,
  • TCP/UDP๋Š” ์„ธ์ƒ ์–ด๋””์„œ๋‚˜ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ

ํ”„๋กœ์ ํŠธ ์š”๊ตฌ ์‚ฌํ•ญ(๋ฒ”์œ„, ์„ฑ๋Šฅ, ๋ณด์•ˆ)์— ๋งž์ถฐ ๋‘ ์ข…๋ฅ˜๋ฅผ ์ ์ ˆํžˆ ์„ ํƒํ•ด์•ผ ํ•จ