배포 & 인프라
Daemon으로 백그라운드 서버 실행하기
한 줄 요약
nohup으로 백그라운드 프로세스를 띄우면 SSH 세션이 끊겨도 서버가 계속 동작하며, 종료할 때는 쉘을 강제로 닫지 않고exit로 정상 종료해야 한다.
왜 알아야 했나
- 사내 서비스 배포 중 SvelteKit 서버를 백그라운드에서 띄워야 했음
- 단순히
npm run preview만 실행하면 터미널 닫는 순간 서버도 함께 종료됨
핵심 개념
Daemon 명령어 모음
| 작업 | 명령어 |
|---|---|
| 데몬 띄우기 | nohup npm run preview & |
| 로그 보기 | tail -f nohup.out |
| 서버 끄기 (포트로) | fuser -k 8100/tcp |
주의사항
쉘을 바로 끄면 안 됨
- 터미널 창을 X 버튼으로 강제 종료하면 자식 프로세스에 SIGHUP이 전달될 수 있음
- 반드시
exit명령으로 쉘을 정상 종료한 후 창을 닫아야 함
각 명령어의 의미
nohup npm run preview &
nohup: "no hang up" — 터미널이 종료(hang up)되어도 프로세스 유지&: 백그라운드로 실행 (터미널 즉시 반환)- 결과: 표준 출력이 자동으로
nohup.out파일에 기록됨
tail -f nohup.out
nohup.out파일의 끝부분을 실시간으로 따라가며 보여줌-f= follow. 새 로그가 쌓이면 자동으로 화면에 추가됨- 종료:
Ctrl+C(로그 보기만 중단, 서버는 계속 동작)
fuser -k 8100/tcp
- 특정 포트(8100)를 점유하고 있는 프로세스를 강제 종료
-k= kill. 해당 포트의 프로세스에 SIGKILL 전송- PID를 모를 때 빠르게 정리하는 용도
예시 / 코드
# 1. 서버 백그라운드 실행
nohup npm run preview &
# 2. 잘 떴는지 로그 확인
tail -f nohup.out
# 3. 정상 작동 확인 후 Ctrl+C로 로그 보기 중단
# (서버는 계속 동작 중)
# 4. SSH 세션 종료할 때
exit
서버 끄고 다시 띄울 때:
fuser -k 8100/tcp # 기존 서버 종료
nohup npm run preview & # 다시 띄우기
헷갈렸던 점
&하나만 붙여도 백그라운드는 되지만, 터미널이 닫히면 같이 죽음 →nohup이 꼭 필요nohup.out파일이 계속 쌓이면 용량 문제 생길 수 있음 (주기적 관리 필요)
실무 적용
- 사내 서비스 SvelteKit 서버 배포 환경에서 사용 중
- 단순 데모/테스트 서버 띄울 때 PM2 같은 무거운 도구 안 쓰고 빠르게 처리 가능
- 단점: 프로세스 모니터링/자동 재시작 기능 없음 → 프로덕션 진지하게 운영하면 PM2나 systemd 고려
더 공부할 것
- PM2로 더 안정적인 프로세스 관리 (자동 재시작, 로그 분할, 클러스터 모드)
- systemd 서비스로 등록해서 OS 부팅 시 자동 실행
-
nohup.out로그 로테이션 설정