brunch

You can make anything
by writing

C.S.Lewis

by 웰콤반 Oct 26. 2016

Deview 2016 day2 Review

#네이버 #경험공유 #기술공유 

 모든 분야의 뉴비들에게, 누군가의 경험과 시행착오의 공유는 매우 큰 도움이 된다. DEVIEW 2016'excellence · sharing · growth'라는 문구를 홈페이지 전면에 내세우고 좋은 성과를 내고 있거나 의미 있는 경험과 고민의 과정을 공유했다. 네이버가 주최하는 기술 공유 컨퍼런스인 만큼, 참가 등록부터 양일 모두 1분 이내에 마감될 만큼 관심이 높았고 컨퍼런스 각 세션의 발표 품질도 높았다.



데이터 시각화


대규모 시스템 시각화 - <라비스>는 복잡한 서비스를 어떻게 한눈에 보게 만들었는가 - Naver


 네이버는 일 수억 건의 쿼리를 수십억 건의 결과로 대응해야 하고, 이를 위해서 수많은 검색 서버와 시스템으로 대응을 하고 있지만, 이 대규모 시스템 체계를 한눈에 볼 수 있고 관리할 수 있는 시스템은 없었다고 한다. 화이트보드에 일일이 그리고 새로운 서버 투입 시마다 새로 고쳐야 하는 한계점에 봉착하자, 대규모 시스템을 시각화를 자동화하고자 했다. 네이버는 일을 안 했으면 안 했지, 시작하면 정말로 '제대로' 해낸다고 생각한 대목은 이 시각화를 어느 정도 뷰와 성능을 내는 것에 만족하지 않고, webgl과 three.js를 이용하여 '3d'로 구현했다는 점이다.

cone tree 형태의 대규모 서버 시스템 시각화

- 시행착오

흔히들 그래프 시각화를 위해 사용하는 d3.js, sigma.js 는 서로서로 중첩되는 대규모 시스템의 관계도를 충분히 담아내지 못했고 속도도 매우 느렸다고 한다. 그래서 현재 매우 활발히 개발 진행 중인 three.js를 사용하게 되었는데, three.js 는 javascript 3d graphic library이고 브라우저에서 WebGL을 사용하기에 매우 편리하다고 한다.

 처음에 사용했던 그래프를 그리고 순회하는 알고리즘은 Force Directed Layout 은 도입 이후 계속해서 개선했으나 문제점이 있었다. 노드와 노드 사이의 힘(Force)이 평형을 이루는 순간을 그래프로 그리는 이 알고리즘의 한계는 매우 느리다는 점과 트리 형태의 레이아웃을 그리기 어렵다는 점이었다.


- 문제 해결

보유한 데이터는 노드와 노드 간 연결 고리가 있는 '그래프' 형태였지만, 서버 간 상하관계의 효율적 시각화를 위해 그래프를 트리 구조로 변형해야 했고 이를 위해 NAVERTRIC layout이라는 알고리즘을 자체 개발했다. 이를 위해 자식->부모 에지를 제거해서 그래프-> 트리 간 구조를 변환했다.

많은 하위 관계를 가지는 시스템 구조를 원뿔 형태로 그리고 이 원뿔을 다시 트리 형태로 그리기 위해서는 크기가 다른 원의 중심을 원의 둘레에 포함시키는 최소한의 원을 그려야 했고, 이는 중-고등학교 때 배우는 두 원 중심 사이의 거리를 적용하여 문제를 해결했다. 그 결과 노드:노드 간 그래프 관계만을 가지던 데이터로 시스템 간의 상하 관계를 반영한 cone tree 구조의 시각화에 성공했다.

출처 : http://www.slideshare.net/deview/211-67605828

네이버 검색 시스템은 이렇게 시각화된 이후 용이하게 서버 요청 건수 조회, 담당자의 이름으로 담당 서버 검색, 모니터링 시스템과 연동하여 지표도 볼 수 있다고 한다. 마지막 QnA 시간 질의응답에 따르면 3-4 개월 정도 구축 기간이 들었다고 하니, 그 효과에 대비하면 아주 효율적이고 의미 있는 작업이었다고 생각되어서 가장 기억에 남는 세션이었다.




딥러닝


 네이버뿐만 아니라 타 회사 개발자들의 세션에서도 가장 인기 많았던 세션은 딥러닝 관련 세션이었다. 요즘 핫하기도 하고, 경험 공유가 가장 재밌고 도움이 될 수 있는 분야이기도 했다.


딥러닝을 활용한 이미지 검색: 포토 요약과 타임라인 - Naver


네이버 이미지 검색 개편에 사용된 데이터 딥러닝을 활용 사례를 간단히 공유하고, 이를 잘 표현하기 위해 검색 인터페이스를 개선한 내용과 그 고민 과정을 공유했다.


흥미로웠던 발표는 인물 이미지 검색 결과를 'event' 중심으로 클러스터링 하여 타임라인 형식으로 서비스하는 것이었다. 인물의 이미지 검색 결과는 중구난방으로 퍼져있는 이미지 결과를 '언제, 어디서, 누가'를 가지는 '이벤트' 중심으로 군집화하여 인터페이스도 구성한 것이 서비스적으로나 기술적으로나 꽤 괜찮은 시도라고 생각한다. 


이미지는 포토뉴스에서 추출하고 형태소 분석을 통해 기사 내용 중 의미 있을 것으로 추정되는 명사구를 추출하여 이미지 데이터를 전처리한다. 같은 이벤트에서 발생한 이미지라면, 장소와 그에 대한 text description 이 같을 것이라는 전제 하에, 'BagOfWords' 모델링 기법과 본문에서 추출한 distance vector 값을 학습해 이벤트를 분류했다. Visual Feature 에 대한 클러스터링은 시도하지 않은 것은 아니지만, 비슷한 인물의 이미지 (예를 들면 시상식에서의 턱시도 차림의 많은 남자 배우들)의 경우 성능 저하가 발생하여 Text가 하지 못한 Outlier 제거에만 활용했다고 한다. 




이 외에도 네이버 블로그, 폴라 등 다양한 서비스에 공통적으로 쓰이는 통계 시스템 구축 경험 공유, 쿠키런 AI 개발 과정 공유, forsquare에서 고민했던 비용을 절감하면서 data를 효율적으로 관리하고 모니터링하는 방법 공유 등 흥미로운 세션이 많았다. 결과에 집중하기보다는, 직접 고민하고 개발한 개발자가 '공유'를 하는 자리여서 개인적으로 매우 도움되고 자극이 되는 즐거운 시간이었다. 



매거진의 이전글 재밌는 정규 표현식
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari