피드로 돌아가기
Dev.toInfrastructure
원문 읽기
JDWP 프록시 도입을 통한 iOS/Android Java 온디바이스 디버깅 구현
On-Device Debugging And JUnit 5
AI 요약
Context
Java/Kotlin 기반의 크로스 플랫폼 프레임워크인 Codename One은 ParparVM을 통해 C 코드로 변환되어 실행됨. 기존에는 Java 소스 레벨의 Breakpoint 설정과 객체 상태 조사가 불가능했으며 특히 iOS 디버깅 시 Xcode와 Mac 환경이 필수적인 제약이 존재함.
Technical Solution
- JDWP(Java Debug Wire Protocol) 표준을 채택하여 IDE와 디바이스 간의 인터페이스 통일
- iOS 환경의 제약을 극복하기 위해 개발자 머신에 CN1 Debug Proxy를 배치한 중간 계층 구조 설계
- Proxy가 JDWP 신호를 CN1 전용 와이어 프로토콜로 변환하여 ParparVM의 구조체 레이아웃을 Java 필드 값으로 매핑
- Android의 경우 Dalvik/ART의 내장 JDWP 지원을 활용하여 adb 포워딩을 통한 직접 연결 구조 적용
- JUnit 5 기반의 JavaSE 시뮬레이터를 도입하고 EDT(Event Dispatch Thread) 제어 어노테이션을 통해 UI 상태 테스트 자동화 구현
실천 포인트
- 서로 다른 런타임 간의 상태 동기화가 필요할 때 JDWP와 같은 표준 프로토콜 기반의 Proxy 패턴 검토 - UI 테스트 시 @RunOnEdt와 같은 스레드 제어 어노테이션을 활용해 비결정적 테스트 환경 제거 - 플랫폼 종속적인 툴체인(Xcode 등) 의존성을 낮추기 위한 원격 빌드 및 프로토콜 변환 계층 설계 고려