[Review] JetBrain Seoul, 2018 - 5 - Kotlin @Coupang Backend 적용기


Image Failed to Load

5. Kotlin @Coupang Backend 적용기 - 배성혁, 쿠팡

Kotlin 도입 동기

  • 기존 문제점: 개발자의 수준 편차가 크다 - 조직 수준은 최하위 개발자 수준의 의해 결정된다
  • 현재는? - Our status
    • Lack of safety code - no null checks
    • Not readable code
    • Lack of testing - unit & integration
    • Heavy oriented to JPA
    • Lack of experience to Async/Non-Blocking Programming
  • Our environments - in Catalog team (물류쪽은 10배 이상)
    • 1일 데이터 처리량 - 천만건(2016) - 10억건(2018)
    • MySQL (Aurora) - Replication deplay 120sec (max)
    • Backend Stack in 2016
      • MySQL, RabbitMQ, Hive
      • Spring 3, JPA
  • Our challenges
    • Akka Cluster with Lagom Framework (CQRS)
    • Move to NoSQL (Cassandra, HBase)
    • Migrate RabbitMQ to Kafka
    • Adopting Scala (Pilot)
  • Failure
    • Adopting Scala
      • Learning curve (almost junior)
      • Lack of tech leaders
      • Trying to develop too complex system
    • Adopting Kafka
      • Simultaneous development (duplicate same error)
      • Offset managements
  • To pursue change
    • 객관적 시각 유지
    • History 및 현실 상황 대한 이해 (기술 부채)
    • 현 조직의 개발 역량 객관적 평가
    • 동기 부여 - 필요성 설득보다는 자각할 수 있도록 자극
    • 충분한 학습 시간
    • 변화 경험 공유
      • ASP –> C#, Java –> Scala
  • Prepare
    • Code quality - 중요성 자각 –> 코드 리뷰
    • Enterprise Application Commons
      • Patterns 교육, Library 제공
    • Enterprise Architecture 학습
    • Async Programming 학습
    • Kotlin Language 학습
      • Kotlin is language for Android?
  • Adopting Kotlin
    • Safety code / readable code
    • Simple grammar (easy to learn)
    • Interoperability between Java and Kotlin
    • Extension methods
    • Async Programming by Coroutines
  • Environments 준비
    • 개발 툴 지원 - IntelliJ IDEA
    • Static code analysis - ktlint, detekt
    • Test code coverage - jacoo
  • Kotlin 도입 사례
    • Use cases in 2017
      • Common library
      • Components
      • Standalone Web Application
      • Large scale system
      • A. Kotlin Extension library
        • Coupang Standard Framework 대체
        • Kotlin Best practices 제공
        • Kotlin 학습 예제 제공
        • Based debop4k
        • Kotlinx-Units
          • Standard units
          • Represent meter units
          • Yard-Pound units
      • B. Korean Tokenizer
        • 중복상품 Merge 위한 Tokenizer 필요
        • Twitter 에서 개발한 open-korean-text 를 커스터마이징
        • Scala vs. Kotlin 성능
          • Kotlin is 1.5 ~ 3x faster
        • 효과
          • 30% 부하 감소
        • Why Kotlin is faster than Scala?
          • Scala 의 루프는 느리다 - 아주 느릴 수 있음
          • Eclipse-collections 사용
            • 메모리 절약
          • Kotlin Coroutines
            • 비동기 / Non-blocking
      • C. Kafka Client - Wilson
        • 동기
          • 안정된 카프카 사용을 위해 offset 관리가 필수
          • 각 팀별 중복된 클라이언트 구현 및 삽질
        • 효과
          • 메시지 중복 / 유실 없음
      • D. Audit Tool
        • 상품 정보 Audit System - Single Web Application
        • Software stack
          • React
          • Spring Boot 1.5
          • jOOQ
      • E. Creation Pipeline System
        • 상품 정보 생성 프로세스 관리 시스템
        • Features
          • Workflow (Heavy use Kafka)
          • Async / Non-blocking System
          • Need high throughput
    • Use cases in 2018
      • F. Tagging system
        • 상품 정보에서 원하는 특성을 추출하는 시스템
        • 매칭과 refinement 에서 따로 관리
        • 기존 자바 및 스칼라 혼용
        • High throughput
      • G. Spring Data Requery
        • Better performance than spring-data-jpa
      • H. Rule engine
      • I. Wakanda system
        • Creation pipeline
  • Lesson & Learn
    • 반성: 테스트!! Kotlin best practice 필요
    • 효과: safety and readable code
  • 참조:
    • https://info.jetbrains.com/jetbrains-day-seoul-2018.html





© 2018. by kdohyeon

Powered by kdohyeon