개발일기/Spring + Unix Domain Socket

[Spring + UDS] 2. JUNIXSocket

ignuy 2024. 8. 8.

 

GitHub - kohlschutter/junixsocket: Unix Domain Sockets in Java 7 and newer (AF_UNIX), AF_TIPC, AF_VSOCK, and more

 

GitHub - kohlschutter/junixsocket: Unix Domain Sockets in Java 7 and newer (AF_UNIX), AF_TIPC, AF_VSOCK, and more

Unix Domain Sockets in Java 7 and newer (AF_UNIX), AF_TIPC, AF_VSOCK, and more - kohlschutter/junixsocket

github.com

JUNIXSocket 라이브러리는 자바 환경에서 Unix Domain Socket과 다른 AF, PF 기반 통신을 활용하기 위해 개발된 Java/JNI 라이브러리이다. Github readme에 적혀있기를(어느 정도 뽕이 들어갔다) Java 생태계에서 가장 AF_UNIX socket을 탄탄하게 구현하였고, Java 8버전 이상의 버전을 모두 지원한다. 뿐만 아니라, java.net.Socket, java.net.SocketChannel등의 Java Socket API와 NIO를 둘다 지원하며 stream과 datagram도 동시에 지원, file description을 보내거나 받기도 가능하다.

반대로 JNI를 사용하여 UNIX 계열에서만 지원하는 시스템 콜을 사용하기 때문에 시스템 종속성이 생기는 단점은 어쩔 수 없이 감수해야 한다.

더 자세한 라이브러리의 특징과 활용법은 github과 docs를 참고하자.

Tradeoff…

1. JNI 라이브러리가 추가되면서 어쩔 수 없이 플랫폼 종속성이 생겼다. 일단 프로젝트가 여러 OS를 지원할 필요는 없고 현재 사내에서 주로 활용하는 Alpine Linux(3.20.0) 환경에만 집중하면 되기 때문에 운영에 큰 문제는 없을 것 같지만 개발환경에서 Build test나 실행이 안된다. 이런 테스트를 위해서 spring에서 활용할 수 있는 설정들을 찾아봐야 할 것 같다.

2. Third Party 종속성 - 현재 Java 21버전을 선택하긴 했는데 java 최근 버전에 대한 라이브러리의 지원이 완벽하게 이루어질지 확실하지 않다. 아직 프로젝트 전체적인 코드 분석이 안 끝나서(C 파일이라 읽기가 고통스럽다.) 지켜보다가 문제가 생기면 Java 17버전으로 내리는 방법을 고려해볼 것이다.

댓글