티스토리 뷰
자바 프로그래밍을 할 때 원격 서버에 설치된 자바 프로그램을 로컬에서 원격으로 디버깅을 할 수 있다. IntelliJ 혹은 Eclipse 같은 통합 개발환경에서 서버에 설치되어 있는 자바 프로그램을 디버깅 할 수 있다.
특히 도커(Docker)를 이용해서 실제 배포 환경과 유사한 실행 환경을 만들어 놓고, 테스트를 해볼 수 있어 알아두면 편리한 기능이다. 이번 포스트에서는 도커에 자바 프로그램을 구동시켜놓고 IntelliJ와 Eclipse에서 원격으로 디버깅을 해보겠다.
실행할 자바 프로그램
간단한 자바 프로그램을 작성한 다음 도커에 구동시킨 후 원격 디버깅을 해보자.
public class Test {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println("Hello, World - " + i);
}
}
}
Hello, World를 100번 찍는 간단한 프로그램이다. 이 자바 프로그램을 IDE 혹은 javac를 이용해 컴파일해서 Test.class 혹은 jar 파일을 만든다.
도커에 자바 실행환경 만들기
자바 프로그램을 실행할 수 있는 도커 환경을 만들어보자. 다음 도커 파일을 빌드하면 자바 실행환경을 만들 수 있다.
FROM openjdk:8
COPY Test.class /root
WORKDIR /root
EXPOSE 5005
ENTRYPOINT ["java", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005", "Test"]
Test.class 혹은 jar 파일이 위치한 디렉토리에서 다음 명령을 실행한다.
docker build . --tag test_container
도커 파일의 COPY 명령이 현재 작업 디렉토리에 있는 Test.class 파일을 이미지 안쪽으로 복사해준다. (만약 jar 파일이라면 Test.class 대신 jar 파일을 입력하고 ENTRYPOINT의 자바 명령을 조금 고치면 된다.)
docker run -d -p 5005:5005 test_container
위 명령으로 도커 이미지를 컨테이너로 만든다. ENTRYPOINT로 지정한 자바 명령이 자바 프로그램을 실행시켜준다. suspend=y 옵션을 줬으므로 원격에서 디버거가 붙을 때까지 자바 프로그램은 실행을 멈추고 대기한다.
IntelliJ Remote Debugger 설정
IntelliJ에서 Test.java 파일을 포함한 프로젝트를 오픈한다.
[Run] -> [Edit Configurations] 메뉴로 들어간다.
창의 왼쪽에 있는 '+' 버튼을 눌러 Remote를 선택한다.
IntelliJ의 기본 설정이 5005번 포트를 통해서 원격 디버깅을 하도록 설정되어 있다. 이미 도커 컨테이너를 띄울 때 5005번 포트를 매핑 시켜놨으므로 localhost로 접속해서 디버깅을 하면된다. 기본 설정을 유지하고 OK 버튼을 누른다.
디버거를 실행하기전에 브레이크 포인트를 설정한다.
그리고 디버깅을 시작하면 로컬에서 자바 프로그램을 디버깅하는 것처럼 원격 디버깅을 할 수 있다.
주의 할 점은 도커 컨테이너 안쪽에서 엔트리 포인트로 설정한 옵션에 suspend=y 옵션이 있기 때문에 원격에서 디버거가 붙을때까지 자바 프로그램이 실행되지 않고 대기하고 있다는 점이다.
Eclipse Remote Debugger 설정
이클립스에서도 비슷하게 리모트 디버깅 기능을 제공한다.
[Run] -> [Debug Configuration]으로 들어가서 [Remote Java Application] 항목에서 우클릭을 한다. "New Configuration"을 선택하면 새로운 리모트 디버깅 설정이 생긴다.
Host 항목에 localhost를 입력하고 Port 정보에 5005를 입력한 다음 "apply" 버튼을 클릭하고, 브레이크 포인트를 설정한 다음 로컬에서처럼 디버깅을 시작하면 된다.
- Total
- Today
- Yesterday
- 청양고추
- pycharm
- hadoop
- nf_conntrack
- 리눅스
- linux
- MacOS
- okhttp
- 깃허브
- 베란타 텃밭
- 지킬
- 화분 버리기
- GitHub
- 상추
- Jekyll
- 파이참
- 파이썬
- 하둡
- 텃밭
- 자바
- java
- Python
- 도커
- 화분
- InterlliJ
- docker
- 상추 재배기
- 베란다 텃밭
- 고추
- monitoring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |