원래 출처는 http://blog.naver.com/kaizer0720/80042740822 이며, 웹서비스가 바이너리 데이터 전송에 적합한지에 대한 의문점과 적합하지 않다면(적합하지 않다고 짐작했기에) 그 해결방안이 무엇인가에 대해 검색을 하다가 찾은 글입니다. 일반적으로 쉽게 이해할 수 있는 글인데요, 그중에 퍼포먼스에 대한 부분만 간단하게 나름대로 정리해 간추렸습니다.
웹서비스와 퍼포먼스
웹서비스는 SOAP 프로토콜을 사용하므로 SOAP 포로토콜이 가지고 있는 문제를 그대로 가지고 있다고 할 수 있습니다… 해서, SOAP 패킷에 대한 SOAP Envelope에 대한 압축을 푸는 시간과 SOAP이 사용하는 데이터 표현인 XML에 대한 파싱에 매우 많은 시간이 소모됩니다. 이를 정리하면…
- SOAP 패킷에서 SOAP Envelope에 대한 압축을 포는 것에 많은 시간이 소모된다.
- XML 파서를 이용하여 SOAP Envelope에 있는 XML 파싱에 많은 시간이 소모된다.
또한 앞에 언급한 XML은 실제 데이터를 기술하는 메타 데이터(Tag Element)가 붙음으로 중복적이며 비효율적이며 최적화에 대한 여지가 매우 적습니다.
특히 앞서 언급한 바이너리 데이터의 경우 SOAP은 원래의 하나의 바이트가 표현할 수 있는 256개(ASCII 코드의 개수)를 XML이라는 텍스트 포맷으로 표현하기 위해 화면상에 표현할 수 있는 것들로만 간추린 64개의 문자로 인코딩을 함으로써 원본의 크기보다 4배로 커지게 된다는 극심한 문제점이 발생합니다. 즉, 데이터의 크기가 커진다는 문제와 64개의 문자로 인코딩하는 연산이 필요로 합니다. 마찬가지로 이러한 문제는 서버측에서만 발생하는 것이 아니라 클라이언트 측에서도 4배로 커진 데이터를 받아 다시 원본으로 디코딩해줘야 합니다. 이를 정리하면…
- 서버측에서 바이너리 데이터에 대해서 Base64로 인코딩하는 연산이 필요하다.
- 인코딩 결과 원본의 크기에 대해 4배로 커진다.
- 클라이언트 측에서 서버가 보낸 데이터를 다시 디코딩하는 연산이 필요하다.
그렇다면 이에 대한 해결책이 무엇일까.. 고민하게 됩니다. 실망스럽게도… 바이너리 데이터에 대한 Base64 인코딩 결과를 압축을 해서 데이터의 크기를 줄여 클라이언트로 보내라는 것이 전부입니다. 그렇다면 데이터의 크기는 줄어드는 장점은 있으나… 서버측에서 데이터를 인코딩하고 다시 압축한 후에 클라이언트로 전송하여 클라이언트에서 압축을 풀고 데이터를 디코딩하는 복잡한 연산을 필요로 하게됩니다. 사실 SOAP의 Envelope에 대한 문제점은 무시하고라도 인코딩과 디코딩.. 그리고 원본보다 4배(평균) 커진다는 문제점이 가장 염려스러운 부분이긴 합니다.
대용량 또는 작은 용량의 바이너리 데이터 전송에 웹서비스가 접합한 기술인지… 여러분은 어떻게 생각하십니까?
잘은 모르겠지만, 플랫폼간의 데이터 교환을 위해선 최선(?)의 표준이니..;;
바이너리인만큼 얼마나 큰 데이터가 오갈지는 감이 잘 안서네요
보안을 위해서 암호화도 고려대상이겠구요.
지금 생각엔 부분적으로 쓰는게 나을거라는 생각밖엔;;
오 빠르고 방가운 댓글, 로컬에서 테스트해 보았습니다. 웹서비스 측에서 1MB 바이너리를 클라이언트의 요청에 의해 보내주는데 평균 1.5초 소요됩니다. 소켓이라면 이거 실시간입니다… 로컬이니까요. 1.5초가 바로 인코딩과 디코딩에 걸리는 시간입니다… 좌절입니다. ^^;
혹시 좋은 대안을 알고계신지?
어제 테스트해 본것인데, 1MB를 Base64로 인코딩하고 디코딩하는데만 걸리는 시간이 1.5초, 2M는 6.3초네요. 이거 너무 한거 아닙니까? 웹서비스를 통한 바이너리 전송… 최악이 아닐지…
음. 웹 서비스는 오픈api / 다기종 간의 호환에 조금더 중점을 둔게 아닐까 생각 됩요. 아무래도 압축을 하고 인증키를 도입하고 각종 보안 부분을 적용하게 되면 효율은 떨어지는게.. 그래도 최근에 플렉스를 하면서 웹 서비스와 연동 되는걸 보면서, 속도의 압박 보다는 여러가지 플랫폼과 연동 부분이 더 매력적인듯 해요.
그렇지! 웹서비스를 통해 다양한 클라이언트에서 활용될 수 있는 서비스.. 여러가지 플랫폼과의 연동도 같은 맥락이구.. 속도를 희생해서 사용범위를 넓혔다는걸 왜 잊고 있었나 싶다.. 난 너무 퍼포먼스에 목숨 거는 습관이 있나봐~
근데 아이러니 하게도 국내 실정은 비쥬얼이나 퍼포먼스에 너무 중점을 두고 있는듯, 비단 예로 노트북을 봐도 소니의 스팩과 삼성의 스팩만을 봐도 국내 노트북은 테스트탑의 cpu와 비슷한 스팩이 없음 사지 않을려고 하는, 노트북을 데스크탑처름 쓰고 싶어 하는 욕심..
모.. 여러가지가 문제가 있을듯.. 해요.. ^^.. 적다 보니 무지 두서 없음..
아마도… 한국의 사회상으로 설명하면 오버일지도 모르겠지만…
외모를 중시하는 한국, 빨리빨리 문화… 뭐 이런게 영향을 주지 않았나 싶당.. 외국은 표준에 더 중점을 두는것같다는 생각이 드는데… 모 그래도 이쁘고 빠르고 하면 좋잔아~ ^^