1. ๊ฐœ์š” (Incident Overview)

์ด ๊ธ€์€ Proxmox VE ํ™˜๊ฒฝ์˜ LXC(Linux Container)์— PostgreSQL์„ ์„ค์น˜ํ•œ ์งํ›„, Spring Boot ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— DB๋ฅผ ์—ฐ๋™ํ•˜๋ ค๋Š” ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•œ ์ ‘์† ๊ฑฐ๋ถ€ ์žฅ์• ์— ๋Œ€ํ•œ ์‚ฌํ›„ ๋ถ„์„(Postmortem) ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ์„ค์น˜๋ฅผ ๋ฌด์‚ฌํžˆ ๋งˆ์น˜๊ณ  ์ ‘์†์„ ์‹œ๋„ํ–ˆ์„ ๋•Œ, ์•„๋ž˜์™€ ๊ฐ™์€ ์น˜๋ช…์ ์ธ(FATAL) ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ DB ์—ฐ๋™์ด ์ „๋ฉด ์ฐจ๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  Peer authentication failed for user "<DB_USERNAME>"

๋‹จ์ˆœํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ˆ„๋ฝ์ธ ์ค„ ์•Œ์•˜๋˜ ์ด ์—๋Ÿฌ๋Š”, PostgreSQL์˜ ๊ณ ์œ ํ•œ โ€˜์ธ์ฆ ๋ฐฉ์‹(Authentication) ๋ฉ”์ปค๋‹ˆ์ฆ˜โ€™ ๊ณผ โ€˜์ ‘์† ํ”„๋กœํ† ์ฝœ(Socket vs TCP/IP)โ€™ ์— ๋Œ€ํ•œ ์ดํ•ด ๋ถ€์กฑ์—์„œ ๋น„๋กฏ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณธ ํšŒ๊ณ ๋ก์€ ๋‹น์‹œ์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ํ๋ฆ„, ์›์ธ ๋ถ„์„, ๊ทธ๋ฆฌ๊ณ  ๋ณด์•ˆ์„ ๊ณ ๋ คํ•œ ์ตœ์ข… ํƒ€์ž„๋ผ์ธ์„ ์ƒ์„ธํžˆ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

2. ํ•ต์‹ฌ ๋‚ด์šฉ ๋ฐ ์›์ธ ๋ถ„์„ (Root Cause Analysis)

2-1. โ€˜Peer Authenticationโ€™์˜ ๊ณต์‹์ ์ธ ์˜๋ฏธ

PostgreSQL ๊ณต์‹ ๋ฌธ์„œ(Chapter 20. Client Authentication)์— ๋”ฐ๋ฅด๋ฉด, Peer ์ธ์ฆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋ฉ๋‹ˆ๋‹ค.

โ€œThe peer authentication method works by obtaining the clientโ€™s operating system user name from the kernel and using it as the allowed database user name.โ€

Peer ์ธ์ฆ ๋ฐฉ๋ฒ•์€ ํด๋ผ์ด์–ธํŠธ ์‹œ์Šคํ…œ ์ปค๋„๋กœ๋ถ€ํ„ฐ ํ˜„์žฌ ๋กœ๊ทธ์ธํ•œ OS ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ์–ป์–ด์™€, ์ด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž ์ด๋ฆ„์œผ๋กœ ํ—ˆ์šฉํ• ์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ƒํ™ฉ์„ ๋ณด์•ˆ์š”์›(์ธ์ฆ ์‹œ์Šคํ…œ) ์— ๋น„์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PostgreSQL์˜ ๋ณด์•ˆ ์ง€์นจ์„œ ์—ญํ• ์„ ํ•˜๋Š” ๋ฉ”์ธ ์„ค์ • ํŒŒ์ผ์€ pg_hba.conf ์ž…๋‹ˆ๋‹ค.

  • ๋‚˜์˜ ์‹œ๋„: โ€œ๋ณด์•ˆ์š”์›๋‹˜! ์ € ํŠผํŠผํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋งŒ๋“ค์—ˆ์–ด์š”! ๋“ค์—ฌ๋ณด๋‚ด ์ฃผ์„ธ์š”!โ€

  • ๋ณด์•ˆ์š”์› (pg_hba.conf์˜ Peer ๋ฃฐ): โ€œ์†๋‹˜, ์ €ํฌ ํด๋Ÿฝ โ€˜๋„๋ณด ์ •๋ฌธโ€™์€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์•ˆ ๋ด…๋‹ˆ๋‹ค. ์˜ค์ง ์†๋‹˜ ๊ฐ€์Šด์— ๋‹ฌ๋ฆฐ ๋ฆฌ๋ˆ…์Šค OS ๋ช…์ฐฐ(ํ˜„์žฌ ๋กœ๊ทธ์ธํ•œ ์ปค๋„ ๊ณ„์ •๋ช…) ์ด <DB_USERNAME>๊ณผ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š”์ง€๋งŒ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ช…์ฐฐ์ด ๋‹ค๋ฅด๋ฉด ์ž…์žฅ ๋ถˆ๊ฐ€์ž…๋‹ˆ๋‹ค.โ€

์ฆ‰, ์šฐ๋ถ„ํˆฌ์˜ ๊ธฐ๋ณธ ๋กœ๊ทธ์ธ ์œ ์ €(์˜ˆ: <OS_USERNAME>) ์ƒํƒœ, ํ˜น์€ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ๋ชฌ ์œ ์ € ์ƒํƒœ์—์„œ ๋กœ์ปฌ ์ ‘์†์„ ์‹œ๋„ํ•˜๋ฉด, ๋ฆฌ๋ˆ…์Šค ๋ช…์ฐฐ๊ณผ DB ๋ช…์ฐฐ์ด ๋ถˆ์ผ์น˜ํ•˜๋ฏ€๋กœ ์ธ์ฆ์— ์ฆ‰์‹œ ์‹คํŒจํ•˜๋Š” ๊ตฌ์กฐ์˜€์Šต๋‹ˆ๋‹ค.

2-2. ์‚ฝ์งˆ์˜ ๊ธฐ๋ก (What Went Wrong)

์ด ์›๋ฆฌ๋ฅผ ์ •ํ™•ํžˆ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•ด ๋ฐœ์ƒํ–ˆ๋˜ ๋‘ ๊ฐ€์ง€ ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

  • ์˜ค๋ฅ˜ 1: ๋ฌด์ž‘์ • ๋น„๋ฐ€๋ฒˆํ˜ธ๋งŒ ๊ฐ•์ œ๋กœ ๋ถ€์—ฌํ•˜๊ธฐ

    • โ€œ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์—†์–ด์„œ ํŠ•๊ฒจ๋ƒˆ๊ฒ ์ง€?โ€๋ผ๊ณ  ์˜คํŒํ•˜์—ฌ ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ๊ฐ•์ œ ์•”ํ˜ธํ™”๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

    • ALTER USER <DB_USERNAME> with encrypted password '<SECURE_PASSWORD>';

    • ๊ฒฐ๊ณผ: ๋ณด์•ˆ์š”์›์€ ์• ์ดˆ์— ์ •๋ฌธ์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ฒ€์‚ฌํ•  ๊ถŒํ•œ(์„ค์ •)์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ์ž…์žฅ์ด ๊ฑฐ๋ถ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์˜ค๋ฅ˜ 2: ์—‰๋šฑํ•œ ๋ฒ„์ „์˜ ์„ค์ • ํŒŒ์ผ ๋งคํ•‘ (pg_ident.conf)

    • OS ์œ ์ €์™€ DB ์œ ์ € ์ด๋ฆ„์ด ๋‹ค๋ฅด๋ฉด ๋งคํ•‘ํ•ด์ฃผ๋ฉด ๋œ๋‹ค๋Š” ๋‹จํŽธ์ ์ธ ์ง€์‹์œผ๋กœ pg_ident.conf ํŒŒ์ผ์„ ์—ด์–ด <OS_USERNAME> <DB_USERNAME> ํ˜•ํƒœ์˜ ์žฅ๋ถ€๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

    • ๊ฒฐ๊ณผ: ๋ฉ”์ธ ํŒŒ์ผ์ธ pg_hba.conf์— map=<MAP_NAME> ์˜ต์…˜์„ ์ฃผ์–ด โ€œ์ด ์žฅ๋ถ€๋ฅผ ์ฐธ๊ณ ํ•ด๋ผ!โ€๋ผ๊ณ  ์ง€์‹œํ•˜์ง€ ์•Š์•„ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

3. ์™„๋ฒฝ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• 3๊ฐ€์ง€ ๋ฐ ๋ณด์•ˆ์„ฑ ํ‰๊ฐ€

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฒ€ํ† ํ–ˆ๋˜ 3๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๋ณด์•ˆ ๊ด€์ ์˜ ํ‰๊ฐ€์ž…๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• A. ์ธ์ฆ ๋ฐฉ์‹์„ ๋น„๋ฐ€๋ฒˆํ˜ธ(scram-sha-256)๋กœ ์ „๋ฉด ์ˆ˜์ • (์ •๊ณต๋ฒ•)

๋ณด์•ˆ์š”์›์˜ ์ •๋ฌธ ๊ฒ€์‚ฌ ๊ทœ์น™ ์ž์ฒด๋ฅผ โ€˜๋ช…์ฐฐ(OS ์œ ์ €๋ช…)โ€˜์—์„œ โ€˜๋น„๋ฐ€๋ฒˆํ˜ธโ€™๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ •์„์ž…๋‹ˆ๋‹ค.

/etc/postgresql/<VERSION>/main/pg_hba.conf ํŒŒ์ผ์„ ์—ด์–ด local ์ ‘์† ์„ค์ •์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

# ๋ณ€๊ฒฝ ์ „ (์ •๋ฌธ: ๋ช…์ฐฐ ๊ฒ€์‚ฌ)
local   all             all                                peer

# ๋ณ€๊ฒฝ ํ›„ (์ •๋ฌธ: ์ตœ์‹  ์•”ํ˜ธํ™” ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์‚ฌ)
local   all             all                                scram-sha-256

๐Ÿ›ก๏ธ [๋ณด์•ˆ ํ‰๊ฐ€]: ์ ๊ทน ๊ถŒ์žฅ

scram-sha-256์€ ํŒจํ‚ท ์Šค๋‹ˆํ•‘ ๋ฐฉ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฐ•๋ ฅํ•œ ์ฑŒ๋ฆฐ์ง€-๋ฆฌ์Šคํฐ์Šค ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• B. ๋กœ์ปฌ ์†Œ์ผ“ ๋Œ€์‹  TCP/IP ๋„คํŠธ์›Œํฌ(LXC IP)๋กœ ์ ‘์†ํ•˜๊ธฐ (๋‚˜์˜ ์‹ค์ œ ํ•ด๊ฒฐ์ฑ…)

pg_hba.conf์˜ ๋กœ์ปฌ ์„ค์ •์„ ๋œฏ์–ด๊ณ ์น˜์ง€ ์•Š๊ณ , ์ ‘์† ํ”„๋กœํ† ์ฝœ ์ž์ฒด๋ฅผ ๋„คํŠธ์›Œํฌ(TCP/IP) ๋ฃฐ์„ ํƒ€๊ฒŒ ํ•˜๋Š” ์šฐํšŒ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

# ๋ฐฑ์—”๋“œ ์„ค์ • (์˜ˆ: application.yml) ์‹œ, LXC์˜ IP๋ฅผ ๋ช…์‹œ
spring:
  datasource:
    url: jdbc:postgresql://<LXC_IP>:5432/<DB_NAME>
    username: <DB_USERNAME>
    password: <SECURE_PASSWORD>

[์‹ค์ œ ํ•ด๊ฒฐ์˜ ๋น„๋ฐ€]:

์‚ฌ์‹ค ์ œ๊ฐ€ ์ด ์žฅ์• ๋ฅผ ๋ŒํŒŒํ–ˆ๋˜ ์ง„์งœ ๋ฐฉ๋ฒ•์ด ๋ฐ”๋กœ ์ด๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ •๋ฌธ(Unix Socket, local)์—์„œ ๋ช…์ฐฐ ๊ฒ€์‚ฌ์— ๊ฑธ๋ ค ๋ฒˆ๋ฒˆ์ด ํŠ•๊ฒจ ๋‚˜๊ฐ”์ง€๋งŒ, ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(application.yml)์— DB ์ฃผ์†Œ๋กœ LXC ์ปจํ…Œ์ด๋„ˆ์— ํ• ๋‹น๋œ ์‹ค์ œ IP๋ฅผ ๊ธฐ์žฌํ–ˆ์Šต๋‹ˆ๋‹ค.

LXC IP๋ฅผ ๋ช…์‹œํ•˜๋Š” ์ˆœ๊ฐ„, ํ†ต์‹  ๋ฐฉ์‹์ด ์†Œ์ผ“(๋„๋ณด)์—์„œ TCP/IP(์ฐจ๋Ÿ‰)๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์ฐจ๋ฅผ ํƒ€๊ณ  โ€˜์™ธ๋ถ€ ์ฃผ์ฐจ์žฅ ๊ฒŒ์ดํŠธ(host ๋ฃฐ)โ€˜๋กœ ์ง„์ž…ํ•˜์ž, DB๊ฐ€ ์ •์ƒ์ ์œผ๋กœ โ€œ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋Œ€์‹œ์˜ค(md5 ๋˜๋Š” scram-sha-256)โ€œ๋ผ๊ณ  ์š”๊ตฌํ–ˆ๊ณ , ๋ฏธ๋ฆฌ ์„ธํŒ…ํ•ด ๋‘” ํŠผํŠผํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ž‘๋™ํ•˜์—ฌ ์—ฐ๋™์— ์„ฑ๊ณตํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๐Ÿ›ก๏ธ [๋ณด์•ˆ ํ‰๊ฐ€]: ๊ถŒ์žฅ (์‹ค๋ฌด ํ‘œ์ค€ ๊ตฌ์„ฑ)

๋กœ์ปฌ ํ™˜๊ฒฝ(127.0.0.1)์ด๋“  ์™ธ๋ถ€ ํ™˜๊ฒฝ(LXC IP)์ด๋“  IP ์ฃผ์†Œ๋ฅผ ๋ช…์‹œํ•˜๋ฉด โ€˜Unix ์†Œ์ผ“(local)โ€™ ์ด ์•„๋‹Œ โ€˜๋„คํŠธ์›Œํฌ(host)โ€™ ๋ฃฐ์„ ํƒ‘๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ์ ‘์†์€ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ธ์ฆ์„ ์š”๊ตฌํ•˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์™€ DB ์„œ๋ฒ„๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ์‹ค๋ฌด ์•„ํ‚คํ…์ฒ˜์—์„œ ๊ฐ€์žฅ ์ •์„์ ์ธ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• C. ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ๋‚ด ๋ช…์ฐฐ์„ ์œ„์žฅํ•˜๊ธฐ (๊ธด๊ธ‰ ์œ ์ง€๋ณด์ˆ˜์šฉ)

sudo -u <DB_USERNAME> psql

๐Ÿšจ [๋ณด์•ˆ ํ‰๊ฐ€]: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์—์„œ ์ ˆ๋Œ€ ์‚ฌ์šฉ ๊ธˆ์ง€

์šด์˜์ฒด์ œ ์ตœ๊ณ  ๊ถŒํ•œ(root ๋“ฑ)์„ ์ด์šฉํ•ด ๋ช…์ฐฐ์„ ์œ„์กฐํ•˜๋Š” ํ–‰์œ„์ž…๋‹ˆ๋‹ค. ํ•ดํ‚น ์‹œ DB๋ฟ ์•„๋‹ˆ๋ผ ์„œ๋ฒ„ ์ „์ฒด๊ฐ€ ์žฅ์•…๋˜๋ฏ€๋กœ ๋ฐฑ์—”๋“œ ์ฝ”๋“œ๋‚˜ ์Šคํฌ๋ฆฝํŠธ์— ์ ˆ๋Œ€ ํฌํ•จ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

4. ๊ฒฐ๋ก : ์ตœ์ข… ํƒ€์ž„๋ผ์ธ์˜ ์žฌ๊ตฌ์„ฑ

์‚ฌ์‹ค ์‹ค์ œ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์—ฐ๋™์„ ๋งˆ์ณค๋˜ ๊ฒƒ์€ ๋ช‡ ๋‹ฌ ์ „์˜ ์ผ์ด์—ˆ๊ณ , ์ด ๊ธ€์€ ๋‹น์‹œ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ๋˜ ํ•ด๊ฒฐ์˜ ์‹ค๋งˆ๋ฆฌ๋ฅผ ์ตœ๊ทผ์— ๋‹ค์‹œ ์„œ๋ฒ„์— ์ ‘์†ํ•ด ๊ฒ€ํ† (Review)ํ•˜๋ฉฐ ์ž‘์„ฑํ•œ ์‚ฌํ›„ ๋ถ„์„์ž…๋‹ˆ๋‹ค.

์ˆ˜๊ฐœ์›”์ด ์ง€๋‚œ ๋’ค ๋ฆฌ๋ˆ…์Šค ์ฝ˜์†”์„ ์—ด์–ด ๋‹ค์‹œ ๋กœ๊ทธ์™€ ์„ค์ • ํŒŒ์ผ์„ ๊ต์ฐจ ๊ฒ€์ฆํ•ด ๋ณธ ๊ฒฐ๊ณผ, ํƒ€์ž„๋ผ์ธ์˜ ์ง„์‹ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

  1. ์—๋Ÿฌ ๋ฐœ์ƒ: ์ตœ๊ณ  ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ DB ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ธํŒ…ํ–ˆ์œผ๋‚˜, ์ •์ž‘ ๋ฐฑ์—”๋“œ ์•ฑ์—์„œ๋Š” Peer authentication failed ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•จ.

  2. ์šฐ์—ฐํ•œ ํ•ด๊ฒฐ: ๋ฐฑ์—”๋“œ ํ™˜๊ฒฝ ์„ค์ •(application.yml)์— DB ์ ‘์† ์ฃผ์†Œ๋กœ LXC ์ปจํ…Œ์ด๋„ˆ์˜ IP ์ฃผ์†Œ๋ฅผ ๊ธฐ์žฌํ•˜์—ฌ ์ ‘์†.

  3. ์›๋ฆฌ ํŒŒ์•…(ํ˜„์žฌ): LXC IP๋ฅผ ํ†ตํ•œ ์ ‘์†์€ TCP/IP ํ†ต์‹ ์ด๋ฏ€๋กœ, ๊น๊นํ•œ ๋„๋ณด ์ •๋ฌธ(local ์†Œ์ผ“์˜ peer ๋ฃฐ) ๋Œ€์‹  ๊ธฐ๋ณธ์ ์œผ๋กœ ์•”ํ˜ธํ™” ์ธ์ฆ(md5 ๋“ฑ)์ด ํ—ˆ์šฉ๋œ ์ฃผ์ฐจ์žฅ ๊ฒŒ์ดํŠธ(host ๋„คํŠธ์›Œํฌ ๋ฃฐ)๋ฅผ ํƒ€๊ฒŒ ๋˜์–ด ์—ฐ๋™์— ์„ฑ๊ณตํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ๋’ค๋Šฆ๊ฒŒ ๊นจ๋‹ฌ์Œ.

๊ฒฐ๊ณผ์ ์œผ๋กœ ์‹ค๋ฌด ํ‘œ์ค€์ด์ž ๋ณด์•ˆ์ƒ์œผ๋กœ๋„ ์•ˆ์ „ํ•œ โ€˜๋ฐฉ๋ฒ• Bโ€™๋ฅผ ํ†ตํ•ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ์ ‘์† ์—๋Ÿฌ๋ผ๋„ ๊ทธ ์ด๋ฉด์— ์žˆ๋Š” ์ ‘์† ํ”„๋กœํ† ์ฝœ(Socket vs TCP/IP)์˜ ์ฐจ์ด์™€ ์ธ์ฆ ๋ฃฐ์˜ ์ž‘๋™ ๋ฐฉ์‹์„ ๋ช…ํ™•ํžˆ ๊ทœ๋ช…ํ•˜๊ณ  ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ์—ˆ๋˜ ํšŒ๊ณ ์˜€์Šต๋‹ˆ๋‹ค.