Linux Server 운영 기본

3줄 요약

  • Linux 서버 운영 기본은 Spring 애플리케이션이 실제 서버에서 어떤 사용자로 실행되고, 어떤 프로세스로 떠 있으며, 어떤 포트와 로그와 디스크를 사용하는지 확인하는 능력이다.
  • 핵심은 명령어 암기가 아니라 장애 중 권한 문제, 프로세스 문제, 포트/방화벽 문제, 로그/디스크/자원 문제를 안전하게 분리하는 것이다.
  • 운영 서버에서는 읽기 명령과 변경 명령을 구분하고, 변경 전에는 영향 범위와 되돌리는 방법을 확인해야 한다.

핵심 정리

  • Spring 프로세스를 root로 띄우면 편해 보이지만 파일 손상, 권한 오남용, 침해 사고의 범위가 커진다. 별도 app 사용자와 필요한 디렉터리 권한을 두는 편이 안전하다.
  • 프로세스가 살아 있다는 사실만으로 API가 정상이라는 뜻은 아니다. 잘못된 profile, 포트 충돌, file permission, OOM, disk full, log write 실패가 함께 확인되어야 한다.
  • systemd는 jar 실행 명령을 서비스 단위로 관리하고, 재시작 정책, 환경 파일, 로그, 종료 신호를 일관되게 만든다.
  • 포트 문제는 listen, firewall, Nginx/LB upstream, SSH 접근을 나누어 봐야 한다. connection refusedtimeout은 원인 후보가 다르다.
  • 로그와 자원 점검은 장애 중 가장 먼저 하는 읽기 작업이다. journalctl, df, du, free, top, ss 출력은 실행 시각과 서비스명을 함께 남겨야 한다.
  • 운영 서버의 위험 명령은 명령 자체보다 대상과 권한이 문제다. rm, chmod, chown, kill -9, reboot, firewall 변경은 항상 확인 명령과 rollback 계획을 먼저 둔다.

헷갈리는 지점

  • SSH로 접속할 수 있으면 서버가 정상이라고 생각하기 쉽다.
    • 핵심은 SSH는 관리 경로이고, 사용자 트래픽 경로는 프로세스, 포트, 프록시, 방화벽, 애플리케이션 상태를 모두 지난다는 점이다.
  • systemctl restart를 빠른 복구로만 생각하기 쉽다.
    • 핵심은 restart가 원인을 지우거나 장애를 반복시킬 수 있다는 점이다. 로그와 최근 변경을 먼저 확인해야 한다.
  • 디스크 사용률이 100%가 아니면 안전하다고 보기 쉽다.
    • 핵심은 inode 고갈, 특정 로그 디렉터리 포화, journal 용량, 임시 파일 증가도 Spring 서비스 실패를 만들 수 있다는 점이다.

확인 질문

  • Linux 서버에서 Spring API 장애를 볼 때 가장 먼저 나눌 계층은 무엇인가?
    • 실행 사용자와 권한, 프로세스 상태, 포트 listen, 방화벽/프록시 경로, 로그, 디스크와 CPU/memory 상태다.
  • 운영 서버에서 변경 명령을 바로 실행하면 안 되는 이유는 무엇인가?
    • 대상 경로와 영향 범위를 잘못 잡으면 데이터 삭제, 권한 손상, 접속 차단, 서비스 중단이 즉시 발생할 수 있기 때문이다.
  • 인프라 담당자에게 서버 문제를 공유할 때 필요한 증거는 무엇인가?
    • 시간대, 서비스명, 실행 사용자, PID, 포트 상태, 최근 systemd 로그, disk/resource 출력, 이미 실행한 명령과 결과다.