피드로 돌아가기
Dev.toInfrastructure
원문 읽기

Shared Memory 기반 In-Process 통신으로 Java/.NET 간 제로 네트워크 홉 달성
Anatomy of a Shared Memory Bridge: How .NET Calls Java In-Process
AI 요약
Context
미세 제어 수준의 빈번한 호출과 낮은 Latency가 요구되는 Java/.NET 통합 환경에서 일반적인 API 방식의 오버헤드 발생. 네트워크 홉과 JSON Serialization으로 인한 성능 저하를 극복하기 위해 동일 프로세스 내 메모리 공유 구조 필요.
Technical Solution
- Shared Memory Transport 채택을 통한 동일 프로세스 내 런타임 공유로 통신 지연 시간 최소화
- Proxy Assembly(bridgeDemo.dll)를 통한 Java 클래스의 .NET 타입 래핑 및 인터페이스 노출
- JVM Architecture와 .NET Build Target(x86/x64)의 엄격한 일치를 통한 메모리 정렬 및 Runtime Crash 방지
- App.config 기반의 JVM Path 및 Classpath 동적 정의로 .NET 프로세스 내 Java Runtime 로드 제어
- BCEL(Byte Code Engineering Library) 도입으로 Shared Memory 전송 시 필요한 바이트코드 조작 지원
- Java 8 이하 버전의 Classloader 충돌 해결을 위한 boot classpath(/p) 우선 로드 전략 적용
실천 포인트
1. .NET Build Target(AnyCPU/x64/x86)과 jvm.dll 버전의 아키텍처 일치 여부 확인
2. 모든 Bridge DLL을 실행 파일(.exe)과 동일 경로에 배치하여 런타임 로드 경로 단순화
3. 서비스 계정이나 ASP.NET 환경에서 Java Class 및 JAR 폴더에 대한 Read & Execute 권한 부여
4. Java 8 이하 환경에서 ClassNotFoundException 발생 시 boot classpath 적용 검토