최소한 알고 있어야 할 서버 지식

개발자와 서버

  • 큰 회사일수록 인프라, 플랫폼 담당과 서비스 개발 팀이 분리되어있음
    • 즉 개발자는 인프라나 플랫폼 관련 경험을 못해볼 수 있음
  • 서버 OS에 대한 경험이 없으면 문제 발생시 애플리케이션 문제인지 OS 문제인지 파악하는데 어려움을 겪을 수 있음
  • 개발자도 기본적인 서버 관리는 할 줄 알아야함

OS 계정과 권한

  • root 계정으로 프로세스 구동후 일반 계정으로 프로세스를 구동했는데 root 계정이 생성한 파일을 수정할 권한이 없어서 프로세스가 비정상적으로 종료된 경험이 존재
  • 서버 OS로는 리눅스를 많이 사용하므로 리눅스의 기본적인 계정과 권한 관리를 이해할 필요가 있음
    • 각 계정 역할에 맞게 권한 부여 필요
  • 리눅스는 계정과 함께 그룹 개념도 사용
  • ls -l 명령어로 권한 확인 가능
    • 예시: drwxr-xr-x
    • r: 읽기, w: 쓰기, x: 실행
    • 소유자(u) 그룹(g) 다른계정(o)의 권한
      • 위 예시에서는 rwx rx rx
    • 권한은 숫자로 표현가능
      • r: 4, w: 2, x: 1
    • 권한부여
      • chmod u+x run.sh : 소유자에 실행 권한 추가
      • chmod g-x run.sh : 그룹에 실행 권한 제거
      • chmod o=rx run.sh : 모든 사용자는 읽기, 실행 권한 지정
      • chmod 777 run.sh : 숫자로 권한부여; 소유자, 그룹, 다른계정에 모든 권한 부여
    • 옵션들
      • 추가(+), 제거(-), 지정(=)
  • sudo 권한

프로세스 확인하기

  • 클라이언트에서 서버 접근시 연결이 제대로 안되면 서버 프로세스가 정상 동작중인지 확인해야함
    • 프로세스 종료가 제대로 되지 않은 경우 강제 종료해야함
    • 프로세스가 사용하는 CPU나 메모리 사용량을 htop 같은 프로그램을 사용해서 확인해야할때도 있음
      • ps aux --sort -rss | head -n 6
    • kill 옵션 PID 의 명령어로 강제종료 가능
      • -15(DEFAULT, TERM 신호로 종료), -9(강제 종료)

백그라운드 프로세스

  • tail, top, vi 처럼 터미널에서 실행하는 명령어는 기본적으로 포그라운드에서 수행됨
    • 포그라운드는 프로세스를 종료하면 같이 종료됨
  • 톰캣같은 서버는 항상 실행되어 있어야하는데 이럴때 포그라운드가 아닌 백그라운드 프로세스로 실행
    • java -Dserver.port=9090 -jar server.jar &와 같이 &를 붙히면 됨
    • 그러나 이 방법은 사용자가 로그아웃하면 함께 종료될 수 있음
  • nohup과 함께 사용해서 터미널이 종료되도 백그라운드 프로세스가 계속 수행중이도록 만들수 있음
    • nohup java -Dserver.port=9090 -jar server.jar &
  • nohup 으로 실행한 프로세스는 콘솔출력을 기본적으로 nohup.out에 기록
    • 리디렉션을 사용해서 원하는 파일에 기록
    • nohup java -Dserver.port=9090 -jar server.jar > server.log 2>&1 &
    • 2>&1의 의미
      • 2 표준 오류, System.err.println의 결과
      • \> 리디렉션 연산
      • &1 표준 출력

디스크 용량 관리

파일 디스크립터 제한

시간 맞추기

  • 컴퓨터가 관리하는 시간은 실제 세계의 시간과 오차가 발생하기도 함, 서버운영시 시간 동기화에 신경 써야함
  • chrony나 ntp같은 서비스를 사용해서 주기적으로 서버 시간을 맞춰야함

크론으로 스케줄링하기

alias 등록하기

네트워크 정보 확인