
백엔드
JVM 프로세스 내 Python 임베딩 전략
두줄요약
JVM 프로세스 안에 Python을 임베딩하는 Jep 도입 사례를 다루었습니다. 스레드 제약, GIL, 네이티브 라이브러리 경로 문제와 대응 방법을 정리했습니다.
문제 상황
- JVM 기반 백엔드에서 Python 수치 연산 자산을 재작성 없이 통합해야 하는 상황
- 선박 데이터 해석·성능 저하 산출 로직이 Python과 C 확장에 의존해 Java 대체 구현이 불가한 제약
원인 분석
- 단일 프로세스 내 JVM과 Python이 공존하며 메모리·스레드·GIL 제약이 동시에 작동
- Jep 인스턴스가 스레드 전용 tstate를 보유해 공유 재사용이 불가하고, 네이티브 라이브러리 경로도 환경 기본값에 의존
- SharedInterpreter 사용 시 sys.modules와 sys.path가 공유되어 전역 상태 오염 가능성 존재
해결 방법
- 프로세스 분리 대신 Jep의 인프로세스 임베딩을 선택해 네트워크 왕복과 직렬화 비용 제거
- 인스턴스 재사용을 폐기하고 try-with-resources 기반의 작업 단위 생성·해제로 스레드 제약 대응
- -Djava.library.path 명시와 모듈 import 범위 조정으로 배포 환경 의존성 완화

