JSONObject 사용

OpenRTB 연동시 body 에 json 형태로 오는 데이터를 읽을 때 JSONObject를 사용합니다.

3년전 전체 솔류션에 대한 검증을 할 때, 총 3개의 JSON을 사용하는 라이브러리가 존재했으며,
그 중 가장 건드리기 어려운 레거시 코드에서 사용하는 JSONObject를 제외하고, 나머지를 전부 JSONObject으로 변경하는 작업을 하였습니다.

해당 작업을 진행한 이유는,
라이브러리를 무분별하게 사용하지 않고,
소스에 대한 수정과 객체에 대한 직관성을 높이는 게 좋아보였기 때문에, 개인적인 독단으로 일을 저질렀던 건데, 그 때 당시에는 레거시 코드를 못건드리다보니 속도와 성능에 대해서 확인하지 못했던 부분이 있습니다.

문제점

OpenRTB 시스템은 100 ms 안에 응답하는 것을 목표로 합니다.
이번 pinpoint 로 검증해본 결과 JSONObject의 경우 간혈적으로 지연이 발생했습니다.

그래서, 실제 서로간의 입찰요청(Bid Request) 와 입찰(Bid Try)를 비교하여, 해당 데이터의 속도를 1000만건 돌려보았습니다. Gson 의 경우 해당 데이터가 완료되는 데 35초 가량 걸린 반면, 기존의 JSONObject의 경우 73초 가량이 더 걸리는 것으로 확인되었습니다.

다른 라이브러리를 가지고 여러가지 경우의 수를 확인했을 때 GSON 이 가장 좋은 것으로 파악이 되었으며, 결론적으로 여러 라이브러리의 평균을 인터넷으로 찾아보는 것도 좋지만, 자신의 솔류션에 맞춰서 사용해야한다는 것을 다시금 느꼈습니다.

2018-06-18 일 기준 현재 전체 속도가 10ms ~ 15ms 로 매우 안정적으로 변경되었으며, 간혈적으로 300ms ~ 500ms 로 띄는 현상이 Json-lib 에서 발생하지 않는 것을 확인했습니다.


참조