개발자와 서버
- 큰 회사일수록 인프라, 플랫폼 담당과 서비스 개발 팀이 분리되어있음
- 즉 개발자는 인프라나 플랫폼 관련 경험을 못해볼 수 있음
- 서버 OS에 대한 경험이 없으면 문제 발생시 애플리케이션 문제인지 OS 문제인지 파악하는데 어려움을 겪을 수 있음
- 개발자도 기본적인 서버 관리는 할 줄 알아야함
OS 계정과 권한
- root 계정으로 프로세스 구동후 일반 계정으로 프로세스를 구동했는데 root 계정이 생성한 파일을 수정할 권한이 없어서 프로세스가 비정상적으로 종료된 경험이 존재
- 서버 OS로는 리눅스를 많이 사용하므로 리눅스의 기본적인 계정과 권한 관리를 이해할 필요가 있음
- 리눅스는 계정과 함께 그룹 개념도 사용
ls -l 명령어로 권한 확인 가능 - 예시: drwxr-xr-x
- r: 읽기, w: 쓰기, x: 실행
-
- 권한은 숫자로 표현가능
- 권한부여
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 등록하기
네트워크 정보 확인