java 데몬 프로그램이 리눅스환경에서 실행되는 과정을 정리해봤습니다.
- java : 1.8.0
- jdk : openjdk 1.8.0
- 리눅스 : CentOS Linux 7
1. java프로그램 개발
Java로 데몬 프로그램을 개발합니다. 저는 netty프레임워크를 사용하였습니다.
서버 프레임워크 Netty란? 비동기 이벤트 기반의 네트워크 애플리케이션을 개발하기 위한 고성능 프레임워크로, 다양한 네트워크 프로토콜을 지원합니다.
- Netty 프레임워크를 이용한 프로그램 개발 & 서버 소켓 및 핸들러 설정
Netty를 사용하여 데몬 프로그램을 개발합니다.
서버 소켓을 설정하고, 클라이언트 요청에 대한 핸들러(비즈니스 로직을 처리)를 구현합니다.
2. 데몬 프로그램을 실행하는 쉘 스크립트 작성
nohup java -server -Xms512m -Xmx1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2 -jar /home/..root../javaProgramDaemon.jar 1> /dev/null 2>&1 &
- nohup : 프로그램을 백그라운드에서 실행하고, 터미널 세션이 종료되어도 프로그램이 계속 실행되도록 하는 명령어입니다.
- java : Java 가상 머신을 실행하는 명령어입니다.
-server : 서버 모드로 JVM을 실행합니다.
-Xms512m : 초기 힙 크기를 512MB로 설정합니다.
-Xmx1024m : 최대 힙 크기를 1024MB로 설정합니다.
-XX:+UseG1GC : G1(Garbage First) 가비지 컬렉터를 사용합니다.
-XX:MaxGCPauseMillis=200 : 가비지 컬렉션 중 최대 허용 중지 시간을 200밀리초로 설정합니다.
-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2 : HTTPS 연결에 사용할 프로토콜을 설정합니다.
- -jar /home/..root../javaProgramDaemon.jar : 지정된 JAR 파일을 실행합니다.
- 1> /dev/null : 표준 출력을 /dev/null로 리다이렉션하여 출력을 무시합니다.
- 2>&1 : 표준 에러를 표준 출력으로 리다이렉션합니다.
- & : 프로그램을 백그라운드에서 실행합니다.
3. 프로세스 실행
java로 만든 데몬 프로그램을 리눅스 서버에서 실행하려면, 기본적으로 JVM이 설치되어 있어야합니다. java 프로그램을 운영하는 서버라면 기본적으로 깔려있을테니 설치 과정은 생략하도록 하겠습니다.
- 1번에서 개발한 java 프로그램을 JAR 파일로 패키징 합니다.
JAR(Java Archive, 자바 아카이브)? 여러개의 자바 클래스 파일과, 클래스들이 이용하는 관련 리소스(텍스트, 그림 등) 및 메타데이터를 하나의 파일로 모아서 자바 플랫폼에 응용 소프트웨어나 라이브러리를 배포하기 위한 소프트웨어 패키지 파일 포맷이다.
- JAR파일을 리눅스에 업로드 후 쉘 스크립트 옵션을 상황에 맞게 수정한다.
- 쉘스크립트 실행
정리
제가 처음 접했을 때 연결이 안되거나 어려웠던 부분을 기억하며 최대한 단순하게 과정을 나열하였습니다.
다시 정리하면서도 각 단계별에서 주의해야할 점과 고려해야할 부분들을 다시 한번 살펴보고 이해할 수 있는 과정이었습니다.