이슈 사항
Dev, PJ, QA, Stage 환경에서 이슈 발생시 원인 파악을 위해 보통 Local 환경으로 해당 이슈를 가져와서 디버깅을 진행
해당 문제를 Local에서 재현 및 원인파악을 위한 리소스가 적지 않게 필요
문제가 발생한 환경에 직접 붙어서 디버깅을 하고 싶다는 니즈를 해결하기위한 방법을 고민
JDWP(Java Debug Wire Protocol)와 설정
Java 에서는 JDWP를 통해 디버거와 JVM간 통신을 지원해준다.
1. 원격 디버깅 설정
원격 디버깅을 활성화하려면 JVM 옵션에 디버깅 관련 설정을 추가해야한다.
Java8과 Java9 이상에서의 설정 방식이 약간 다르다.
Java 실행 옵션에 아래 옵션을 추가한다.
Java 8
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar {jar파일명}.jar
Java 9 이상
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar {jar파일명}.jar
옵션 설명:
- transport=dt_socket: TCP/IP 소켓 통신을 사용.
- server=y: JVM을 디버깅 요청을 기다리는 서버로 설정.
- suspend=n: 애플리케이션 실행을 중단하지 않고 디버거 연결을 기다리지 않음.
- address=5005: 디버깅에 사용할 포트 번호.
2. 인텔리제이 디버깅 설정
디버그 설정 추가:
Run > Edit Configurations로 이동.
+ 버튼 클릭 > Remote JVM Debug 선택.
디버깅 포트 설정:
Host: 원격 서버의 IP 주소.
Port: JVM 디버깅 포트 (예: 5005).
디버그 연결:
디버그 설정 저장 후, 디버그 버튼 클릭.
3. 요약 정리
- JVM을 디버깅 모드로 실행하여 포트를 오픈
- 로컬 디버깅 도구에서 원격 애플리케이션의 IP와 포트로 연결
- 디버깅 도구에서 코드에 브레이크포인트를 설정
- 브레이크포인트가 도달하면 애플리케이션 실행이 중단되고, 디버깅 도구에서 상태를 확인
참고 및 고려사항
원격 디버깅은 보안 문제가 발생할 수 있으므로 신중히 설정해야 합니다.
- 포트 제한: 디버깅 포트는 방화벽으로 보호하거나 VPN 내부에서만 접근 가능하도록 설정합니다.
- 공개 포트 사용 금지: 디버깅 포트를 인터넷에 공개하지 않도록 해야 합니다.
실제 환경에서의 사용
- 원격 디버깅은 주로 테스트 환경이나 스테이징 환경에서 사용하며, 프로덕션 환경에서는 비활성화하는 것이 일반적입니다.
'Java' 카테고리의 다른 글
[Java] JVM의 한계와 GraalVM 살펴보기 (1) | 2024.12.16 |
---|---|
[Java] JVM Warm up - if(kakao)2022 (1) | 2024.11.11 |
[JAVA] 회원 시스템 분산 트랜잭션(JTA) 처리와 성능 이슈 해결 (1) | 2024.10.31 |