뒤늦은 JetBrains day 후기

뒤늦은 JetBrains day 후기

Dec 10, 2018    

JetBrains 소개

JetBrains는 개발자와 프로젝트 매니저를 대상으로 하는 도구들을 개발하는 소프트웨어 업체이다. 대표적인 제품으로 IntelliJ, PyCharm, WebStorm 같은 통합개발환경이 있고, 구글로부터 안드로이드 공식 개발 언어로 선정된 Kotlin이라는 JVM 기반 언어를 발표했다.

세션

이 날의 세션은 크게 IntelliJ의 새로운 기능들에 대한 소개와 Kotlin에 대한 내용이 주였다. 나의 관심사는 Kotlin/Native와 쿠팡의 Kotlin 적용 과정, 그리고 평소 자주 보던 블로거인 이동욱 님의 발표(Upsource)였다. 먼저 JVM언어로 시작한 Kotlin이 어떻게 Native를 지원하는지가 궁금했고, 현재 Oraclew Java 라이선스 이슈로 자바 진영의 의견이 분분한 가운데 Kotlin을 개발하고 있는 JetBrains의 입장이 궁금했다. 그리고 안드로이드 개발은 Kotlin으로 많이 하고 있는 것 같은데 Back-end를 실제로 구축한 사례를 쿠팡에서 발표한다고 해서 관심을 가지게 되었다. 어떻게 보면 자바를 이 위치까지 끌고 올라왔다고 생각하는 스프링 프레임워크도 Kotlin을 지원하고 있다.

IntelliJ Tips

JetBrains에서 개발한 IDE로 Java뿐만 아니라 Kotlin, Scala 등의 JVM 언어 외에 Go, Python, C# 등의 언어를 지원하고 계속해서 플러그인 형태로 지원언어를 추가하고 있다.

사실 이 세션에서 가장 기억에 남는 건 Nyan Progress bar 일 것이다. Hadi가 여러 번을 강조하며 말했고 심지어 이후 세션에서 라이브 코딩을 할 때도 계속해서 프로그레스 바 플러그인을 설치해서 고양이를 보며 마음의 안정을 찾으라고 말했으니까 말이다. 이 외에 PostMan과 같은 REST API 테스트 같은 내장기능들이 웹 개발을 위한 종합 개발 플랫폼이 되어가는 것 같다는 생각을 했다.

Kotlin - What’s new

JVM 지원 언어란?
Java 가상 머신(JVM) 상에서 실행될 수 있도록 바이트 코드를 생성하거나, JVM 위에서 실행되는 인터프리터를 지원하는 언어이다. 대표적인 언어로 스칼라, 코틀린 등이 있고, 파이썬 구현체인 Jython, 루비의 구현체인 JRuby 등이 있다.

주요 특징

  • JVM/JavaScript/Native(LLVM) 지원
  • 기존 Java 코드와 100% 호환
    • 기존에 사용하고 있던 Java API 모두 사용 가능
    • Spring, Android 등의 프레임워크 사용 가능
    • Ant, Gradle, Maven 등의 빌드 도구 역시 사용
    • Java코드를 Kotlin 코드로 변환하는 도구 제공
  • NPE(Null Pointer Exception)에서 해방
    • Type System
  • Java boilerplate 코드를 줄여주고 간결한 코드를 작성할 수 있는 문법 제공
    • getter/setter의 번거로움
    • class 외부에서 선언할 수 있는 함수
    • Functional Programming 지원: java도 어느 정도 지원하는데?
  • 준비된 통합개발환경
    • JetBrains에서 발표한 언어이기에 IntelliJ에서 100% 지원

Kotlin vs Java

  • Java
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, world!");    // Hello, world!
        System.out.println(multiplyTwo(2));     // 4
        System.out.println(addTwo(3));          // 5
    }

    public static int multiplyTwo(int number) {
        return number * 2;
    }

    public static int addTwo(int number) {
        return number + 2;
    }
}
  • Kotlin(JVM)
fun main(args: Array<String>) {
    println("Hello, world!")    // Hello, world!
    println(double(2))          // 4
    println(addTwo(3))          // 5
}

fun double(number: Int) : Int {
    return number * 2
}

fun addTwo(number: Int) = number + 2

Upsource를 이용한 코드 리뷰

JetBrains에서 나온 코드 리뷰 툴로, 기존 GitHub, GitLab의 코드 리뷰 프로세스 대비 IDE 연계로 인해 더 디테일한 코드 리뷰를 가능하게 한다.

  • 특징
    • 설치형 소프트웨어
    • SonarLint, FindBugs 같은 코드 분석 기능 지원
    • IntelliJ IDE상에서의 코드 리뷰
    • 웹상에서 리뷰할 때 소스코드 브라우징 가능
    • 10인 이하 사용 시 무료

사실 Upsource에 대한 관심보다 발표자인 이동욱 님의 블로그를 평소에 자주 봤기 때문에 실제로 만나보고 싶단 생각에 참석했다. 평소에 작성하는 글처럼 이동욱 님은 열정적이고 약간은 빠른 템포(ㅎㅎ)로 발표를 진행하셨다.

나의 착각인지 모르겠지만 우아한 형제들에 근무하는 개발자들은 글을 잘 쓰는 사람들이 많다는 생각을 하고 있다. 웹에서 기술 관련 포스트를 보고 ‘잘 썼다. 유용하다.’라고 느끼는 글을 우아한 형제들 출신 개발자 분들이 쓰신 글이 많았다. 회사가 사람을 만드는 건지, 그런 사람들이 우형에 들어가는 건지. 어쨌든 좋은 회사라고 느껴지고, 거기서 일해보고 싶다는 생각을 하게 하는 회사이다.

쿠팡 Kotlin 적용기

쿠팡의 리드 개발자인 디밥님의 발표로, 기존 스프링 3 기반 개발 프레임워크에서 코틀린으로 전환했던 경험을 공유해주셨다. 실제로 코틀린을 필드에서 적용한 사례여서 궁금해서 들었다. 처리속도 같은 퍼포먼스 지표들이 중요하지만, 그보다 디밥님이 코틀린을 쿠팡에 적용하며 고민들이 더 길게 남았다. 일단 새로운 기술을 적용하려는 움직임부터, 그 기술을 조직원들의 거부감을 최소화하기 위한 점진적 변화, 충분한 학습과 작은 성공사례 들이 리드 개발자가 해야 하는 역할에 대해 생각하게 했다. 그리고 이런 리더 옆에서 일하고 있는 쿠팡의 개발자들이 부럽다는 생각도 잠깐 했다.