티스토리 뷰

study/Java

Socket과 RMI

알 수 없는 사용자 2008. 8. 11. 00:00

Socket과 RMI의 속도 차이는 아마 직렬화 때문에 발생할 것 같습니다.
보통 객체의 Serialization (직렬화)는 오버헤드가 크고 속도가 느립니다.
Socket은 직접 프로그래밍을 하기 때문에 데이터를 넘겨 줄 때 필요한 데이터만 넘겨줄 수 있습니다.
또는 최적화해서 넘겨줄 수도 있겠고요. 그렇지만 RMI는 내부적으로 전달되는 모든 데이터를 직렬화
해서 넘겨 주고, 프로그래머가 직접 최적화하기 어렵기 때문에 Socket에 비해서 속도가 느릴 것으로 보입니다.
그리고 받는 쪽에서도 직렬화 된 스트림을 복구해서 다시 객체로 변환해야 하기 때문에 더욱 오버헤드가
커질 것으로 보입니다.
흠... 제 생각에는 별로 크지 않은 문자열 및 파라미터를 넘겨줄 경우에는 RMI를 써도 무방할 것 같습니다.
(물론 속도에 관한 부분입니다. 보안 등은 다른 문제죠... ^^a)
그렇지만 처음 질문하신 것 처럼 한 10 메가 정도 되는 파일의 내용을 넘겨주거나 하는 경우에는 Socket을
가지고 직접 코딩하시는 것이 좋지 않을까 합니다.
그리고 제 생각이지만 RMI를 사용하기 위해서는 앞에서 말한 것처럼 객체 직렬화를 해주어야 합니다.
즉 보내고자 하는 내용이 모두 객체로 만들어져 있어야 한다는 얘기가 되겠죠. 그 얘기는 한 10메가 정도 되는
바이너리 파일을 보내고자 한다면 객체 내부에 바이트 어레이로 한 10메가 정도 되는 공간을 잡고 있어야 된다는
얘기가 되지 않을까 합니다. 그리고 RMI에서 직렬화를 위해서 또 메모리를 사용할 것이고요.
그렇게 되면 꽤 큰 메모리 오버헤드를 발생시킬 것 같습니다.
그렇지만 소켓의 경우에는 직접 코딩을 하기 때문에 파일에서 읽으면서 바로 전송을 할 수 있기 때문에
아무래도 메모리 소비를 적게 할 것으로 보여집니다.
무조건 한 번에 하나의 파일만을 보낸다는 조건이 있다면 상관 없겠지만 보내고, 받는 쪽에서 서로 Multi-Thread로 동작을
한다면 메모리 문제도 고려를 해보셔야 하겠죠...
^^a  그렇지만 나중에 기능을 확장하거나 빨리 쉽게 하려면 RMI를 쓰는 것이 훨씬 편한 일이 되겠죠...
 
///////////////////////////////////
RMI는 웹에서도 쓰나요?
 
 
첫째, 양쪽이 모두 자바 기반이어야 하는가.
java 1.3 미만 버젼에서는 JRMP 기반의 rmi를 지원하였으나 1.3 이상 버젼부터 rmi over iiop를 지원하고 있습니다. 즉 전에는 양쪽이 모두 자바기반이어야 했으나 1.3이후로는 한쪽은 자바 다른 한쪽은 CORBA 기반이면 된다는 것이죠. 그러나 님은 아마 양쪽을 모두 자바로 구현하실 생각인 모양이니 이는 그리 큰 문제가 되지 않겠죠.
 
둘째, 양자 사이에 firewall이 존재하는가.
버전별 차이인지는 모르겠지만 rmi는 소켓통신을 한다고 합니다. 즉 양 서버사이에 firewall이 있는 경우에 동작하지 못한다는 것이죠. 그런데 인포북의 JAVA Networking Programing이라는 책을 보면 rmi가 HTTP를 이용하여 통신을 할 수도 있다고 합니다. 그렇다면 firewall이 있어도 문제가 되지 않겠죠. 상세한 사항은 해당 책을 보시기 바랍니다.
 
세번째, 동기화의 요구
분산환경은 시스템 내부의 문제 뿐만이 아니라 네트워크와 같은 시스템 외부적인 사항에도 큰 영향을 받습니다. 만양 두 서버가 같은 건물안에 있다면 그리 큰영향을 받지는 않겠지만, 그렇지 않다면 동기화/비동기화의 문제는 심각하게 고민해봐야 할 것입니다.
 
네번째, 모니터링의 요구
서로 분리된 서버에서 메소드를 호출했을 때, 상대방 서버가 예상치 못한 상황으로 셧다운 되거나, 혹은 크래쉬되었을 경우에 그에 대한 적절한 조치를 이쪽 서버에서 마련해야 한다는 것입니다.
 
다섯번째, 퍼포먼스의 문제
자바의 분산환경은 rmi, rmi-iiop, ejb가 있습니다. 앞으로는 SOAP를 이용한 웹서비스도 있겠지요. 그 수행속도는 rmi가 가장 빠르고, 그다음이 rmi-iiop, ejb의 순이라고 합니다. 내부구조를 이해하신다면 아마 동의하실 겁니다.

출처 : Tong - 인사개님의 IT용어정리통