ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 쿠팡 Kotlin Backend 적용기 - 배성혁
    세미나, 영상 요약정리 2022. 9. 15. 00:01
    728x90

    https://www.youtube.com/watch?v=bhI1hMOcT-4 

     

    쿠팡 Kotlin Backend 적용기 - 배성혁님의 발표를 요약한 내용입니다.

     

    코틀린의 좋은점

    스칼라와 달리 자바와 호환성이 100% (단, @JvmXXXX 어노테이션을 활용해야 함)

    친숙한 문법(Scalar, C#, Groovy, Swift ...)

    타입 추론(Scala, C#)

    스마트 캐스트(type을 is로 확인 가능하며 instanceof를 사용하지 않고도 타입이 바로 변환됨)

    데이터 클래스(Java의 @Data + 코틀린은 불변성이 기본으로 제공되기 때문에  copy메서드를 제공)

     

    Default Argument

    String Templates

     

    확장 함수(상속과 별개로 기본 클래스를 확장으로 적용할 수 있습니다)

    Null Safety(컴파일 타임에 NPE를 잡아냅니다)

     

    엘비스 연산자

    if(command!=null){
    	if(command.getThreadPoolProperties()!=null){
        	if(command.getThreadPoolProperties().maxQueueSize()!=null){
            	var x = command.getThreadPoolProperties().maxQueueSize().get
            }
        }
    }
    
    
    val x = command?.getThreadPoolProperties()?.maxQueueSize()?.get() ?: 0

     

     

    코루틴

     

     

    코틀린의 단점

    자바보다 컴파일 시간이 오래 걸린다. (Scalar >>>> Kotlin > Java)

    stastic 키워드가 없다 (companion object를 사용해야 함)

    namespace가 없다.

    자바에서 코틀린의 람다식을 호출할 때 void타입 이어도 Unit.INSTANCE를 반환해주어야 함

     

     

    Final이 기본이다(논란의 여지가 많은 부분) 

     

     

    코루틴 - 코틀린의 Killing Point

    클린하고 읽기 쉽다.

    c#의 fiber, go언어의 고루틴

     

    In Java

    1. 비동기를 적용하고자 했고 CallBack지옥이 펼쳐짐

    2. ComletableFutre를 이용하여 가독성을 높임

    3. RxJava는 코드가 더 짧아지지만 성능이 조금 느릴 수 있음

     

     

    In c#

    async, awiay을 활용하여 비동기를 표현

     

    In Kotlin

    c#과 비슷하게 suspend, async, await을 활용하여 비동기를 다룬다.

     

    In Go

    go만 붙이면 비동기

     

     

    문제점

    개발자들의 수준 편차가 의외로 크다

    조직의 수준은 최하위 개발자 수준에 의해 결정된다.

     

    변화를 추구하기 위해

    객관적 시각을 유지

    History 및 현실 상황에 대한 이해 (기술부채)

    현 조직의 개발 역량 평가

    동기부여 - 필요성 설득보다는 자각할 수 있도록

    충분한 학습 시간

    변화 경험 공유(ASP -> C#, Java- > Scala)

     

     

    검색엔진, 카프카,웹 애플리케이션에 도입한 예시들

    코루틴 덕분에 성능이 더 빨라짐

     

     

    반성해야 하는 점

    코틀린은 쉽다는 생각에 기본기 학습을 해야 한다(그냥 코딩 X)

    Java와 차이점 및 Kotlin best practices 검토 필요\

    첫 술에 배부를 수 없다(리팩토링은 필수)

    코루틴에 대한 학습 및 테스트(어짜피 비동기는 어렵고 코루틴은 하나의 방법)

     

    안정적 도입을 위한 Tips

    충분한 학습 기회 & 실습

    Code Quality 중요성 인식

    강력한 동기 부여

    성공 사례는 작은것부터 만들기

     

    효과

    Safety Code

    Readable Code

    성능 향상

    유지보수성 향상

     

    WebFlux vs Spring

    왼쪽이 Spring 오른쪽이 WebFlux입니다.

    Mean rep/s는 TPS를 뜻합니다. (WebFlux가 3배의 성능을 보여줍니다)

    밑은 레이턴시를 의미합니다 (지연시간이 20배 줄었습니다)

     

    추후에 성능을 위해서는 WebFlux를 도입해야 할 것 같습니다.

    728x90

    댓글

Designed by Tistory.