ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2019.11.27] NHN FORWARD 2019
    후기/세미나 2019. 12. 31. 08:57

    https://forward.nhn.com/2019/seoul/

     

    NHN FORWARD

    Small Steps make a Big Difference

    forward.nhn.com

     

      네이버의 Deview, 카카오의 if kakao는 알았지만 NHN의 NHN FORWARD는 올해 처음 알았다. 추첨식이었는데 다행히 당첨되어 또 서울을 다녀오게 되었다. 앞의 두 행사와는 다르게 코엑스 그랜드블룸이 아닌 서울 파르나스 호텔에서 진행 되었다. 그러나 저러나 둘 다 삼성역 근처이다.

     

      키노트는 정우진 NHN 대표가 했다. NHN의 다양한 서비스들 소개와 매출 등을 이야기 하고 비전을 이야기했다. 다만 한가지 아쉬웠던 점은 발표의 초점이 일반 대중이 아닌 NHN 임직원들에게 있었다는 점이다. 한해 고생했고 내년에도 잘해보자? 같은 식의 이야기를 많이 해서 그런지 약간 내가 있을 자린가 하는 생각도 들 정도였다. 키노트의 제목이 "NHN 패밀리 토크"인 이유가 있었다.

     

      세션이 동시에 6~7개나 진행이 되어서 그 중에 맘에 드는 것을 골라 들었다. ModelAndView를 사용하여 JSP 같은 것으로 내려주는 웹애플리케이션에서 Vue와 연동하기 위한 Rest API 서버로 교체하는 과정은 관심이 있어 들었다. 요즘 JS를 할 일이 없다보니 Rest API와 어떻게 프론트엔드를 연동하는지 궁금했기 때문이다. 조만간 공부해 보고 싶은 DDD나 고성능을 내기 위해 사용하는 Java Fiber 등을 들었고, CPU 100%를 치는 상황을 어떻게 해결했는지 궁금하여 관련 발표도 들었다.

     

      기념품은 양말과 에코백이라 살짝 아쉬운 점이 있었지만 점심식사와 간식이 제공되었다. 점심은 장어덮밥이 나왔는데 자리에 앉아있으면 호텔 직원이 와서 하나씩 서빙해주었다. 선착순 800명에게만 직접 식사가 제공되고 나머지 인원은 payco 1만원권 쿠폰을 주었다고 한다.

      

      너무 어려운 주제도, 너무 쉬운 주제도 아닌 것들로 구성되어 있어서 공감하면서 들을 수 있는 부분들이 많았다. 3년차 개발자의 발표 모습을 보면서 또 한번 발표에 대한 의지도 생겼다. 근데 지금 발표하라고 하면 어떤 걸 말할 수 있을까?...

     

      네이버, 카카오에 이어 NHN도 거대 개발자 컨퍼런스를 여는 것은 참으로 고무적인 일이다. 개발자 생태계가 앞으로 더 선순환을 그리며 커져가면 좋겠다. 

     


    프로그램

    시간 장소

    발표명

    발표자
    09:00 - 10:00 등록 데스크

    등록

     
    10:00 - 10:30 트랙 1, 2, 3

    NHN 패밀리 토크

    정우진 대표/NHN
    10:30 - 11:20 트랙 1, 2, 3

    초청 특강
    Recommendation Systems
    : Concepts, Techniques, and Research Results

    • 추천 시스템
    • 머신러닝
    김상욱 교수/한양대학교
    11:40 - 12:20 트랙 1

    '깃'깔나는 Git 워크플로 알아보기

    • 개발 방법론
    • 생산성
    신승엽/NHN Edu
    트랙 2

    딥러닝을 이용한 가상 피팅 룸

    • 머신러닝
    이록규/NHN
    트랙 3

    점진적으로 프런트엔드 프레임워크 교체하기(AngularJS to Vue)

    • 프런트엔드
    유동식/NHN
    트랙 4

    배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인

    • 게임
    마정민/NHN
    트랙 5

    비식별 데이터로부터의 가치 창출과 수익화 사례

    • 빅 데이터
    이진민/NHN ACE
    트랙 6

    비주얼 브랜딩
    : Basic system

    • 브랜딩
    • 디자인
    김동훈/NHN
    트랙 7

    스몰 스텝
    Dooray!를 이용한 업무 효율화/자동화
    (고객문의 시스템 구축)

    • 생산성
    백창열/NHN
    12:20 - 13:30  

    점심

     
    13:30 - 14:10 트랙 1

    DDD-Lite@Spring

    • 백엔드
    • 아키텍처
    정명주/NHN
    트랙 2

    하이퍼파라미터 튜닝으로 모델 성능 개선하기

    • 머신러닝
    염승철/NHN
    트랙 3

    실용적인 프런트엔드 테스트 전략

    • 프런트엔드
    • 테스트
    • 아키텍처
    김동우/NHN
    트랙 4

    퍼즐 게임의 난이도 예측은 닥터 P에게

    • 게임
    • 머신러닝
    이창율/NHN
    트랙 5

    PAYCO 쇼핑 마이크로서비스 아키텍처(MSA)
    전환기

    • 아키텍처
    이한진/NHN
    트랙 6

    패션 검색:
    사진만 줘, 그 옷 찾아줄게

    • 머신러닝
    • 검색
    김현기/NHN
    트랙 7

    GIF 스티커 만들기
    : 스파인 2D를 이용한 움직이는 스티커 만들기

    • 디자인
    서동원/NHN PixelCube
    14:25 - 15:05 트랙 1

    HTTP API 설계, 후회, 고민

    • 백엔드
    이경환/NHN
    트랙 2

    처음 분위기 그대로
    : Music Mood Classification

    • 머신러닝
    • 검색
    박대한/NHN
    트랙 3

    레거시 웹 서비스 길들이기
    : 서버 개발자의 SPA 적용기

    • 백엔드
    • 프런트엔드
    최강훈/NHN
    트랙 4

    글로벌 게임 서비스 노하우

    • 게임
    오로지/NHN
    트랙 5

    엔지니어도 마이그레이션
    : 마이크로서비스로 가는 여정

    • 아키텍처
    서보국/NHN
    트랙 6

    I'll pick, for your fit
    : 비주얼 검색에서 좋은 검색 결과를 찾기 위한
    여정

    • 검색
    • 기획
    권소진/NHN
    허옥엽/NHN
    15:20 - 16:00 트랙 1

    Spring JPA의 사실과 오해

    • 백엔드
    신동민/NHN
    트랙 2

    하이 벅스. 내 목소리 들리니?
    : DNN 보이스 트리거 개발기

    • 머신러닝
    탁민우/NHN
    트랙 3

    웹 프레젠테이션 개발기
    : Dooray 발표 모드 해부하기

    • 프런트엔드
    최민호/NHN
    트랙 4

    언리얼 엔진을 통해 살펴보는
    리플렉션과 가비지 컬렉션

    • 게임
    정수용/NHN
    트랙 5

    Java에서 Fiber를 이용하여 동시성(concurrency) 프로그래밍 쉽게 하기

    • 언어
    안성우/NHN
    트랙 6

    패션 시소러스 기반 상품 특징 분석 시스템

    • 검색
    • 알고리즘
    남웅/NHN
    트랙 7

    한 번 더 듣는 '깃'깔나는 Git 워크플로 알아보기

    • 개발 방법론
    • 생산성
    신승엽/NHN Edu
    16:00 - 16:30  

    다과

     
    16:30 - 17:10 트랙 1

    바르게, 빠르게! Reactive를 품은
    Spring Kafka

    • 백엔드
    이병찬/NHN
    트랙 2

    쿠폰듀스X101
    : 가장 좋은 쿠폰을 픽 하려다 만난
    CPU full load 개선기

    • 알고리즘
    황도영/NHN
    트랙 3

    위치 기반 빅 데이터의 시각화와 지도

    • 빅 데이터
    박용관/아이나비시스템즈
    트랙 4

    200만 동접 게임을 위한 MySQL 샤딩

    • 게임
    • 아키텍처
    전만철/NHN
    트랙 5

    벅스 5.0 (feat. Kotlin, Jetpack)

    • 모바일
    • 언어
    유재설/NHN Bugs
    이준호/NHN Bugs
    장혜진/NHN Bugs
    트랙 6

    아직도 돈 주고 DB 쓰나요?
    for DBA

    • 빅 데이터
    이지만/NHN
    트랙 7

    스몰 스텝
    Android 렛츠 기릿!

    • 모바일
    공성원/NHN
    17:25 - 18:05 트랙 1

    PaaS & API Experience
    : 좋은 API DX를 제공하기 위한 작은 걸음

    • 백엔드
    신진호/NHN
    트랙 2

    대시보드를 활용한 서비스 모니터링 시각화
    :수천 대의 장비를 한눈에

    • 모니터링
    이상민/파킹클라우드
    트랙 3

    전기 먹는 하마의 다이어트 성공기
    : 클라우드 데이터 센터의 에너지 절감 노력과 
    사례

    • 클라우드
    • 인프라
    정덕교/NHN
    트랙 4

    게임 서버 대규모 부하 테스트와 모니터링,
    이렇게 해보자

    • 게임
    • 테스트
    김영환/NHN
    트랙 5

    PAYCO 매거진 서버 Kotlin 적용기

    • 백엔드
    • 언어
    전현구/NHN PAYCO
    유재은/NHN PAYCO
    트랙 6

    아직도 돈 주고 DB 쓰나요?
    for Developer

    • 빅 데이터
    김상록/NHN

    출처: https://forward.nhn.com/2019/seoul/presentation-session

     

    NHN FORWARD

    Small Steps make a Big Difference

    forward.nhn.com

     


    사진

    <등록 대기줄에서 찍은 사진. 입간판 홍보도 하고 제법 부산스럽다.>
    <입구쪽에서 바라본 행사장 메인 로비>
    <핸즈온랩에서 직접 실습하며 배우는 장면>
    <정우진 NHN 대표의 키노트 발표>
    <한양대 교수님의 초청 특강>
    <레거시를 SPA로 점진적으로 교체하는 방법>
    <행사의 하이라이트. 호텔에서 서빙해주는 장어덮밥>
    <DDD는 linear하게, Data or Transaction 접근 방식은 exponential하게 복잡도가 증가. 둘이 만나는 지점에 따라 선택 여부가 결정 될듯>
    <발표에 쓰인 삽화들이 모두 아내가 지원해 주었다고. 나도 요청해야지.>
    <Thread보다 좋은 것 같은데 뭔지는 아직도 알송달송한 Fiber>
    <3년차 개발자의 당당한 발표>
    <잘못된 로직으로 Time Complexity가 높았는데 잘 해결하였다는 내용>

     


    필기

     

    NHN 패밀리 토크 (정우진 NHN 대표)


    Recommendation Systems: Concepts, Techniques, and Research Results (김상욱 교수, 한양대학교)

    Recommendation Systems: An Overview

    Concepts and applications

    • Trust-Based Approach
      • 신뢰하는 유저들의 선택을 믿음

    Collaborative filtering (CF)

    • 나와 취향이 비슷한 사람들
    • rating matrix를 기반으로 추천: 유저 x 아이템 matrix에 선호점수(1~5) 존재
    • Hueristic-based Method in CF
      • Step 1: 유저간의 점수를 구해서 상위 n명을 이웃으로 정함 (Pearson correlation coefficient, PCC)
      • Step 2: Aggregation of ratings on a target item given by the neighbors
        • 단순 평균이 아닌 weighted average
    • Machine-Learning Based CF Techniques
      • Matrix/Tensor Factorization (MF)
        • 몰랐던 아이템에 대해서도 관심도가 추출됨
      • Social Network Analysis
      • Deep Learning: 데이터가 많아지면서 요즘 대세
    • Users' Preferences: Two New Notions
      • Pre-use preferences: ex) 영화보기전에 감독이나 배우, 장르 등으로 미리 선호도가 생김
      • Post-use preferences: ex) 영호 보고나서의 실제 선호도 ...

    점진적으로 프런트엔드 프레임워크 교체하기 (Angular JS to Vue) (유동식, NHN FE개발랩)

    프레임워크 교체

    • Dooray!와 AngularJS
      • AngularJS 1.5.11로 개발되어 있었음
    • 최신 프레임워크의 장점 수용
      • 잘 관리되고 안정성이 검증된 React, Vue
      • 코드 가독성과 컴포넌트 재사용성 증가
      • ...

    왜 점진적인가?

    • 점진적으로 해야하는 이유
      • 전면 교체는 리스크가 큼
      • 결과를 빨리 보기 어려움
    • 서비스별로 점차 교체
    • 마이크로 프런트엔드
      • 영역을 구분하고 독립적인 앱으로 만들어 합침
      • 앱마다 다른 프레임워크를 사용할 수 있음

    교체 전 필수 준비 사항

    • 서비스 기획 문서, QA 시트, 코드를 이용한 기능 파악 등

    점진적으로 프레임워크 교체하기

    • 전환 방법
      • SPA 포기, 별도 페이지로 분리
      • SPA 유지, iframe 사용
      • SPA 유지, Vue in AngularJS
    • storybook
      • 동시에 여러명이 여러 컴포턴트 개발 가능

    프레임워크 교체 전후

    • 리소스 크기 및 요청수 비교
    • 로딩 성능 비교

     


    DDD-Lite@Spring (정명주, NHN Dooray개발실)

    복잡성과 위기

    • 기술은 항상 발전하는데 점점 힘들어짐
    • DDD
      • 전략적 패턴
      • 전술적 패턴 (일부) -> DDD Lite

    지식 탐구: 위키

    • Aggregate (집합체)
      • 데이터 변경의 단위(트랜잭션 단위, 락의 범위 등이 될 수 있음)

    구현: Model-Driven VS Data-Driven

    아키텍처와 모듈

    결론

    • 기술보다 도메인이 먼저다

    레거시 웹 서비스 길들이기: 서버 개발자의 SPA 적용기 (최강훈)

    프롤로그: 무엇이 문제인가?

    • 스파게티 코드가 됨
    • 팀에 자바개발자가 많음
    • 가장 중요한 작업: 협상
      • 기획/사업 설득하기: UX/UI 개편으로 협상

    1막: 워밍업

    • 무기를 먼저 골라봅시다
      • front-end 프레임워크 3대장
      • 현재 팀의 상황: Java 개발자가 많고 디자이너, 퍼블리셔와 협헙하는 경우가 많음
      • Vue.js로 결정
    • 많이 변해버린 Javascript
      • ES6
      • Webpack 설정

    2막: 본격 분리 작업

    • 프로젝트 구성
      • front-end, back-end 구성은 어떻게 하는게 좋을까?
      • spring-boot-vuejs
        • front-end build -> copy to back-end -> spring boot build
        • static 파일도 모두 was를 통해 처리됨
        • UI 요청과 API 요청을 구분
    • API 호출 방식
      • 일체형 웹 서비스
        • 서버 렌더링을 위해 API 명세에 맞는 VO 클래스들을 모두 구현
      • API Gateway
        • API 라우팅 기능에 집중
        • Zuul
        • 불필요한 중복 코드를 걷어내자
    • 상태 관리
      • 복잡한 컴포넌트 간 데이터 전달
      • 상태 관리 라이브러리 사용: Vuex(Vue.js), Redux(React)
    • 다국어 처리
      • vue-i18n 플러그인 사용. 새로고침 없이도 언어 변경 가능
      • 번역 될 때마다 배포를?
      • 메시지 서비스를 만듦
      • 다국어 메시지 처리는 한 곳에서
    • 배포 환경에 따른 설정 값 처리
      • webpack 설정 파일의 분리
      • 개발 확녕을 디버깅, 운영 환경은 성능 설정

    에필로그: 1년간 운영해보니

    • 성능 측면
      • 줄어든 API 호출 횟수
      • 웹 리소스 최적화
        • 웹 리소스 용량이 작아짐
        • 성능 최적화가 가능
    • 운영 측면
      • 필요한 모듈만 빌드/배포 가능
      • 메시지 서비스로 인해 배포 없이 문구 설정 가능
    • 개발 측면
      • front-end framework의 도입
        • 일관성이 있는 코드
        • 가독성 증가
        • 재사용 가능한 컴포넌트 개발을 지향
      • 옛날 Javascript 안녕
        • 핫 리로딩
      • back-end는 데이터에만 집중하기

    Java에서 Fiber를 이용하여 동시성(concurrency) 프로그래밍 쉽게 하기 (안성우)

    Concurrency 프로그래밍이 어려운 이유

    • 어려운 이유
      • 동기화 처리가 어렵다
      • 흐름 처리가 어렵다
    • 쉽게 하는 방법
      • 싱글 Event Loop
      • 비동기식 -> 동기식
    • 동기식 Concurrency 프로그래밍이 불가능한 이유
      • 성능 문제 발생
    • Fiber란 무엇인가?
      • User Space Thread
      • Lightweight Thread
      • Thread(실) == Fiber(광섬유)
      • 스레드처럼 주소 공간을 점유하며 동작
      • 협력적 멀티태스킹
      • 하나에 400byte 정도
      • 어디에 쓰면 좋은가?
        • 여러 요청들을 스레드가 아닌 fiber로 처리하면 훨씬 더 많은 요청을 받을 수 있음
    • Coroutine이란 무엇인가
      • 루틴의 로컬 상태를 유지하면서 제어를 반환했다가, 제어를 다시 획득 흐름을 이어 갈 수 있는 제어 장치
    • Generator란 무엇인가
      • Loop의 반복 동작을 제어하는데 사용
      • 기본적으로 Generator는 반복자
      • 흐름 제어하는 측면에서 구현

    Fiber와 Coroutine 그리고 Quasar

    • Java Fiber
    • Quasar
      • Java에서 Fiber를 사용하게 만들어 주는 라이브러리
      • Java Agent를 사용

    Fiber를 이용해 Concurrency 프로그래밍을 하는 방법

    실 적용 사례 소개(Tardis)

    • 실시간 게임 서버 Thread 모델
    • Fiber 기반의 Sequencial Coding
    • Java Fiber Quasar의 문제점
      • thread blocking IO 함수를 호출하면 안됨
      • long function, thread blocking call은 별도의 thread로 처리
      • 더 이상 업데이트가 안됨 -> Project Loom

    Java Fiber의 미래 Project Loom

    • Project Loom
      • Serialization, Continuation

    Q&A

     


    쿠폰듀스X101: 좋은 쿠폰을 픽 하려다 발생한 CPU full load 개선기 (황도영, 커머스P개발팀)

    무엇이 문제일까?

    • 장애 발생
      • Heap 그래프: 그래프가 요동침
      • CPU 그래프: 이따금씩 CPU가 매우 바빴다. 100%를 침
      • Thread dump: 무언가가 반복 호출된다
      • 범인은 최대할인쿠폰

    왜 느릴까?

    • NCP는 다양한 쿠폰 기능을 제공
    • 상품-쿠폰 매칭 문제는 탐용벅 적용이 어렵다
    • 다양한 쿠폰들
      • 상품 쿠폰, 플러스 쿠폰, 장바구니 쿠폰...
      • 독립적인, 의존적인 쿠폰
    • 연산횟수
      • 상품수 1: 연산횟수 125
      • 5: 4800만
      • 10: 476조
      • 상품 개수의 증가에 따른 폭발적인 연산횟수 증가 문제

    해결해 보자!

    • 아이디어1
      • 쿠폰들 의존관계 끊기
    • 아이디어2
      • M^p 알고리즘 개선
      • Assignment problem
      • 헝가리안 알고리즘: BigO(K^3)
        • 사전준비1. k x k 정방 matrix로 만듦 (0으로 채움)
        • 사전준비2. 가장 큰 수에서 가장 작은 수를 뺌

    개선 후 결과 그리고 회고

    • 최종 개선안
      • BigO((M X N)^p) X c -> BigO K^3 + k^3

     

    댓글

Designed by Tistory.