๐Ÿ“ก Docker๋กœ on-premise ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๊ธฐ

๊น€๊ณต์˜ยท2024๋…„ 8์›” 11์ผ

how-to

๋ชฉ๋ก ๋ณด๊ธฐ
8/12
post-thumbnail

์ด ๊ธ€์€ iptables ๋ช…๋ น์–ด ์‚ฌ์šฉ๋ฒ•๊ณผ docker๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐํฌ์— ๋Œ€ํ•ด ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š” trouble shooting ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ๋ณด์‹œ๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด ์•„๋ž˜๋กœ ์ด๋™ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์™œ ์ด ์ž‘์—…์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๊ฐ€

ํ˜„์žฌ ์—ฐ๊ตฌ์‹ค์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๊ณ  ์žˆ๋‹ค. ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์ด๊ธฐ๋„ ํ•˜๊ณ , ํ…Œ์ŠคํŒ… ํ™˜๊ฒฝ ๊ตฌ์ถ•์ด ๋ชฉํ‘œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ AWS ๋น„์šฉ ์ง€์ถœ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค๋Š” ์ด์œ ๋กœ ์—ฐ๊ตฌ์‹ค workstation์„ ํ•˜๋‚˜ ํ• ๋‹น ๋ฐ›์•„ ๋ฐฐํฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ํด๋ผ์šฐ๋“œ๊ฐ€ ์•„๋‹Œ ์„œ๋ฒ„์— ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด๋Š” ๊ฒƒ์€ ์ฒ˜์Œ์ด๋ผ ์—ฌ๋Ÿฌ ๋‚œํ•ญ์„ ๊ฒช์—ˆ๋‹ค. ๊ท€์ฐฎ์€ ์ผ์„ ํ•˜๊ณ ์‹ถ์ง€ ์•Š์•„ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ–ˆ๋Š”๋ฐ, Docker network ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์ดํ•ด๋„๊ฐ€ ๋ถ€์กฑํ•ด ๋งŽ์€ ์–ด๋ ค์›€์„ ๊ฒช์—ˆ๋‹ค.

์„œ๋ฒ„๋ฅผ ํ• ๋‹น๋ฐ›๊ณ  ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…๋“ค

์ผ๋‹จ ์„œ๋ฒ„๋ฅผ ํ• ๋‹น ๋ฐ›์•˜๋‹ค. ์—ฐ๊ตฌ์‹ค๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๊ฒƒ์€ ip address, port, user name, password์˜€๋‹ค. ๋‹คํ–‰ํžˆ๋„ ssh๋กœ ์ ‘์†ํ•˜๋‹ˆ ์ž˜ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

# ssh ์ ‘์† ๋ช…๋ น์–ด
ssh {user name}@{ip address} -p {port}

์„œ๋ฒ„ ํ• ๋‹น ํ›„ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด ํ•œ ์ž‘์—…์€ ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ๋‚˜๋‰˜์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฐ๊ตฌ์‹ค์€ ์ธ์ˆ˜์ธ๊ณ„๊ฐ€ ์ œ๋Œ€๋กœ ์ด๋ค„์ง€์ง€ ์•Š์„ ํ™•๋ฅ ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๊ณผ์ •์„ ๋ฌธ์„œ๋กœ ๋‚จ๊ฒจ์•ผ ํ–ˆ๋‹ค.

1. DB ์„ค์น˜ ๋ฐ ํ…Œ์ŠคํŠธ
2. CI/CD pipeline ๊ตฌ์ถ•

๊ฐ task๋“ค์€ Github์— issue ๋กœ ๋“ฑ๋กํ•ด ๊ด€๋ฆฌํ–ˆ๋‹ค. ์ž์„ธํ•œ ๊ธฐ๋ก์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋œ๋‹ค.

๋ฐฐํฌ ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐฐํฌ๋Š” docker๋ฅผ ํ™œ์šฉํ–ˆ๋‹ค. CI/CD pipeline์„ ์œ„ํ•œ workflow ์ž‘์„ฑ๋„ ๋งˆ์ณค๋‹ค.(CI/CD pipeline ๊ตฌ์ถ• ๋ฐฉ๋ฒ•์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋œ๋‹ค.) ์‚ฌ์‹ค workflow ์ ์šฉ ์ž์ฒด๋Š” ์–ด๋ ต์ง€ ์•Š์€ ๋ฌธ์ œ์˜€๋‹ค. ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” port๋ฅผ ์—ด์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ์‚ฌ์‹ค ๊ทธ ๋’ค์—๋„ ์ž์ž˜ํ•˜๊ฒŒ ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

ํฌํŠธ๋ฅผ ์—ด์–ด์•ผ ํ•œ๋‹ค

์—ฐ๊ตฌ์‹ค ์„œ๋ฒ„๋ฅผ ํ™œ์šฉํ•ด ๋ฐฐํฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์—์„œ ํ™œ์šฉํ•  ํฌํŠธ๋ฅผ ์—ด์–ด์ฃผ๋Š” ์ž‘์—…์„ ๊ฑฐ์ณ์•ผ ํ–ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์–ด๋–ค ์„œ๋ฒ„๊ฐ€ ์—ด๋ฆฌ๊ณ  ์–ด๋–ค ์„œ๋ฒ„๊ฐ€ ์ฃฝ์–ด๋„ ์•ˆ ์—ด๋ฆฌ๋Š” ์„œ๋ฒ„์ธ๊ฑด์ง€ ๋ชจ๋ฅธ๋‹ค๋Š”๊ฑฐ๋‹ค. ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š” ํ•™๊ต ์„œ๋ฒ„ ๋ณด์•ˆ ๋•Œ๋ฌธ์— ๋ผ์šฐํ„ฐ๋‚˜ ์Šค์œ„์น˜ ๋ ˆ๋ฒจ์—์„œ ๋ฐฉํ™”๋ฒฝ์ด ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ ๊ทธ๋ ‡์ง€ ์•Š์€ ํฌํŠธ๋ฅผ ์ฐพ์•„ ํ—ค๋ฉ”์•ผ ํ–ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” 40000๋ฒˆ ์ด์ƒ์˜ ํฌํŠธ๋ฅผ ์—ด๋ฉด ์ž˜ ๋™์ž‘ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์—ด์–ด์ฃผ๋ ค ํ–ˆ๋”๋‹ˆ root๊ถŒํ•œ์ด ์—†์–ด์„œ ์•ˆ๋œ๋‹ค๋Š” ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๊ฐ€ ๋–ด๋‹ค. ๋”ฐ๋ผ์„œ root ๊ถŒํ•œ๋ถ€ํ„ฐ ๋ถ€์—ฌํ•˜๊ณ  ํฌํŠธ๋ฅผ ์—ด์–ด์คฌ๋‹ค.

DB ์„ค์น˜ ๊ทธ๊ฑฐ docker๋กœ ํ•˜๋‹ˆ๊นŒ ๋˜์ž–.. ์–ด๋ผ ์•ˆ๋˜๋„ค?

log๋ฅผ JSON ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด NoSQL์ธ MongoDB๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, local ํ™˜๊ฒฝ์—์„œ๋Š” docker๋กœ ์„ค์น˜ํ•˜๊ณ  ์ž˜ ์‚ฌ์šฉํ–ˆ๋˜ MongoDB๊ฐ€ ์ด์ƒํ•˜๊ฒŒ๋„ ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ๋Š” container ์‹คํ–‰์ด ๋˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋ž˜์„œ apt-get install๋กœ MongoDB๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‹คํ–‰์‹œ์ผฐ๋Š”๋ฐ Spring ์„œ๋ฒ„์—์„œ DB๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

ํ•ด๊ฒฐ ๊ทธ๊ฑฐ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฑด๋ฐ

root ๊ถŒํ•œ ๋ถ€์—ฌ

์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์—๊ฒŒ root ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” root ๊ณ„์ •์ด ํ•„์š”ํ•˜๋‹ค. ์—ฐ๊ตฌ์‹ค์— ์—ฐ๋ฝํ•ด์„œ ๋ฏธ๋ฆฌ root ๊ณ„์ • ์ •๋ณด๋ฅผ ๋ฐ›์•„ ๋กœ๊ทธ์ธ ํ›„ ์ง„ํ–‰ํ–ˆ๋‹ค.

# root ๊ณ„์ •์œผ๋กœ ssh ์ ‘์†
ssh root@{ip address} -p {port}

root ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” /etc/sudoers๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค. ๋จผ์ € sudoers ํŒŒ์ผ์˜ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๊ณ , vi๋กœ ์ˆ˜์ •ํ•ด์คฌ๋‹ค.

# sudoers ํŒŒ์ผ ๊ถŒํ•œ ํ™•์ธ
ls -al /etc/sudoers
# ๊ถŒํ•œ ๋ณ€๊ฒฝ
chmod +w /etc/sudoers
# sudoers ์—ด๊ณ  ์ˆ˜์ •
vi /etc/sudoers
# /etc/sudoer file root ์•„๋ž˜์— ์‚ฌ์šฉ์ž ์ถ”๊ฐ€
{user id} ALL=(ALL) ALL

user id๊ฐ€ zero์ธ ๊ฒฝ์šฐ zero ALL=(ALL) ALL๋กœ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค. ๋ชจ๋“  ์ž‘์—…์„ ์™„๋ฃŒํ•˜๊ณ  sudoers ํŒŒ์ผ์˜ w๊ถŒํ•œ์€ ์›์ƒ๋ณต๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

# sudoer ํŒŒ์ผ ๊ถŒํ•œ ์›์ƒ ๋ณต๊ตฌ
chmod -w /etc/sudoers

port ์—ด๊ธฐ

๋ฃจํŠธ ๊ณ„์ •์—์„œ ๋กœ๊ทธ์•„์›ƒํ•˜๊ณ  ํ• ๋‹น ๋ฐ›์•˜๋˜ ๊ณ„์ •์œผ๋กœ ๋‹ค์‹œ ๋กœ๊ทธ์ธํ•ด iptables ๋ช…๋ น์–ด๋กœ ํฌํŠธ๋ฅผ ์—ด์–ด์คฌ๋‹ค. ์•„๋ž˜๋Š” iptables ๋ช…๋ น์–ด ์ค‘ ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ๋†’์€ ๊ฒƒ๋“ค์ด๋‹ค. ์ด ์ผ€์ด์Šค์˜ ๊ฒฝ์šฐ, OUTPUT์€ ๋ชจ๋‘ ์—ด์–ด์ค˜๋„ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์•„ ์ „์ฒด ํฌํŠธ๋ฅผ ๋‹ค ์—ด์–ด์คฌ๋‹ค.

# iptables ๋ชฉ๋ก ์ถœ๋ ฅ
sudo iptables -nL

# iptables ํŠน์ • ํฌํŠธ INPUT ์ ‘๊ทผ ํ—ˆ์šฉ
sudo iptables -I INPUT 1 -p tcp --dport {port} -j ACCEPT

# iptables ์ „์ฒด ํฌํŠธ OUPUT ์ ‘๊ทผ ํ—ˆ์šฉ
sudo iptables -P OUTPUT ACCEPT

# iptables ํŠน์ • ํฌํŠธ ์ ‘๊ทผ ํ—ˆ์šฉ ๋‹ค์‹œ ์ฐจ๋‹จ
sudo iptables -D INPUT -p tcp --dport {port} -j ACCEPT

Docker ์‹คํ–‰ ์‹œ network option ์„ค์ •

DB ์—ฐ๊ฒฐ ๋ฌธ์ œ ๋ฐœ์ƒ ์›์ธ

DB ์—ฐ๊ฒฐ ๋ฌธ์ œ๋Š” ๋‚˜์˜ ๋ฌด์ง€๋กœ๋ถ€ํ„ฐ ๋น„๋กฏ๋œ ๊ฒƒ์ด์—ˆ๋‹ค. Spring ์„œ๋ฒ„์—์„œ deploy profile์„ ๋ณ„๋„๋กœ ์„ค์ •ํ•ด์ฃผ์—ˆ๋Š”๋ฐ, ์ด๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ์‚ฌ์‹ค ๋‚ด์šฉ๋งŒ ๋†“๊ณ  ๋ณด๋ฉด local profile๊ณผ ๋™์ผํ•˜์ง€๋งŒ, ์ฐจํ›„ ํ™˜๊ฒฝ์ด ๋ณ€๊ฒฝ๋  ๊ฒƒ์„ ๋Œ€๋น„ํ•ด profile๋กœ ๋ถ„๋ฆฌํ–ˆ๋‹ค.

# application-deploy.yml
spring:
  config:
    activate:
      on-profile: deploy

  data:
    mongodb:
      # ์ฐจํ›„ ๋ฐฐํฌ ํ™˜๊ฒฝ์ด ๋ณ€๊ฒฝ๋  ์‹œ ์ˆ˜์ •
      uri: mongodb://localhost:27017/lingo-db

์œ„ ์ฝ”๋“œ์—์„œ data.mongodb.uri๊ฐ€ localhost๋กœ ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์›์ธ์€ Docker network ๊ตฌ์กฐ์— ๋Œ€ํ•ด ๋ฌด์ง€ํ–ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋” ์ •ํ™•ํžˆ ๋งํ•˜์ž๋ฉด MongoDB์˜ uri๋ฅผ localhost๋กœ ์„ค์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— Spring ์„œ๋ฒ„ ์ž…์žฅ์—์„œ๋Š” ์ž์‹ ์˜ ip ์ฃผ์†Œ์—์„œ MongoDB๋ฅผ ์ฐพ์ง€๋งŒ ์‹ค์ œ๋กœ localhost์—๋Š” MongoDB๊ฐ€ ์—†๋‹ค. ์„œ๋ฒ„ ์ž…์žฅ์—์„œ localhost๋Š” docker์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋œ๋‹ค.

Docker run ์‹œ network option ์ ์šฉ

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋นŒ๋“œ๋œ SpringApplication์„ Docker๋กœ ์‹คํ–‰ ์‹œ ๋„์ปค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ(veth)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ง์ ‘ host ๋„คํŠธ์›Œํฌ์— ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

# network option ์ ์šฉ
docker run --name {name} --network=host -d {image}

์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ --network=host๋ฅผ ์ ์šฉํ•˜๋ฉด ์ง์ ‘ host์— ์—ฐ๊ฒฐ๋ผ ์˜ˆ์ƒํ•œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•ด๋‹น ์˜ต์…˜์ด ๋ชจ๋“  ๋ฐฐํฌ ๊ณผ์ •์—์„œ ์ ์šฉ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Github worlflow์˜ main.yml์—๋„ ์ ์šฉํ•ด์ฃผ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  workflow๋ฅผ ์žฌ์‹คํ–‰ํ•ด ๋ฐฐํฌ ๊ณผ์ •์— ์ ์šฉ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ๋‹ค. test api๋ฅผ ์ „์†กํ•ด DB์— ์ œ๋Œ€๋กœ ์ €์žฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ mergeํ•ด ๋ชจ๋“  ์ž‘์—…์„ ๋งˆ์ณค๋‹ค.

๊ทธ๋ž˜์„œ ๋ญ˜ ๋А๊ผˆ๋Š”๋ฐ

๋ชจ๋“  ํ•ด๊ฒฐ์ฑ…์€ ๊ตฌ๊ธ€๋ง์— ์žˆ๋‹ค

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ChatGPT์— ๋‚ด ์ƒํ™ฉ์„ ๋ชจ๋‘ ์„ค๋ช…ํ•ด ์—ฌ๋Ÿฌ ํ•ด๊ฒฐ์ฑ…์„ ๋ฐ›์•˜์ง€๋งŒ, ๋ชจ๋‘ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์•˜๋‹ค. ์ •ํ™•ํžˆ ๋งํ•˜๋ฉด ๋‚˜๋„ ์ž˜ ๋ชฐ๋ผ์„œ GPT์—๊ฒŒ ์ž˜ ์„ค๋ช…ํ•ด์ฃผ์ง€ ๋ชปํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ๋งŽ์€ ๋„์›€์ด ๋๋˜ ๊ฑด ๋ง์—ฐ์ž์‹คํ•ด์„œ ๊ตฌ๊ธ€๋งํ–ˆ๋˜ ๊ฒฐ๊ณผ๋“ค์ด์—ˆ๋‹ค. ์—ญ์‹œ ์ง์ ‘ ์ฐพ์•„๋ณด๊ณ  ์ ์šฉํ•ด๋ณด๋Š” ๊ฒŒ ์ œ์ผ ๋น ๋ฅด๋‹ค๋Š” ๊ฑธ ๋А๊ผˆ๋‹ค.

๊ทธ๋ƒฅ ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค, ์ดํ•ดํ•˜์ž

์ด์ „๊นŒ์ง€๋Š” Docker๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐ์—๋Š” ํฐ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ Docker network์™€ ๊ฐ™์€ ๋กœ์ง์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์–ด ๋” ๊ณต๋ถ€๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ ˆ์‹คํ•˜๊ฒŒ ๋А๊ผˆ๋‹ค. ํŠนํžˆ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋‚˜ ์นดํ”„์นด ๊ฐ™์€ ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋” ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.. ์ปดํ“จํ„ฐ๋ง ์ˆ˜์—…์—์„œ ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•ด์„œ ์ข€ ๊ณต๋ถ€ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ์ •๋ง ๋จผ์ง€๋งŒํผ ์•„๋Š”๊ตฌ๋‚˜ ์‹ถ์—ˆ๋‹ค.

๊ทธ๋ž˜๋„ ํ•ด๋ƒˆ๋‹ค

์˜ค๋Š˜ ์•ˆ์— ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์˜€๋Š”๋ฐ, ํ•ด๋‚ด๊ณ  trouble shooting ๋ฌธ์„œ๊นŒ์ง€ ๋‹ค ์ž‘์„ฑํ•œ๊ฑธ ๋ณด๋‹ˆ ๋‚˜์˜์ง€ ์•Š์€ ๋“ฑ๊ฐ€๊ตํ™˜์ธ ๊ฒƒ ๊ฐ™๋‹ค. ํŠนํžˆ ๋ฌธ์ œ ์ƒํ™ฉ์— ๋Œ€ํ•ด ๋Œ€์ฒ˜ํ•˜๋ฉด์„œ ๋งŽ์ด ๋ฐœ์ „ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋‹ค์Œ์— ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ๋Š” ๋” ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค.

profile
๋‚˜๋Š”์•ผ ๋งํ•˜๋Š” ๊ฐœ๋ฐœ(๊ฐ)์ž

0๊ฐœ์˜ ๋Œ“๊ธ€