IT๊ธฐ์ดˆ

๋ฆฌ๋ˆ…์Šค ํ”„๋กœ์„ธ์Šค ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ ๋ฐฉ๋ฒ• – nohup๊ณผ & ์ฐจ์ด ์ •๋ฆฌ

๐Ÿฅ„ํ…Œํฌ ํ•œ ์Šคํ‘ผ 2026. 5. 28. 22:14

๋ชฉ์ฐจ

  1. SSH๋ฅผ ๋Š์œผ๋ฉด ์‹คํ–‰ ์ค‘์ด๋˜ ํ”„๋กœ๊ทธ๋žจ์ด ๊บผ์ง„๋‹ค?
  2. ํฌ๊ทธ๋ผ์šด๋“œ์™€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์˜ ์ฐจ์ด
  3. & ๊ธฐํ˜ธ๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ํ•˜๊ธฐ
  4. nohup์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
  5. nohup๊ณผ &๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  6. ์‹คํ–‰ ์ค‘์ธ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌํ•˜๊ธฐ
  7. PM2 – Node.js ์•ฑ์„ ์œ„ํ•œ ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•
  8. ์ •๋ฆฌ ๋ฐ ๋‹ค์Œ ๋‹จ๊ณ„

1. SSH๋ฅผ ๋Š์œผ๋ฉด ์‹คํ–‰ ์ค‘์ด๋˜ ํ”„๋กœ๊ทธ๋žจ์ด ๊บผ์ง„๋‹ค?

์„œ๋ฒ„์— SSH๋กœ ์ ‘์†ํ•ด์„œ Python ์Šคํฌ๋ฆฝํŠธ๋‚˜ Node.js ์•ฑ์„ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ, SSH ์—ฐ๊ฒฐ์„ ๋Š๋Š” ์ˆœ๊ฐ„ ์‹คํ–‰ ์ค‘์ด๋˜ ํ”„๋กœ๊ทธ๋žจ๋„ ํ•จ๊ป˜ ์ข…๋ฃŒ๋˜๋Š” ๊ฒฝํ—˜์„ ํ•ด๋ณธ ์  ์žˆ์œผ์‹ ๊ฐ€์š”?

์ด๊ฒƒ์€ ๋ฆฌ๋ˆ…์Šค์˜ ์ •์ƒ์ ์ธ ๋™์ž‘์ž…๋‹ˆ๋‹ค. SSH ์„ธ์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด ํ•ด๋‹น ์„ธ์…˜์—์„œ ์‹คํ–‰๋œ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์— ์ข…๋ฃŒ ์‹ ํ˜ธ(SIGHUP)๊ฐ€ ์ „๋‹ฌ๋˜์–ด ํ•จ๊ป˜ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์žฅ์‹œ๊ฐ„ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” nohup๊ณผ & ๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2. ํฌ๊ทธ๋ผ์šด๋“œ์™€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์˜ ์ฐจ์ด

ํฌ๊ทธ๋ผ์šด๋“œ(Foreground) ์‹คํ–‰์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ์˜ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ํ„ฐ๋ฏธ๋„์ด ์ ์œ ๋˜์–ด ๋‹ค๋ฅธ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ฐฑ๊ทธ๋ผ์šด๋“œ(Background) ์‹คํ–‰์€ ํ”„๋กœ๊ทธ๋žจ์ด ๋’ค์—์„œ ์‹คํ–‰๋˜๋ฉด์„œ ํ„ฐ๋ฏธ๋„์€ ์ฆ‰์‹œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. & ๊ธฐํ˜ธ๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ํ•˜๊ธฐ

๋ช…๋ น์–ด ๋งจ ๋์— &๋ฅผ ๋ถ™์ด๋ฉด ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

 
 
python3 server.py &

์‹คํ–‰ํ•˜๋ฉด PID๊ฐ€ ์ถœ๋ ฅ๋˜๊ณ  ์ฆ‰์‹œ ํ„ฐ๋ฏธ๋„ ์ œ์–ด๊ถŒ์ด ๋Œ์•„์˜ต๋‹ˆ๋‹ค. ๋‹จ, &๋งŒ์œผ๋กœ๋Š” SSH ์„ธ์…˜์ด ์ข…๋ฃŒ๋  ๋•Œ ํ”„๋กœ์„ธ์Šค๋„ ํ•จ๊ป˜ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

4. nohup์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

**nohup(no hangup)**์€ SSH ์„ธ์…˜์ด ์ข…๋ฃŒ๋  ๋•Œ ์ „๋‹ฌ๋˜๋Š” SIGHUP ์‹ ํ˜ธ๋ฅผ ๋ฌด์‹œํ•˜๋„๋ก ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. nohup์„ ์‚ฌ์šฉํ•˜๋ฉด SSH ์—ฐ๊ฒฐ์ด ๋Š๊ฒจ๋„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณ„์† ์‹คํ–‰๋˜๋ฉฐ, ํ‘œ์ค€ ์ถœ๋ ฅ์ด ์ž๋™์œผ๋กœ nohup.out ํŒŒ์ผ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 
 
nohup python3 server.py

์ด๋ ‡๊ฒŒ ์‹คํ–‰ํ•˜๋ฉด SSH๋ฅผ ๋Š์–ด๋„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ด์•„์žˆ์ง€๋งŒ, ํ„ฐ๋ฏธ๋„์ด ์—ฌ์ „ํžˆ ์ ์œ ๋ฉ๋‹ˆ๋‹ค.

5. nohup๊ณผ &๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

์‹ค์ „์—์„œ๋Š” nohup๊ณผ &๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. nohup์œผ๋กœ ์„ธ์…˜ ์ข…๋ฃŒ ์‹ ํ˜ธ๋ฅผ ๋ฌด์‹œํ•˜๊ณ , &๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰๊นŒ์ง€ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค.

 
 
nohup python3 server.py &

์ถœ๋ ฅ ๋กœ๊ทธ๋ฅผ ํŠน์ • ํŒŒ์ผ์— ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฆฌ๋‹ค์ด๋ ‰์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. 2>&1์€ ํ‘œ์ค€ ์˜ค๋ฅ˜(stderr)๋„ ํ•จ๊ป˜ ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋กํ•˜๋ผ๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

 
 
nohup python3 server.py > /var/log/myapp.log 2>&1 &

6. ์‹คํ–‰ ์ค‘์ธ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌํ•˜๊ธฐ

์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ™•์ธํ•  ๋•Œ๋Š” ps aux์™€ grep์„ ์กฐํ•ฉํ•ฉ๋‹ˆ๋‹ค.

 
 
ps aux | grep python3

PID๋ฅผ ํ™•์ธํ•œ ํ›„ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

 
 
kill ํ”„๋กœ์„ธ์ŠคPID

๊ฐ•์ œ ์ข…๋ฃŒ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” -9 ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 
 
kill -9 ํ”„๋กœ์„ธ์ŠคPID

ํ˜„์žฌ ์„ธ์…˜์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… ๋ชฉ๋ก์€ jobs ๋ช…๋ น์–ด๋กœ ํ™•์ธํ•˜๊ณ , fg %์ž‘์—…๋ฒˆํ˜ธ๋กœ ํฌ๊ทธ๋ผ์šด๋“œ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

7. PM2 – Node.js ์•ฑ์„ ์œ„ํ•œ ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•

Node.js ์•ฑ์„ ์šด์˜ํ•œ๋‹ค๋ฉด nohup ๋Œ€์‹  PM2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. PM2๋Š” Node.js ์•ฑ ์ „์šฉ ํ”„๋กœ์„ธ์Šค ๋งค๋‹ˆ์ €๋กœ, ์•ฑ์ด ์˜ค๋ฅ˜๋กœ ์ข…๋ฃŒ๋˜๋ฉด ์ž๋™ ์žฌ์‹œ์ž‘, ๋กœ๊ทธ ๊ด€๋ฆฌ, ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋“œ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

PM2๋ฅผ ์ „์—ญ์œผ๋กœ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

 
 
npm install -g pm2

์•ฑ์„ ์‹œ์ž‘ํ•˜๊ณ  ์žฌ๋ถ€ํŒ… ํ›„ ์ž๋™ ์‹œ์ž‘์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

 
 
pm2 start app.js
pm2 startup
pm2 save

์‹คํ–‰ ์ค‘์ธ ์•ฑ ๋ชฉ๋ก ํ™•์ธ๊ณผ ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ํ™•์ธ์€ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 
 
pm2 list
pm2 logs

8. ์ •๋ฆฌ ๋ฐ ๋‹ค์Œ ๋‹จ๊ณ„

์˜ค๋Š˜ ๋ฐฐ์šด ํ•ต์‹ฌ์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • SSH ์„ธ์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด ํ•ด๋‹น ์„ธ์…˜์˜ ํ”„๋กœ์„ธ์Šค๋„ ํ•จ๊ป˜ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
  • &๋ฅผ ๋ถ™์ด๋ฉด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, SSH ์ข…๋ฃŒ ์‹œ ํ•จ๊ป˜ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
  • nohup์€ SSH ์ข…๋ฃŒ ์‹ ํ˜ธ๋ฅผ ๋ฌด์‹œํ•ด ์„ธ์…˜์ด ๋Š๊ฒจ๋„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
  • ์‹ค์ „์—์„œ๋Š” nohup ๋ช…๋ น์–ด & ํ˜•ํƒœ๋กœ ๋‘ ๊ฐ€์ง€๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Node.js ์•ฑ์ด๋ผ๋ฉด PM2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ํŽธ๋ฆฌํ•˜๊ณ  ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ธ€์—์„œ๋Š” ์„œ๋ฒ„ ๋ฐฑ์—…์„ ์ž๋™ํ™”ํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.