월간 지앤선

글 - 이정현



2018년 11월 22일(목). 세종대학교 컨벤션센터에서 열린 JetBrains Day 2018에 참석했다. 이 세미나는 Jetbrains에서 올 해로 삼 년째 진행하는 세미나이다. 대략 5년간 IntelliJ IDE를 썼고, 최근 코틀린에 관심을 두고 있어 JVM 세션을 파헤치기로 했다. JVM세션의 절반 정도는 작년 세션과 중복되는 듯 해 보였다.




< 기조연설 >

기조연설은 JetBrains의 개발팀 VP이자 기술 에반젤리스트로 활동하는 Hadi Hariri와 베더코드주식회사 안영회 대표 두 분의 연설로 채워졌다.


기조 연설 1 - 개발자의 생산성을 높이기 위한 장벽 제거 by Hadi Hariri

JetBrains에는 장벽이 많이 존재하지 않는다고 한다. 개발 작업에 뒤따르는 수 많은 장벽이 없다는 것이다. 자유롭고 이상적이지 않은가? 개발자를 옭아매는 지표(KPI 같은)나 규칙이 없다고 했다. 아무거나 원하는 것을 하고 오로지 효율적인 개발 시스템을 이루는 것이 목표라고 했다. 개발자의 업무 효율을 높이는 것이 목표이므로 그를 돕는 툴을 사용하는데, Hadi는 이 툴 사용법을 교육하고 피드백을 받아서 개선하는 일을 한다고. 규칙이 별로 없으니 자유가 많은데, 아래는 이런 회사에서 일하기 위해서 Hadi가 강조한 이야기를 정리해보았다.


철저한 자기 관리

> 자기 스스로 일에 책임을 갖는 자세 중요하다

> 어떤 일을 할지 지시 받아 하는 것이 아니기 때문에 스스로 만들어가야 한다.

> 일의 우선순위를 잘 정하고 다른 사람에게 어떤 영향을 미칠지를 알아야 한다

> No 할 줄 알아야 한다.

> 항상 열정있는 개발자를 찾는다고 홈페이지에 적혀있는데, 열정이 너무 지나치면 필요한 일에 집중을 못하게 되니 열정을 컨트롤 할 수 있어야 한다.


관계

> 이게 정말 필요한 일인가, 내가 하는 일이 가치가 있는 일인지 어떻게 알 수 있을까. 주변 사람들에게 물어보라.

> 동료를 믿어라.

> 배려하라.


리더쉽이란

> 일의 진행에 병목이 발생하지 않도록 하는 것

> 일을 위임하는 것을 배우는 것

> 가이드를 제공하는 것

> 솔직한 것

> 경청하는 것


장벽이 없는 것

> 항상 쉬운 것은 아니다. 장벽이 없다면 올바르게 작동 하지는 않을 가능성이 크다.

> 각 나라의 문화를 이해하고 보호하려고 노력해야 한다.

> 변화를 위해 마음을 열어라.

> 변화를 기다리지 말고 먼저 시도하라.


Hadi는 Jetbrains에 매니징이 없고, 눈에 띄는 리더쉽이란 것이 없는 것 처럼 이야기 했지만, 사실 각자가 자기 자신을, 그리고 서로를 매니징하고 리더쉽을 발휘하는 것 같은 느낌을 받았다.



기조 연설 2 - 소프트웨어를 모르는 대한민국 기업의 위기 by 안영회

최근 중국에서 일을 하고 있는데 마침 결혼기념일 겸, 세미나 겸 한국을 방문했다는 안영회 대표. 발언에 자신감이 넘쳤다. 소프트웨어를 잘 모르는 사람들에게 개발자의 현재 위치와 중요성을 쉽게 설명해서 잘 설득해야 한다고. 그리고 개발자 스스로도 변화해야 한다고 강조했다. 긴 연설 중 특히 기억에 남는 몇 가지를 기록한다.


소프트웨어의 가치를 근로자의 노동 시간으로 측정할 것인가?

> 소프트웨어 개발에 어울리지 않는 건설업 참조의 폐해.

> 소프트웨어는 소비자 눈에는 경계가 보이지 않는 제품. 작성하는 이가 구분지은 모양 그대로 만들어지는 제품.

> 그렇기에 개발자의 역할이 더, 너무나도 중요해지는 세상

> 노동 시간과 비례하여 온전히 개발 성과로 나오지 않는 특성을 이해해야 함


개발자는 어떻게 바뀌어야 하나?

> 클라우드 개발자가 되라. 사용자의 필요를 이해하는 커뮤니케이션 필요.

> 웹앱의 미래(1138조 비즈니스 웹 앱 시장 전망) WeChat 상점을 예를 들면, 들어가서 옷 입어보고 화장품 발라 보고, 핸드폰 써보고 QR코드 찍으면 바로 주문 완료. 구경을 마치고 상점에서 나갈 때 출구에서 내가 주문한 것들이 포장이 되어 있으니 가지고 나가면 됨.


아키텍처의 가치는? MSA 적용을 해야 하나?

> 기민한 개발조직을 위해 설계하라.

> 팀 내부 기술 문제는 그들의 일상 문제임. 만들고 나서 떠날 사람이 정할 수 없으니.

> 표준은 여러 개의 마이크로 서비스가 난립할 때 비로소 필요

> 기획은 피드백을 빨리 받을 수 있을 때 유효함 : 장기 계획을 구체적으로 세우는 오류는 범하지 말자.

> 아키텍처는 사업과 우리 조직의 모양에 따르는 일

> MSA로 무엇을 얻을 것인지 답을 찾을 것.


개발과 사회적 가치

> 모여서 4차산업 외친다고 개선이 되는 것이 아님

> 소프트웨어가 일상이 되어야 함.

> 사회적 가치를 생산할 수 있는 것을 개발해야 함


소프트웨어를 잘 모르는 대한민국의 위기를 헤쳐나가기 위해 개발자가 변화하고 노력해야 한다는 점이 결국 강연에서 가장 비중이 컸기에 조금 아쉬웠다. 우리나라 소프트웨어 생태계에 문제가 있다면 어떤 문제가 있는지, 함께 어떻게 개선해 나갈 수 있을지 조금 더 구체적으로 인사이트를 보여주기에는 시간이 짧았던 듯 하다.



점심 시간에는 전시 부스를 돌며 전리품도 챙겼다. 




< Track#1: JVM 세션 >


IntelliJ Tips and Tricks - by Hadi Hariri

최근 개발을 할 때, XCode와 IntelliJ를 주로 사용하기에 눈이 번뜩할만한 Tip이 있을까 싶어 매우 집중한 세션이었다. 이미 많은 사람들이 알고 있을 가능성이 있지만, 그래도! 혹! 도움이 되지 않을까 하여 몇 가지 소개한다. 단축키는 Mac OS기준이다.


* ToolBox 셋팅에서 IntelliJ Max Heap Size 수정 가능

* Cmd + O (Shift Double Click) : search class 인데 shift 를 누르면 All/Classes/Files/Symbols/Actions 로 이동 가능

* Cmd + E : 내비게이션. 최근 편집 파일 확인 가능.

* Ctrl Double Click : Run Anything

* Alt + Enter : Regular Expression 바로 체크


* Live Templates - syso 같은 것 등록해서 쓸 수 있음

* Cmd + Shift + 8 : Vertical Selection


플러그인 추천

Nyan progress bar - Hadi는 익살스러운 표정으로 고양이를 바라보고 있었다. 무지개 바 안에서 고양이가 움직인다. 이 걸 보고 있으면 수행 시간이 느려도 햄볶을 수 있다. 그는 이 플러그인을 추천하며, 이 것을 깔고 IntelliJ 느리다는 불평을 이제 그만 하라고. ㅎㅎ



Kotlin - What's New - by Hadi Hariri

코틀린 1.3버전의 달라진 내용을 소개했다. 이 문서(https://kotlinlang.org/docs/reference/whatsnew13.html)를 참고 바란다.

- Coroutines 언어지원과 API가 완전히 안정적으로 제공.

- Kotlin/Native 개선

- 공통 코드를 유연하게 공유하기 위해 멀티플랫폼 프로젝트 모델 수정

- 광범위한 정적 분석 수행. 특히 스마트 캐스팅 기능에 주목.

- 인터페이스 객체에 @JvmStatic, @JvmField 어노테이션 사용

- @JvmDefault

- 세 종류의 inline class 제공 등



Kotlin/Anywhere - by Hadi Hariri

코틀린은 흔히 Android, Java, Javascript를 대응하는 언어로 알려져 있다. 그러나 이제 Kotlin/Native를 사용하여 iOS, macOS, Windows, Linux와 같은 다른 플랫폼을 지원해서 단일 프로젝트로 여러 플랫폼을 타겟팅 할 수 있게 되었다. 이 세션에는 Kotlin 언어의 장점 뿐만 아니라 함께 사용할 수 있는 라이브러리에 대한 내용을 다뤘다. 2017년에 Native-BETA가 공개된 후 현재 iOS, macOS, Android, Windows, 라즈베리파이 등의 플랫폼을 지원한다. Hadi는 Kotlin Native가 메모리 관리 측면에서도 탁월하다고 했다(ARC with Cycle Collector). 순수한 코틀린 사용시에 메모리는 전혀 걱정할 필요가 없다고 강조했다.


Shared + Mutable = DANGER

다양한 플랫폼을 지원하기 위해 많은 것이 필요한데, Kotlin/JVM이 있으면 각 플랫폼에서 공통 코드가 정상적으로 실행 된다고 한다. 별도의 컨테이너 필요 없다고. 참고로 Multi platform을 지원하는 라이브러리는 http, serialization, coroutines, settings, logging 등이 있다고 했다.


그 외에도 여러가지 이야기를 했는데, kotlin-js를 활용하면 이미 생성된 js파일 내에도 메소드를 생성할 수 있고, 다른 언어로 작성된 script 같은 것들을 내부에 참조하고 있어도 작동 가능하며, kotlinx-html-jvm 을 설정하면 html 활용이 가능하다고. 그리고 KLib을 활용해서 다른 lib을 참조 가능하다고 한다. kotlin-native는 konanc를 활용해서 코틀린 코드를 컴파일 하면 실행에 필요한 모든 라이브러리를 함께 빌드하기 때문에 생성된 실행 파일이 좀 큰 편인데, JVM이 필요 없고 실행 파일만으로 실행되며 엄청 빠르다고 한다.


Hadi는 kotlin-native가 유닉스 OS 처럼 될 것을 기대하고 있었다. 25년을 기다렸는데 몇 년 더 못 기다리겠냐면서. Hadi의 세션을 줄줄이 들었더니 오랜만에 영어 폭탄을 맞아 어지럽고 정신이 몽롱했지만 오랜만에 세미나 참석이 참 유쾌했다. 아직 코틀린 세계에 모르는 것이 많아 공부할 것 투성이다. 제대로 이해한 것인지 찬찬히 문서를 찾아보며 다시 한번 점검 해야겠다.