IF kakao 참가 후기

Sep 6, 2018


IF kakao 참가 정리

9월 1일에 뒤늦게 당첨된걸 깨달아서 부랴부랴 바쁜 와중에 다녀왔습니다ㅠㅠ… 전체적으로는 참고해서 적용해보고 싶은 구조 및 기술 스택이 많았습니다 다만 발표해주신 연사분도 깊은 생각을 한 뒤에 도입을 한 건 아닌거같은 내용이 간혹 있어서, 따로 공부를 더 한 뒤에 실 서비스에 적용 가능한지에 대해서 고민해보려 합니다.

키노트

카카오의 핵심가치?

일종의 세션 소개였습니다.

  • 안정성
    • 클라우드 네이티브 플랫폼, 서버사이드 코틀린 등
      • 안정성에서 서버사이드 코틀린을 언급한게 조금 이상하긴 했습니다.
  • 사용자 경험
    • 기술의 우수성/ 우월성보다는 사용자의 불편을 어떻게 해결할지에 대해 초점
    • 다음 메인 / 다음 웹툰 메인 개선 등의 세션
  • 데이터
  • next innovation
    • ai, blockchain (카카오가 집중하고 있고, 앞으로 투자 예정)

카카오 ai (kakao i)

현재 kakao i 의 업무 스타일과 발전 방향에 대한 카카오의 입장을 소개했습니다.

  • 30만건의 발화 인식 가능
  • 명령어 인식 실패율 5.9% (현재)
    • 데이터, 새로운 알고리즘 적용 및 발전.
  • 15개 도메인에 대한 서비스 시작, 6개월 동안 40여개의 도메인에 대한 서비스 중
    • open builder를 사용하게 된 장점들을 소개 open builder가 뭐지?
  • open builder를 이용해 카카오 챗봇 / 미니를 동시에 개발하고 있음
    • (클로바와 비슷)

카카오 미니

  • 카카오 미니(kakao i)에 카카오 네비를 이식.
  • 카카오 네비를 음성으로 조작
    • 내년 중 출시 예정
  • 현대 자동차 kakao i 협력, 차량 대시보드 / 에어컨 조작등을 카카오 i로 조작.
    • 19년형 신차에 적용될 예정

카카오 홈

  • GS건설, posco 건설과 협력
    • 평택 소사벌 신축 아파트에 적용 (옛날에 유비쿼터스 홈 같은 느낌)

카카오 i, 카카오 미니, 카카오 홈 open api 추가

  • 2018년 12월 예정

카카오의 목표

  • 개발자들이 모이는 장을 만드는 것.
    • ai 컨퍼런스, csi 워크샵, 봇경진대회, pay talks ,블록 체인 위크, txgx, if kakao, 딥러닝 캠프, 카카오 아레나, 코드페스티벌 등
    • 카카오 블라인드 채용
      • 이건 좀 궁금하긴합니다 - -;
    • 기술 개방을 통한 기여
    • 밋업 @ 카카오 오피스,
    • 개발자 컨퍼런스 및 학계 세미나 후원
    • 대학원생 후원

AI 시대에 맞는 서비스 개발

연사

  • 이석영 (zodiac.lee) / 카카오

서비스 개발의 맹점?

  • AI Product가 개발자의 일을 대신해 주진 않는다.
  • ai product의 종류는 크게 세가지 형태로 나타낼 수 있을 것.

intelligence

  • 딥러닝, 텐서플로우, 알파고

NUI

  • NUI가 무엇인가요?
    • NLU(Natural Language Understanding)/ ASR(Automatic Speech Recognition)/ VR(Voice Recognition), Alexa, Google Assistant

movable

  • 보스턴 다이내믹스

NUI (Natural User Interface)

  • 기존 서비스를 NUI에 맞게 변화시키는 것이 중요
    • 음성인식/ 화상 인식 등의 영역을 서비스에 녹여내야 한다.
  • CUI -> GUI가 자연스럽게 이뤄진것처럼, GUI 이후에는 NUI, VUI (voice user interface)로 변화가 이루어질것
  • 한번 변화가 생기면 그 흐름은 지속됨
    • GUI가 대두되고 난 뒤에는 CUI로 돌아가지 않게 되었다.
  • GUI는 한계가 있다
    • N-depth touch
      • 여러 터치를 해야함
    • 멀티태스킹 불가
      • 시선과 손 동시 활용해야함
  • 아마존 에코 (2014) - GUI가 배제된 순수 음성인터페이스 디바이스의 등장.
  • NUI는 일시적 유행이 아니라 사용자 경험 혁신의 큰 방향

카카오 미니

  • 일 평균 80분 사용.
  • 6개월동안 20만대 배포됨
  • 카카오 미니 주중에는 7시~8시에 가장 많이 사용되고 주로 뉴스, 알람, 날씨 주가 등 사용. 주중/주말 오후에는 음악, 라디오, 팟캐스트 등 사용
  • 앱의주요기능 =/= 봇의 주요기능
    • 봇에서는 추천 / 재생목록을 여러 형태로 제공할 수 있어야 한다.

개인적인 생각

  • 별 내용이 없었다;
    • NUI의 중요성은 알겠지만, 서비스별로 다른 점을 고민하기 보다는 자신이 개발을 하다보니 편하다
    • ai의 중요성은 있지만, 어떻게 품질 관리를 할 수 있는지에 대한 목표가 잘 보이지 않음
      • 어떤 명령이 성공하고, 실패했는지에 대한 판단을 어떻게 할지가 궁금
      • 질문들도 NUI와 VUI보다는 미니 관련 서비스의 출시에 대한 궁금함이 더 많은 느낌이었습니다.

카카오의 광고 지능

연사

  • 정부환 ben.hur

광고의 life cycle

  • 광고 추천 / 광고 영역의 제공의 반응시간이 100ms 이내로 이뤄져야함 (현재 다음의 기준)
  • 광고에 다다르는 청중, 광고주, 플랫폼, 퍼블리셔 간의 목적이 다르다.
    • 청중
      • 화남 vs 정보
    • 광고주
      • 마케팅 채널
    • 퍼블리셔
      • 보장된 수익
    • 플랫폼
      • 효용성 최적화, 유저 만족도
  • 광고 수익의 판단
    • eCPM (effective cost per mile, 1000회 노출에 따른 수익)
      • bid amount x likeness
    • 클릭당 과금 (CPC 상품)
      • BA(bid amount) x pCTR(number of clicks / number of impressions)
  • 광고 효율
    • Pr(y=1 x, ad) y = click, x = user
      • 광고 효율은 확률로 측정하게 된다 (0과 1로 표시하기 어려움)
    • reactive method vs predictive method
      • 세그먼트가 많아질 수록 수집해야하는 데이터가 많아지고, 이렇게 되면 정확도가 떨어짐
      • prediction model을 만들어서 예측하는 편이 정확도가 높아짐.
  • (여기서부터 머신러닝 관련 수식들이 많이 나와서 정리하지 못했습니다ㅠㅠ)

카카오의 활동

  • 광고 목적을 위해 카카오 내부 데이터와 조합할 수 없음
  • 추상화 : estimation and aggregation
  • de-identificatin and k-anonymity
  • 법/guidance 등으로 인한 제약

연령 성별 추정

  • 베이지안 추정 사용
  • 클러스터링 / LDA (topic modeling). LDA가 좀 더 정확도가 높아서 topic modeling을 사용중
    • classification을 거의 미사용, 차츰차츰 LDA로 교체해도 될듯하다고 생각중
  • 해싱 트릭
  • gradient boosting tree (현재는 미사용)
  • DNN / AE (현재는 미사용)

Conversion real matters

  • eCPM = BA * pCTR * pCVR
    • 이제 conversion(실제 사용자 대상을 타겟으로 하기 위해)을 고려해서 광고를 보내줘야 하게됨

Features over Algorithms

  • 어떤 모델을 쓸지를 정하는 것보다 어떤 데이터를 쓸 지를 찾아내고 정하는게 더 중요함.
    • retargeting의 성능이 좋은 이유 : 기존 데이터 재활용 등.

Bidding Amount

  • 얼마의 광고비를 입력해야 광고가 노출될까?
    • BA가 높을수록 노출 확률 높음, 그러나 돈이 많이 듦.
    • BA를 자동으로 정할 수 있으면 광고주가 고민을 덜 해도 될것 같다.
  • Budget smoothing
    • 하루에 광고로 소모하는 예산을 정하는 방식
    • 초반에 많이 쓰면 실제 유저가 들어오는 시간대 이전에 (새벽 등) budget이 전부 소모되기도 함.
      • 트래픽 별로 분산을 시켜주기도 함
  • auto bidding
    • 적정 금액에 맞게 지속적으로 노출하는 방식

테스트 및 적용

  • research, offline 테스트 후 online test
  • 매출 위주로 테스트 진행
    • random bucket을 이용해 허점 발견하기
    • a/a test, a/b/.. test
    • 안정성 체크
  • 그 후 적용

카카오 광고 플랫폼 MSA 적용 사례(api gateway와 인증구현에 대한 소개)

연사

  • 황민호 (robin.hwan)

디지털 광고 시스템

  • DSP , SSP (Demand Side Platform - AD investment, Supply Side Platform - publisher)
    • audience targeting

MSA

  • API Gateway, 인증.
  • NETFLIX ZUUL 사용
    • 스프링 프레임워크, 간단, netflix에서 실제 운용
  • Netflix OSS
    • EUREKA, RIBBON, HYSTRIX, ZUUL
  • 카카오 광고 DSP 구성
    • L7으로 서버들 연결

서비스 장애 대응

  • Aggregation 문제로 인한 서비스 장애, RestTemplate Timeout 미설정 (Hystrix 미사용으로 인해)
    • Hystrix Circuit 오픈이 되면 장애가 생겼다고 인지 가능.
  • Eureka 미도입, RIBBON의 로드밸런싱 사용.
    • Hystrix 뒤에 Ribbon을 서버들에 연결하여 서버 로드밸런싱하도록 수정
  • 서버를 내리면 항상 서킷 오픈이됨
    • Ribbon에 연결된 여러 서버중 하나만 문제가 생겨도 격리가 되는 이상한 사례가 생김;;
    • Timeout Exception이 발생하면 바로 격리가 되서 확인해보니 Hystrix 타임아웃이 Ribbon 타임아웃 시간보다 길어야하는 것을 확인
      • 그러나 해결 안됨
    • ribbon 로드 밸런서는 유레카를 사용해서 서버 사용여부를 갱신하게됨. 사용하지 않을때는 프로퍼티 파일의 서버목록을 주기적으로 갱신
    • ribbon 헬스체크 (더미핑)의 디폴트가 항상 true를 리턴하도록 되어있었음;;
      • 서버가 내려갔을 때 정상적으로 제외되는 것을 확인

서버 버전업

  • NETFLIX ZUUL2, Spring Cloud Gateway
    • 웹플럭스 기반, 스프링 5
  • redis rate limit을 통해 요청수 제한
  • Zuul에서는 filter를 통해 서비스 요청을 관리했지만, Zuul2는 비동기 작업을 위해 Netty Server 도입.
    • 핸들러도 Netty Client 도입

Spring Cloud Gateway Filter Factory

  • 각종 제한을 필터를 통해 걸 수 있다.

MSA 구성

  • 분산세션관리, 클라이언트 토큰 관리
  • API Gateway를 통한 클라이언트 토큰 관리
    • api g/w에서 토큰 생성 및 검증을 하게됨.
  • JWT(JSON WebToken)로 토큰을 발행함

카카오 광고 플랫폼

  • Refresh Token, Access Token 사용
    • RefreshToken - 적은 정보를 갖고, 긴 만료시간을 가짐. AccessToken 발행용
    • AccessToken - 실제 사용자 정보를 갖고 인증권한을 가진 토큰. 짧은 만료시간을 가짐.
  • API G/W에서 헤더에 넣어서 보냄.
  • JWT - 만료시간이 기술되어 있어서 서버에서 로그아웃 하더라도 인증정보를 폐기하지 않음.
    • opaque token 고려중
    • 게이트웨이에서 JWT를 opaque 토큰으로 변경. gw에서는 auth token을 jwt로 변경해서 체크.
    • 로그아웃시에는 opaque 토큰을 만료처리 => jwt의 문제 해결.

Q&A

  • 트랜잭션 어떻게 관리했나요?
    • 요청을 단일화, 대신 롤백을 넣지 않음. 알람시스템을 보강 - 문제가 있으면 개발자가 직접처리..
  • 트래픽이 몰리는 부분은 따로 구현하지않음
    • 광고주 / 플랫폼사이라서.. 아직 트래픽이 몰리는 경험이 없었습니다.
  • api g/w 액세스 부분 어떻게?
    • 중요한 부분은 server to server로 진행되도록 하고, white list로 관리
  • Gateway를 왜쓰나요?
    • 보안 측면의 문제가 있어서 전부 gateway로 몰아 넣음, 권한 처리도 g/w로 몰은 이유.

모바일 게임 플랫폼과 인프라 구축 경험기(글로벌 적응 삽질기)

연사

  • 이강인(kai.lee) 카카오게임즈

  • 최양민(ringgo.choi) 카카오게임즈

동남아 지역에 신규 게임 소프트 런칭

게임 서비스 인프라를 어떻게 할까?

  • AWS 리전 사용 (IDC)
  • AWS VPC / VLAN
    • Configuration Manager를 위해 글로벌 서버 관리.
  • 그러나 서비스 대상 지역의 네트워크 품질이 걱정.
    • 네트워크 품질 상시 관리하는 지표를 만들어야겠다고 결심.
    • ICMP 를 이용해 서비스 네트워크 품질 관리
  • 동남아 서비스를 위해 싱가폴 AWS를 사용
    • 인프라를 직접 구성할지, AWS를 정말 사용할지에 대한 고민도 병행.
    • 비용(money) 시뮬레이션
  • 9개월 이후부터는 IDC가 직접 나가는 것이 AWS 사용보다 저렴하다는 것을 확인함.
    • 그러나 소프트 런칭 예정. 게임 서비스의 라이프사이클이 짧아서 IDC를 구축해야할지에 대한 고민이 높아짐.
    • 매몰 비용이 많음. 따라서 초기에는 AWS, 추후에는 IDC 사용하도록 변경.

플랫폼은 외부 IDC에 나갈 수 없음.

  • Akamai 부스트 사용 (가속 솔루션)

API G/W를 싱가폴에

  • client -> api g/w 요청, https와 wss(web socket secure)로 통신.
  • GSLB 사용
  • 아카마이 부스트 솔루션의 원리
    • handshake를 줄인다(RTT 감소)
  • api g/w를 싱가폴에 나가고, api g/w와 서버간에 통신을 wss로 하도록 수정.
    • 우리는 gRPC를 사용하면 되지 않을까?

서버팀의 모니터링 업무

  • machine/jvm metrics -> cloudwatch
  • api metrics -> hystrix
  • server logs -> ELK

서비스 오픈

  • svn deploy 문제 발생
    • seoul - singapore 레이턴시가 증가.
    • amazon s3 사용으로 해결.
  • 마케팅 대비 auto-scaling
  • DNS Policy 적용 실패?
    • 말레이시아에서 일본에 접속하는 케이스가 관찰됨.
      • 원인 : 구글 dns사용 경우 global dns의 위치를 기반으로 판단하게 됨.
      • 해결 : 클라이언트 ip를 이용해 위치를 파악하고 선택된 접속 주소를 사용하도록 수정.
    • 싱가폴 edge로 안가고 서울로 가는 문제
      • GSLB GeoIP DB 노후화가 문제, GeoIP db 수정.
  • 국가별 법령 대응
    • 국가코드를 사용 (USIM, OS 등등)
    • Country 코드가 잘못 전달되는 경우 (통신사가 보내짐)
      • 블루스택 에러
  • Timezone에대한 문제
    • 결제로그가 안보이는 오류
      • api time format을 epoche time millisecond로 통일.
    • 이벤트 푸시 (국가별 문제)
      • 유저들의 timezone을 저장하게 수정
  • global network 불안정
    • api g/w <-> relay service 간의 네트워크 불안 (글로벌 망)
      • 중요 api의 경우 kafka, kinesis를 통해 이벤트 저장 관리
    • edge를 이동 (모두 싱가폴로)
  • edge존의 철수
    • GSLB이용해서 자동으로 뺄 수 있음.
    • 스토리지의 경우 kinesis를 서울로 이동하고 나머지를 순차적으로 빼냄
    • 이미 몇번 뺌

스프링5 웹플럭스와 테스트 전략

연사

  • 이일민(toby) / Epri
  • 스프링 웹플럭스, 플럭스와 테스트, 리액티브 API 호출 테스트, 웹플럭스 서비스 테스트, 함수형 엔드포인트의 테스트

스프링 웹 플럭스

  • 스프링 5.0에 새로 등장한 리액티브 스택.
  • 플럭스 = 리액티브

스프링 웹플럭스 vs MVC

  • reactor라이브러리가 flux, mvc 양쪽에 존재함.
  • jpa, jdbc가 mvc에만 존재함.
  • servlet이 양쪽에 따로 존재함.

코드로 보기

  • 스프링 웹플럭스 / 스프링 MVC는 같은 코드로도 동작이 동일함.
    • Flux 객체로 리턴하도라도, stream으로 리턴하더라도 둘 간의 코드 차이는 없음.
  • 다만, 웹플럭스의 @Controller에는 MVC에서 지원하지 않는 기능이 있음.

스프링 웹플럭스 도입 이유

  • 제일 중요한 내용은 본격적인 함수형 프로그래밍 모델 사용 가능

스프링 웹플럭스를 사용하지 않는게 좋은 이유

  • 웹플럭스가 왜 필요한지 분명하게 모름
    • 비동기/논블록킹 방식 도입 X
    • 리액티브라이브러리 (Reactor, RxJava) 미사용
  • 블록킹이 서버, 코드, 라이브러리에 존재
    • 블로킹 IO, 블로킹 서블릿 필터 존재
    • JPA, JDBC 그대로 사용
    • ADBA(O), AoJ(?), R2DBC(?) <- 사용 시 DB를 논블로킹으로 사용 가능.
      • Asynchronous DB Access , Asynchronous on JDBC, Reactive to DB Connector
  • 스프링 MVC로 개발했더니 아무문제없음

스프링 웹 플럭스

  • 서버의 자원을 효율화하자.
    • RestTemplate (동기 / 블로킹 API 호출)
    • I/O동안 블록킹
  • 비동기 / 논블로킹 API 호출
    • AsyncRestTemplate(Spring4)
    • Async/Await (Java8+)
    • WebClient(Spring5)
  • 비동기/논블로킹은
    • 확장성이 뛰어나고 높은 처리율과 낮은 레이턴시
    • 버그가 생기면 감당불가능

테스트

  • 테스트는 항상 동기방식
  • 비동기/논블로킹의 특성에 주의
  • 블록킹/동기화가 필요.

  • StepVerifier로 비동기 논블로킹으로 동작하는 코드를 테스트할 수 있음.
    • 데이터 스트림 검증, 예외 완료도 검증, 가상시간을 이용해 오랜 시간의 이벤트 테스트 등이 가능

원격 리액티브 API 호출 테스트

  • WebClient 사용
    • 비동기 /논블록킹. Back Pressure,
  • MockWebSerer를 이용한 테스트

함수형 엔드포인트

  • 스프링 5.x 에 새로 도입될 spring container를 사용하지 않는 웹 요청 처리방식
  • RouterFunction을 이용해 함수 레퍼런스를 찾고 그 결과를 Response로 가지게 된다.
    • 리액티브 핸들러를 활용해야함.