if kakao, 네이버의 데뷰처럼 카카오의 개발자 컨퍼런스이다. 웹 서핑 중 우연한 기회에 배너를 클릭해서 신청하고 팀 내에 공유 했는데, 결국 나 혼자 참가하게 되었다.
서울 촌놈인지라 오랜만에 코엑스에 나가니 기분이 매우 설렜다. 출근 하는 것 보다 더 일찍 일어나 준비를 하고 9호선을 타고 봉은사역에 내렸다. 어릴 적 부터 친하게 지내던 친구가 봉은사역으로 출퇴근 할때는 그냥 그런가보다 했는데 10시 컨퍼런스여서 조금 여유 있게 출발했는데도 9호선은 많은 사람들로 숨이 막혔다.
키노트가 시작하기 약 30분 정도 전에 도착하였는데 이미 많은 참관객으로 북적거렸고, 참가기념품만을 챙기고 가는 사람도 더러 있었다. 그랜드볼룸 홀로 가는길에는 컨퍼런스 명인 if kakao 사인이 입구를 장식하고 있었고, 많은 카카오 프렌즈들이 포토존을 이루고 있었다.
대학교 동기, 이직한 회사 선배들이 카카오에서 근무 중인지라 컨퍼런스 참가하기 전날에 미리 연락을 하고 갔는데 다행히도(?) 그들 모두 컨퍼런스에 참가하여 잠깐 얼굴을 볼 수 있었다. 세션 중간중간에 커피를 마시거나 밥을 먹으면서 이야기를 나눌 수 있었는데 클라우데라 기반의 빅데이터플랫폼에서 여러 서비스를 개발하고 있었는데, 내가 속한 조직과 여러가지로 조직의 구성이 달라서 조금은 신선한 충격을 받을 수 있었다.
전체적으로 카카오의 앞으로의 방향성을 공유하고 기술경쟁력을 과시하는 모습이 미래에 대한 자신감과 시장 전체의 분위기를 잘 느낄 수 있게 해주었다. 그 중 인상 깊었던 몇 가지의 세션들을 공유하고자 한다.
1. 키노트 Keynotes (신정환 CTO, 김병학 AI Lab 부사장)
- 기술이 세상을 바꾼다는 것이 카카오의 기술 철학이다. 그리고 세상을 바꾸는 그 기술이 엄청난 기술 혁신을 의미하는 것은 아니다. 카카오는 일상에서의 기술서비스를 제공하기 위해 노력하고 있다. 그러기 위해서는 중요한 것이 안정성과, UX이다.
- 이와 관련하여 이번 컨퍼런스에서는 크게 4가지 아젠다로 구분할 수 있다.
안정성
광고플랫폼, 코트렌 활용법, 클라우드, 빅데이터, 인공지능 등 일반 서비스에서 안정성을 매우 중요한 요소이다.
UX
카카오에서는 기술과 UX가 하나의 조직으로 일하고 있다. 보여질 모습을 함께 다루는 것이 중요하다고 생각하기 때문이다.
Data
이것은 안정성과도 연관되어 있으며 카카오에서는 많은 데이터를 보안정책에 따라 보관하고 카카오 네비 최적분석, 카카오i 음성인식 등에서 활용하고 있다.
Next Innovation
새로운 기술, 새로운 패러다임에 대한 내용들도 다룬다. (AI / block chain)
- 카카오 미니는 카카오 i 와 연동하여 서비스 하고 있는 서비스이다. 카카오 미니는 단말기에 해당되며, 카카오i 는 실제 음성처리를 위한 엔진이다. 스마트 스피커 사업을 통해서 많은 발전을 이룰 수 있었고, 카카오 i 오픈빌더, 카카오 i의 확장성등을 확보할 수 있었다.
알고리즘과 데이터 모두 중요하다. 출시 이후로 2억건 이상의 데이터가 입력되었다. 하루에 30만건의 음성명령을 처리한다. 많은 학습 끝에 현재 음성인식 실패율 5.9% 이다.
* 카카오 OpenBuilder : 서비스를 인공지능 플랫폼화 하는 것이다. 처음에 15개에서 40개의 서비스를 제공하고 있다. 사용성이 쉬워 확장성이 늘어났다. (날쎄, 운세, 음악, 축구, 뉴스 등등....) 카카오톡과 카카오 미니를 연동하여 카카오 오픈빌더의 기능을 포함..
* 카카오i Insight : 기존에 구축된 카카오 i에 전체를 서비스에 넣어서 모든 서비스를 음성인식처리할 수 있도록 한다.
* 카카오i Pay-Point : 자동차 / 집에서의 사용
자동차 : 음악, 톡, 네비 등.. (카카오 네비에서 카카오 톡을 보내줄 수 있도록 )기반으로 수행한다.. 플랫폼끼리의 연동을 수행한다. 현대/기아와 파트너쉽을 통해서 현재 네비게이션에 카카오네비를 넣을 예정이다. 년도에 출시될 예정..
집 : 한국의 환경은 대부분이 아파트가.. 아파트는 빌트인이 대부분이다. 빌트인된 가구들을 제어할 수 있어야 한다. 건설/포스코건설과의 파트너쉽을 통해서 빌트인된 것들을.. 추가로 카카오 홈을 통해서 빌트인 외의 주택에서도 사용할 수 있도록 한다.
이 두가지를 플랫폼화 시켜 카카오i Developers를 통해 API를 제공함으로써 서비스를 넣거나 쓸 수 있다. 그리고 앞으로 카카오 i 에 OCR과 번역 서비스를 지원할 예정이다.
그외에 카카오에서 인재 육성 / 커뮤니티 등을 위해 많은 행사들을 준비중이다. - 카카오 기술블로그를 통해서 카카오의 기술 노트를 볼 수 있다 - 자원을 공유하는 지원... 개발자 행사, 후원.. 오픈에서 밋업하는 경우 카카오 오피스를 제공하고 있다. 링크
(기술 공개를 통해서 open API를 제공, 컴퓨팅 자원을 제공해서 데이터를 쌓을려고 생각 중인 것 같다. 어떤 방식으로 진행할 지는 미정이다.)
2. AI 시대에 맞는 서비스 개발 (이석영)
세션 제목을 보고선 AI서비스를 개발하는 방법론이나, 개발 사례를 통한 인사이트를 얻을 것이라고 생각했다. 하지만 세션의 내용이 개발에 대한 내용은 아니였기 때문에 조금은 실망했다. 하지만 세션에서 주는 통찰은 절대 작지 않았다.
----
카카오에서 새로운 AI서비스를 개발하며 고민한 결과를 공유하는 자리다. AI라는 말이 굉장히 포괄적인데, 우리가 흔히 생각하는 AI라고 한다면 터미네이터, 로보캅, 베이넥스와 같은 로봇을 말한다. 하지만 이것은 4차산업혁명시대에서 나올 수 있는 것이 아닌 더 먼 미래에 실현 가능하게될 기술이다.
위에서 말하는 AI는 다음과 같이 3가지로 구성된다. - NUI : Natural UI. 키보드나 마우스 없이 사람이 의사소통 하듯 사용자 인터페이스를 처리함. - Movable : 스스로 움직일 수 있어야 함. - Intelligence : 스스로 생각하고 판단할 수 있어야함.
현시대에는 위에서 말한 AI의 3가지 구성요소가 통합적으로 개발되는 것이 아닌 개별적으로 개발되고 서비스 되고 있다. 우리가 잘 아는 구글 알파고의 경우 Intelligence의 기능을 구현한 것이다. 이세돌과의 대국에서 알파고는 바둑판의 상태를 인지할 수 없어 사람이 입력해야 했으며, 연산의 결과를 수행하는 사람이 대신 앉아서 바둑을 두었다. 이는 NUI와 movable의 기능이 알파고에는 없기 때문이다. amazon alexa 같은 경우 NUI 이다. 기타 로보틱스 부분의 많은 로봇들은 movable 이라고 할 수 있다. (카카오mini는 amazon alexa와 마찬가지로 NUI를 담당하고 있다. )
NUI는 일시적 유행이 아니라 사용자경험UX 분야의 혁신의 중심방향이며, 이미 스마트 스피커등의 제품을 통해 실 생활에 적용되어 많은 사람들이 활용하고 있다. NUI는 단순히 음성인식을 통한 입출력방식의 변화를 의미하는 것이 아니다. 이를 통해서 많은 서비스들의 구조가 변경되어야 할 필요가 있다.
NUI는 다음과 같이 수행되어야 한다. - 모든 기능이 음성으로 제공될 수 있어야 한다. - 실행 단계의 단축으로 인해 큰 만족을 준다. - 기능단위로 경험이 이루어 진다. (한번의 명령에 한번의 동작이 이루어져야 한다.
NUI를 이용한 서비스의 방향 - NUI(그중에서도 음성) 으로 앱의 제어를 제공하는 것은, GUI와 단계depth가 동일하면 안된다. - REST API처럼 직접적으로 한번의 명령으로 핵심 기능을 제공받을 수 있어야 한다. - ex) 음성으로 카톡을 보내는 경우 [음성파싱->타겟사용자 대화창 오픈-> 메세지 입력/보냄] 이렇게 순차적으로 보내는 것이 아니라, 한번의 단계처리로 이 기능을 수행해야 한다.
그리고 GUI에서 제공되는 앱의 기능과 봇(준AI)의 기능이 다를 수 있다. - 멜론에서는 사용자가 지정한 플레이리스트를 제공하고 재생하는 것이 보편적이다. - 카카오mini에서는 사용자의 요구와 성향에 따라 플레이리스트를 자동으로 만들어 줘야 한다.
카카오mini의 경우 엄청난 속도로 데이터가 쌓이면서 학습된 데이터가 신뢰도를 점점 높히고 있다. - 오전에 사람들이 일어나면서 급속도로 사용량이 증가한다. - 오후 및 저녁시간에(20~22) 사용량이 점진적으로 증가한다. - 그리고 패턴화를 통해 사용자들이 습관처럼 카카오mini를 사용하고 있다는 것을 알 수 있다.
결론적으로 NUI 기반의 어플리케이션을 잘 개발하기 위해서는, NUI로 많은 테스트가 필요하다.
다음 세션으로 '카카오의 광고인공지능'과 'Kakao cloud platform, 9rum'을 들었다. 같은 시간에 두 개의 세션을 들었다는 것은 반대로 말하자면, 하나의 세션을 온전히 듣지 못했다는 것이다. 처음에 들었던 '카카오 광고인공지능'은 내가 들을만한 세션이 아니였다. 이 세션은 분석가, 그 중에서도 중급 분석가 이상을 위한 세션이었다. 아니.. 그냥 평소에 광고인공지능을 관심있었을 만한 사람에 대한 이야기 였을 수도 있다. 어쨌던 나는 대부분의 내용을 알아 듣지 못하고 나와 클라우드 플랫폼, 9rum에 대한 세션에 참석했다. 중간부터 세션에 참가하여 많은 내용을 들을 수 없었지만, AWS, Azure, 오라클(좀..애매하지만..) 등의 오픈 클라우드가 아닌 회사들의 클라우드 사업에 대한 방향성은 분명히 느낀 것 같다. 그들이 만약 오픈스택을 이용해서 클라우드를 구축 한다면, 그것은 다른 회사에게 클라우드 서비스를 제공하기 보단, 자신이 행하는 비즈니스에 클라우드를 적용하거나, 사내 시스템을 관리하기 위해 사용해야 한다는 것이다. IT서비스를 제공하는 회사들은 이것을 구분하기 애매할 수 있지만, 반드시 짚고 넘어가야 할 문제인 것 같다.
다음으로 들었던 세션도 무척 인상 깊었던 내용인데, GraphQL과 GraphDB에 대한 내용이였다.
3. Unify data and model using Apache S2Graph and GraphQL
S2Graph는 그래프 기반의 데이터베이스로 kakao에서 자체 서비스를 위해 개발하였고 이를 apache에 donation하였으며 현재 인큐베이팅 상태의 프로젝트이다. 세션 이름에서 짐작 할 수 있듯 데이터와 모델(분석모델)을 동일하게 처리할 수 있다는 것이 특징이며, 특정 주제에 대해서 직관적으로 정보를 얻을 수 있다는 것이 특징이다. 범용인 목적을 위한 DB라기 보단 특수한 비즈니스 목표를 위해서 만들어진 DB라는 느낌이 강하다. 그렇기 때문에 S2Graph를 사용하기 전에 충분히 데이터에 대한 정의가 이루어져야 한다.
(kakao 에서는 사용자 별 서비스 이용내역, 활동을 분석하기 위해 S2Graph 를 개발하여 적용하였다)
* 데이터의 정의 - 사용자 메타 데이터 : 사용자에 대한 정보. S2Graph 에서 vertex로 보여지게 된다. - 사용자 활동 데이터 : 어떤 사용자가, 언제, 무엇을 했는지에 대한 정보로써, S2Graph에서 edge로 표현한다.
ex) Steve가 스타워즈를 봤다. (Steve) ---------- watch movie -----------> (Starwras)
*S2Graph 특징
- 분석모델의 데이터화 :
단순 활동 데이터 뿐 아니라 분석된 데이터가 edge 형태로 추가된다. 이것이 분석모델이 데이터와 동일하게 처리되는 구조적 특성이 된다. 이를 통해 분석된 데이터를 직관적으로 볼 수 있으며, graphQL을 통해 사용자는 그것이 단순 데이터인지, 분석모델인지 구분하지 않고 편하게 조회할 수 있다. (QNA : 모델인지 모르고 사용자가 돌리면 너무 비싼expensive 쿼리를 수행할 수 있는데 이것을 시스템이 버텨줄 수 있는가??---버틸 수 없다. 하기 때문에, 사용자가 직접 쿼리를 날리지 않고, 쿼리 수행 전에 관리자의 확인작업을 거친다.)
- 데이터 통합 :
kakao가 여러 서비스를 제공하고 이는 서비스별로 각각의 DB에서 존재하기 때문에 기존에는 분석하기 어려웠으며, 동일한 작업을 서비스별로 중복수행하기 일수였다. 그렇기 때문에 각 서비스의 데이터를 한 곳으로 모아 S2Graph로 생성한다면 사용자 기준으로 모든 활동들을 분석할 수 있었다.
또한 단순 데이터만 통합하여 data-lake로 구성한다면 분석모델도 통합관리가 되지 않기 때문에, 데이터를 처리하듯 분석모델을 처리할 수 있도록 S2Graph의 구조적인 개선을 하였다. 하지만 모델을 통합했을 때 모델로 발생한 데이터를 다시 DB(S2Graph)에 쓰는 경우, 데이터의 증가량이 원본데이터보다 너무 커 제대로 운영할 수 없었기 때문에, 모델의 데이터는 cache와 같이 동적으로 vertex와 edge를 생성하고 처리하도록 수정하였다.
기존 카카오톡의 서버사이드는 java로 구성되어 있었으며, 이를 서버사이드의 구조적 개선(사유는 공유안함)을 위해 코틀린kotlin을 사용하기로 하였다. 다른 언어가 아닌 코틀린을 선정한 이유는 다음과 같다.
* 코틀린 선정 배경 - 적정한 성능/안정성 - 개발/운영 편의성 - JVM 기반의 검증된 자바 생태계를 이용 - 높은 생산성 - 적정 수준(:?)의 러닝 커브
* 도입시 고민 배경 - 개발 환경 : > kotlin은 오픈소스로 개발되고, 굉장히 긴 베타기간으로 충분히 검증되었다고 생각함. > 베타 기간이 길었기 때문에 현재 업데이트 시 큰 변화가 일어나지 않고, 하휘호환이 지원된다. > 언어 특성상 바이트코드로 전환이 필요하다는 한계가 있다. > gradle과 maven에서 kotlin 관련 플러그인을 제공한다. > eclipse, IntelliJ 에서 지원하며, IntelliJ Idea 에서 code-level 에서 java to kotlin을 지원한다.
- 생태계 : > java와 100% 호환이 되는 것이 강점 . java에서 kotlin 호출 가능, kotlin에서 java 호출 가능하다. . kotlin 에서도 annotation 사용가능하다. . 데이터 타입도 호환된다. . 언어에 대한 러닝 커브는 존재하지만, 플랫폼에 대한 러닝 커브는 없다.(모든 플랫폼과 호환된다.)
- 문법 : > 언어로 생산성이 향상되나? ---> 작성하는 코드의 양이 작아지고, 지정자(getter/setter)가 자동으로 생성된다. > 문법 실수 가능성/컴파일 타임에 실수 가능성을 막아준다. > 개선된 타입 - 정적타입static을 더 엄격하게 확인한다. - 변수가 널 값을 가질 수 있는지Nullable을 문법으로 명시한다. - primitive타입, boxed 타입을 구분한다. (int, long, float, double 등도 객체로 표현된다) - 특수타입(any, nothing, unit 등)을 지원한다.
- Nullable 타입 : > java 에서도 null 타입을 처리할 수 있는 것이 장점이긴 했지만, 완벽하게 제어하지 못했다. kotlin 타입 시스템에서 기본적으로 null이 가능한지 불가능한지를 설정할 수 있다. ---->컴파일타임에 NPE(null point error)를 탐지할 수 있다.
- Immutable(list, map 등) 타입: > 별도의 mutable 객체를 sub-object로 생성하여 지원한다. > MutableList, MutableMap 을 별도로 지원
- final 타입 : > 변수처리 > 기본적으로 final class로 상속받지 못하게 하고, open 키워드를 통해서 별도로 상속가능함을 명시적으로 표시해야 한다.
- 확장함수 : > utility, helper 클래스 대체, 의존성 제거 > 클래스의 핵심 기능과 확장 기능 구현 분리 > 기존 클래스에서 새 인터페이스 적용은 안됨
이 밖에도 smart-cast, co-routine 등 많은 언어적 기능을 제공한다.
결과적으로 잘 돌아가고 성능차이가 없다. 하지만 문제는 컴파일타임이 6배 이며, 바이트코드 용량이 2배이다. (이는 절대 무시할 수 없는 특성이 아닌가 싶다. 컴파일 하는데 1시간이 걸리는 코드가 6시간 걸린다면.... 이것만으로도 대규모 개발에서 코틀린을 기피하는 큰 이유가 되지 않나 싶다)
전체적으로 ifkakao2018의 분위기는 무거웠다. 자발적인 컨퍼런스가 아니라는 생각이 들 정도로 말이다. 아직 첫 해이고 더 발전할 가능성이 많다고 생각한다. 내년에는 카카오만의 독자적인 기술과 조직문화를 직/간접적으로 확인할 수 있는 그런 시간이 되길 기대해 본다.
위에서 정리한 세션 말고도, 내가 미처 듣지 못한 훌륭한 세션들이 있었다. 이는 아래 링크를 통해서 확인해보면 좋을 듯 하다.