Community

기존 자바 레거시 프로세스에서 신규 파이썬 프로세스의 기능을 활용하고 싶으신 건데요, 이렇게 다른 프로세스간 통신을 IPC(프로세스간 통신)라고도 하고, RPC(원격 프로시져 콜)라고도 부릅니다.

기존 자바 레거시 프로세스에서 신규 파이썬 프로세스의 기능을 활용하고 싶으신 건데요, 이렇게 다른 프로세스간 통신을 IPC(프로세스간 통신)라고도 하고, RPC(원격 프로시져 콜)라고도 부릅니다. 파이썬으로 구동하실 서비스를 작은 서비스라고 본다면, 이걸 하나의 마이크로서비스라고 봐도 되고요. 이름은 다양한데, 하고자 하는 일은 같습니다. 다른 프로세스의 기능을 써서, 현재 프로세스의 어떤 일을 하고 싶은 겁니다. IPC나, RPC를 위해 다양한 프로토콜이 쓰이고 시대에 따라 유행이 변하고, 아쉽게도 대동단결한 솔루션은 없는 것 같습니다. 앞으로도 구체적 구현의 유행은 계속 변할 것 같아요. 지금 하시는 일로 볼 때, 가장 간단하게는 자바 레거시 프로세스가 실행중인 동일 머신에서 파이썬 프로세스를 내부 프로세스로 실행(fork)하고, STDIN/STDOUT으로 파이프 처리해서 긴 문자열을 주고받는 게 제일 간단할 걸로 보입니다. 이 경우, 매번 파이썬 프로세스가 실행되고 종료되는 과정이 발생하는데, 여러 이유로 그게 불편하다면, 지금 고민하시는 것처럼, 파이썬 프로세스도 로컬이든 리모트든 서버로 띄워두고, 두 프로세스 간 통신을 해야겠지요. 여기에 현대에 가장 흔한 방식은 HTTP 통신일 것 같습니다. 이 경우는 REST라고 할 것도 없이, POST /question 같은 주소를 파이썬 프로세스에서 웹 서비스로 처리해주고, 자바 서버입장에서는 HTTP클라이언트의 입장으로 POST요청 본문에 text/plain이나 application/octet-stream으로 담아 보내면 될 것 같습니다. 해당 요청에 대한 처리가 잘 끝나고 나면, 응답을 결과 텍스트 그대로 돌려주거나, 여타 메타 데이터를 포함한 JSON 값으로 돌려주면 됩니다. 그 외에도, 프토토콜 버퍼를 쓰는 gRPC같은 것도 있고, 찾아보시면 여러가지 나올 것 같습니다. 참고로, 흔히 말하는 소켓 통신은 흔히 TCP통신을 말하는데, 이는 현대의 모든 장비나 언어가 다루고 있기 때문에, 레거시 자바에서도 당연히 구현할 수 있습니다. 하지만 앞 뒤로 여간 귀찮은 일이 따라오는 게 아니니, 꼭 필요한 상황이 아니라면 피하는 것이 낫겠습니다. 어떤 이유로든 HTTP같은 L7 레이어에서의 통신이 어려울 경우에만 로우레벨로 내려가는 게 맞겠죠. 찾고자 하는 키워드를 제시해드렸다면 좋겠네요.

알림

알림이 없습니다