본문 바로가기
Infra2026년 6월 18일2분 읽기

systemd 서비스로 앱을 안정적으로 띄우기

YS
김영삼
조회 272
systemd 서비스로 앱을 안정적으로 띄우기

핵심 요약

Node·Python 앱을 운영에 띄울 때 systemd 유닛 하나면 자동 재시작·부팅 시 자동 실행·중앙 로그(journalctl)·보안 격리까지 된다. 별도 프로세스 매니저 없이 표준 도구로 충분한 경우가 많다.

1. 기본 유닛

[Unit]
Description=My App
After=network.target

[Service]
User=appuser
WorkingDirectory=/srv/app
ExecStart=/usr/bin/node server.js
Restart=on-failure
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

2. 운영 명령

systemctl daemon-reload
systemctl enable --now myapp
journalctl -u myapp -f      # 실시간 로그

3. 보안·안정 옵션

  • NoNewPrivileges=true, ProtectSystem=strict, ReadWritePaths=로 쓰기 경로 최소화
  • Restart=on-failure + RestartSec로 크래시 복구
  • 전용 User=로 실행 — root 금지

자주 묻는 질문

pm2가 꼭 필요한가요?

대부분 systemd로 충분합니다. 자동 재시작·부팅 실행·로그·격리를 표준으로 제공합니다. 클러스터 모드 등 특정 기능이 필요할 때만 pm2를 고려하세요.

유닛을 고쳤는데 반영이 안 돼요.

유닛 파일 변경 후엔 systemctl daemon-reload를 먼저 실행하고 restart해야 합니다.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록