SIMPOLOR
단순하고 색있게
Java jar 실행 옵션
단순
·
2024년 07월 05일
Java
java -jar 명령어를 사용할 때 여러 가지 실행 옵션을 함께 사용할 수 있습니다. JAR 파일을 실행할 때, JVM의 동작을 제어하는 다양한 옵션과 애플리케이션 자체의 옵션을 명령어로 전달할 수 있습니다. ## JVM 옵션 이 옵션들은 JVM 자체의 동작을 제어하는 데 사용됩니다. -jar **이전**에 위치시켜야 합니다. - **-Xms{size}**: JVM의 초기 힙(heap) 크기를 설정합니다. - **-Xmx{size}**: JVM의 최대 힙 크기를 설정합니다. - **-XX:PermSize={size}**: 메타스페이스(PermGen, Java 8 이전)를 설정합니다. - **-XX:MaxPermSize={size}**: PermGen의 최대 크기를 설정합니다. - **-Xss{size}**: 스레드 스택 크기를 설정합니다. - **-D{property}={value}**: 시스템 속성을 설정합니다. 예: -Dfile.encoding=UTF-8 ``` > java -Xmx512m -Dfile.encoding=UTF-8 -jar myapp.jar ``` 위 명령어는 JVM의 최대 힙 크기를 512MB로 설정하고 UTF-8 인코딩을 사용하여 애플리케이션을 실행합니다. ## 환경 변수 옵션 애플리케이션 실행 시 시스템 환경 변수를 설정할 수 있습니다. 이는 특정 환경에 맞춰 애플리케이션의 동작을 변경할 때 유용합니다. - **-Dspring.profiles.active=dev**: 스프링 애플리케이션의 활성 프로파일을 dev로 설정합니다. - **-Dlog4j.configurationFile=log4j2.xml**: Log4j 로깅 설정 파일을 지정합니다. ``` > java -Dspring.profiles.active=dev -jar myapp.jar ``` ## 가비지 컬렉션 옵션 가비지 컬렉션 방식을 설정하는 옵션들입니다. 애플리케이션의 메모리 관리 방식을 최적화하는 데 사용됩니다. -**-XX:+UseG1GC**: G1(Garbage First) 가비지 컬렉터를 사용합니다. -**-XX:+UseParallelGC**: 병렬 가비지 컬렉터를 사용합니다. -**-XX:+UseConcMarkSweepGC**: CMS(Concurrent Mark-Sweep) 가비지 컬렉터를 사용합니다. ``` > java -XX:+UseG1GC -jar myapp.jar ``` ## 디버깅 및 모니터링 옵션 디버깅을 활성화하고 원격 디버깅을 가능하게 하는 옵션들입니다. - **-Xdebug**: JVM을 디버그 모드로 실행합니다. - **-Xrunjdwp**: 원격 디버깅을 설정하는 옵션으로, 다음과 같이 포트 번호와 함께 설정됩니다. ``` > java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -jar myapp.jar ``` 위 명령어는 JVM을 디버그 모드로 실행하고, 원격 디버거가 포트 5005에서 연결되도록 설정합니다. 이를 통해 IntelliJ나 Eclipse 같은 디버깅 툴을 사용해 디버깅할 수 있습니다. ## 애플리케이션 옵션 애플리케이션에 직접 전달되는 설정입니다. JVM 옵션 뒤에 위치하며, 애플리케이션 실행 시 특정 값을 전달할 수 있습니다. - **--server.port=8081**: 애플리케이션의 실행 포트를 8081로 설정합니다. - **--spring.profiles.active=prod**: 스프링 프로파일을 prod 환경으로 설정합니다. ``` > java -jar myapp.jar --server.port=8081 --spring.profiles.active=prod ``` ## Classpath 설정 JAR 파일에 추가적으로 클래스 경로나 라이브러리를 설정할 때 -cp 옵션을 사용할 수 있습니다. -jar 옵션과는 함께 사용할 수 없으므로 메인 클래스를 직접 지정해야 합니다. ``` > java -cp "myapp.jar:lib/dependency1.jar:lib/dependency2.jar" com.example.MainApp ``` 위 명령어는 myapp.jar와 lib 디렉토리에 있는 두 개의 라이브러리 JAR 파일을 클래스패스에 추가하고, com.example.MainApp 클래스를 실행합니다. ## 실행 명령어 구조 java 명령어는 다음과 같은 순서로 작성됩니다. 1. JVM 옵션 (-D, -X, -XX 등의 옵션들) 2. JAR 파일 실행 명령어 (-jar) 3. 실행할 JAR 파일 4. 애플리케이션에 전달할 인자 (애플리케이션이 처리할 값들) ``` > java -Xmx512m -Dfile.encoding=UTF-8 -jar myapp.jar --server.port=8080 ``` 위의 명령어는 최대 힙 크기를 512MB로 설정하고, UTF-8 인코딩을 사용하며, 애플리케이션을 포트 8080에서 실행합니다. ## 마무리 JVM 옵션과 애플리케이션 옵션을 적절하게 설정하면 Java 애플리케이션의 성능을 최적화할 수 있습니다. 특히, 메모리 관리나 가비지 컬렉션 설정은 성능에 중요한 영향을 미칩니다. 설정 후에는 반드시 충분한 테스트를 통해 시스템 환경에서의 동작을 확인해야 합니다.
연관 포스트
BigDecimal 클래스
다형성(Polymorphism)
캡슐화(Encapsulation)
추상화(Abstraction)
상속(Inheritance)