Kotlin
A concise multiplatform language developed by JetBrains
Kotlin을 사용한 생산적인 서버측 개발: 업계 사례
Kotlin은 Java의 대안으로 만들어졌습니다. 즉, JVM 에코시스템 내에서의 애플리케이션 영역은 Java와 동일합니다. 여기에는 서버측 개발이 당연히 포함됩니다.
저희는 사용자가 서버측 애플리케이션 개발에 Kotlin을 이용했던 경험을 듣고 이 경험을 커뮤니티와 공유하려고 합니다!

Kotlin은 최근 몇 년 동안 Android 에코시스템에서 엄청난 성장을 이뤘습니다. 서버측 개발에 Kotlin을 채택하는 추세도 꾸준히 늘고 있습니다. 그러나 서버측 개발에 Kotlin의 채택을 고려 중인 회사로부터 종종 듣는 질문은 “이런 작업에 Kotlin을 이용하는 곳이 또 어디있나요?”입니다.
회사는 기술을 선택할 때 올바른 결정을 내리기를 원합니다. 그들은 다른 회사들도 동일한 목적으로 이러한 기술을 채택하고 성공을 거두고 있음을 확인하고 싶어합니다.
이 게시글에서는 서버측 개발에 Kotlin을 채택한 몇몇 회사들을 간략하게 소개합니다. 동일한 목적으로 Kotlin 채택을 고려 중이라면 이 글이 결정을 내리는 데 도움이 되기를 바랍니다.
이 블로그 게시글은 Kotlin 1.4 온라인 이벤트의 발표 내용을 바탕으로 합니다. YouTube 채널에서 전체 동영상을 볼 수 있습니다.
Kotlin이어야 하는 이유는?
우리는 Kotlin을 사용하는 개발자들과 끊임없이 이야기하면서 서버측 개발에 Kotlin을 사용하는 크고 작은 회사에 대해 알게 되었습니다. 우리는 기업들이 Kotlin을 선택하는 이유는 무엇이고 그들이 Kotlin을 통해 얻는 이점은 무엇인지 알아보는 데 늘 관심을 가지고 있습니다.
Kotlin에는 멋진 기능들이 많지만 저희와 대화를 나눈 사용자들이 가장 마음에 들어했던 기능을 집중 조명하겠습니다.
- 간결한 구문. 언어의 표현력이 높으면 코드가 간결해집니다. 작성할 코드가 적을수록 최종 애플리케이션에 슬그머니 자리를 잡는 버그가 줄어들고, 최종 코드의 유지 관리가 쉬워집니다.
- Null-안전성. 이것은 개발자들이 가장 좋아하는 Kotlin 기능입니다. Kotlin의 유형 체계는 The Billion Dollar Mistake(10억 달러짜리 실수)라고도 알려진 null 참조가 코드에서 발생할 위험을 제거하는 것을 목적으로 하고 있습니다. 이 추가적인 안전 기능은 Kotlin의 컴파일러에 내장되어 있으므로 null 값을 역참조하는 문제가 줄어듭니다.
- Jave 상호 운용성. 호스트 플랫폼과의 상호 운용성은 생산성을 크게 높여줍니다! Kotlin을 사용하면 모든 프레임워크 및 라이브러리와 함께 Java 에코시스템을 활용할 수 있습니다. 또한 모든 Java 코드를 Kotlin으로 변환하지 않고도 기존 Java 프로젝트에 Kotlin을 점진적으로 도입할 수도 있습니다.
- Kotlin 코루틴. 명령형 프로그래밍 모델을 사용하여 비동기 코드를 쉽게 마스터할 수 있는 방법을 제공합니다. 코루틴은 많은 시스템 리소스를 절약하기 때문에 IO 작업이 많은 고부하 서버측 애플리케이션을 개발하는 데 특히 유용합니다. 코루틴 지원이 Spring Framework에 추가되면서 서버측 개발자가 이 기능을 이용하기가 더 쉬워졌습니다.
- Kotlin Multiplatform. Kotlin을 사용하는 개발자는 JVM, JavaScript, Android, iOS, 심지어 네이티브 애플리케이션과 같은 다양한 플랫폼을 개발 대상으로 삼을 수 있습니다. 서로 다른 플랫폼에서 실행되는 서로 다른 애플리케이션 사이에 코드를 공유하면 장점이 많은 것으로 나타났습니다.
이제 Kotlin 채택으로 개발을 한 단계 더 진전시킨 몇 가지 예를 살펴 보겠습니다.
JetBrains Space: 코드를 최대한 많이 재사용
JetBrains에서 Kotlin을 사용한다는 사실이 그리 놀랍지는 않을 것입니다. Kotlin은 도구뿐만 아니라 서비스에도 사용됩니다. KotlinConf 2019에서 발표된 팀 협업 플랫폼인 JetBrains Space는 Kotlin 및 Ktor 프레임워크로 구축되었습니다. Space는 JVM에서 실행되는 서버측 서비스, Android 애플리케이션, iOS 애플리케이션, 웹 애플리케이션, IDE 플러그인 등 모든 부분에 Kotlin을 사용합니다.
Kotlin Multiplatform 덕분에 코드의 상당 부분이 이러한 모든 애플리케이션 사이에서 공유됩니다. UI 및 서버측 코드에서 데이터 모델을 공유하는 것 외에도 Space는 뷰 모델, 유효성 검사 논리 및 공통 라이브러리도 공유합니다. 그러나 UI 구성 요소는 플랫폼별로 다르기 때문에 Kotlin 코드가 대상으로 하는 각 플랫폼의 상호 운용성도 중요합니다.
Kotlin Multiplatform
Kotlin이 여러 플랫폼에 대한 개발을 어떻게 지원하는지 쉽게 이해할 수 있게 다음 예를 살펴 보겠습니다. 여러 플랫폼(JVM, JavaScript, iOS)에 사용하려는 데이터 클래스가 있다고 가정해 보겠습니다.
String 클래스는 Kotlin의 표준 라이브러리에 속하지만 LocalDate에는 속하지 않습니다. 애플리케이션이 대상으로 하는 각 플랫폼에 대해 LocalDate로 사용할 클래스를 지정할 수 있습니다. 이를 위해, 서로 다른 모듈이 실제 구현을 제공한다고 가정하고 여러 플랫폼 사이에서 공유되는 공통 모듈에서 expect 키워드를 사용하여 LocalDate 클래스를 선언합니다. actual 키워드는 플랫폼별 코드에서 사용해야 하는 유형을 나타냅니다.
플랫폼을 특정하지 않은 코드는 프로젝트의 공통 모듈에서 한 번만 작성할 수 있습니다. 그러면 특정 플랫폼을 대상으로 하는 다른 모듈에서 공통 코드를 재사용합니다.
멀티플랫폼 개발을 위한 Kotlin 지원은, Android와 iOS 애플리케이션 사이에서 코드를 공유하는 데 이를 사용하는 모바일 개발자에게 특히 인기가 있습니다. 이에 대한 자세한 내용은 Kotlin Multiplatform Mobile 웹 사이트에서 확인할 수 있으며 다른 회사에서 이 기술을 사용한 사례를 읽어볼 수 있습니다.
Jira 소프트웨어: Kotlin 및 Spring Boot를 사용하는 마이크로서비스
또 다른 흥미로운 예는 Atlassian의 Jira입니다. Kotlin은 Atlassian에서 Jira Software 클라우드 제품 개발에 사용됩니다.
Jira는 사용자가 서버에 설치하던 독립실행형 모놀리식 Java 애플리케이션이었습니다. 그러나 Jira 클라우드가 도입됨에 따라 확장성을 높이기 위해 애플리케이션을 여러 서비스로 분해해야 할 필요성이 대두되었습니다.
클라우드로의 이동은 기술 스택을 업데이트할 수 있는 기회를 만들었으며 이것이 Kotlin이 등장하게 된 배경입니다. 개발자들은 이 언어 채택에 매우 만족했고, 만족감과 함께 생산성이 향상되었습니다! 이제 개발자들은 Spring Boot와 함께 Kotlin을 사용하여 중요한 사용자 경험을 강화하는 마이크로서비스를 구현하고 있습니다. Kotlin 및 Spring은 Jira Software, Jira Service Desk 및 Jira Core 등 전체 Jira 클라우드 제품군에서 사용됩니다.
Adobe: Kotlin 코루틴으로 고부하 서비스의 제약으로부터 해제
Adobe Experience Platform 팀이 서버측 개발에 Kotlin을 선호하는 이유에 대한 생각을 공유했습니다.
이 팀은 애플리케이션 백엔드가 모놀리식 Web 컨테이너에서 데이터 기반 애플리케이션의 분산 메시 구조로 진화했다고 말합니다. 이러한 애플리케이션은 많은 데이터를 처리하고 메세지를 수신 및 전송해야 하기 때문에, 지연 시간이 무엇보다 중요합니다.
그들은 서버측 개발에 Kotlin을 사용할 때의 주요 이점을 게시글에 남겼습니다. 또한 비동기 프로그래밍에 대한 지원이 가장 유익한 Kotlin 기능이라고 했습니다. Kotlin 코루틴은 결과 코드가 간단하고 유지 관리가 쉬워 “배우기 쉬운”이라는 표현으로 잘 설명됩니다.
“Kotlin을 사용하면 블로킹, 명령형 코드와 거의 유사하게 읽히는 ‘직접적 스타일’로 코드를 작성할 수 있습니다.”
애플리케이션은 상당히 I/O 집중적이어서 대기열, 다양한 데이터베이스 및 기타 서비스 등 외부 서비스에 의존해야 합니다. 그리고 이러한 네트워크 호출은 애플리케이션 처리량을 쉽게 저하시킬 수 있습니다. 따라서 Kotlin 코루틴은 이러한 사용 사례에 즉시 매력적으로 느껴졌습니다. 비동기식으로 전환하면 전체 처리량이 향상되고 결과적으로 하드웨어 리소스가 절약됩니다.
다른 이점들은 데이터 클래스, 안정적인 유형 체계, null 안전성 및 함수형 프로그래밍 지원 등 Kotlin이 가진 주요 언어적 기능들입니다. Kotlin의 유연한 구문을 사용하면 내부 DSL을 쉽게 만들 수 있습니다. 이것도 Adobe 엔지니어에게 매우 유용했던 부분인 것으로 보입니다. 이 팀은 Kotlin으로 DSL을 구축한 경험을 소개한 글도 작성했습니다.
Expedia Group: Kotlin을 이용한 GraphQL API 빌드
Expedia는 null-안전성이 보장된 컴파일러, 언어의 간결함 및 완전한 Java 상호 운용성을 이유로 Kotlin을 채택했습니다. Java와의 상호 운용성 덕분에 애플리케이션을 완전히 다시 작성하지 않고도 점진적으로 Kotlin을 통합할 수 있었습니다. Java 상호 운용성은 또한 Expedia가 Kotlin 애플리케이션을 Java 라이브러리와 쉽게 통합하고 기존 JVM 에코시스템을 완전히 활용할 수 있는 토대가 되었습니다.
Kotlin 코루틴은 이 언어가 광범위하게 채택되는 데 중요한 기여를 했습니다. 이를 통해 개발자는 명령형 방식으로 완전히 비동기식 코드를 작성할 수 있으므로 더 읽기 쉽고 유지 관리하기 쉬운 코드가 생성됩니다. Spring Framework는 Expedia에서 광범위하게 사용되며, 버전 5.2부터는 WebFlux와 코루틴 간의 상호 운용성도 확보되어 있습니다. Expedia 엔지니어들에게 이것은 Spring과 Reactive 스택을 보다 명령적으로 활용할 수 있게 해준 획기적인 전환점이었습니다.
최근, Expedia는 GraphQL로 전환하고 모든 프런트엔드 애플리케이션을 지원하는 단일 API 게이트웨이를 구축하기로 결정했습니다. 이를 위해 Kotlin의 강력한 리플렉션 라이브러리를 적용하여 소스 코드에서 직접 GraphQL 스키마를 생성했습니다. 이렇게 만들어진 라이브러리 세트인 graphql-kotlin은 매우 유용한 것으로 평가 받고 있습니다. 이러한 라이브러리는 오픈 소스였으며 이제 GitHub에서 호스팅됩니다.
KotlinConf 2019에서 Dariusz Kuc와 Guillaume Scheibel은 graphql-kotlin과 함께 Spring Boot의 기능을 활용하는 방안에 대해 발표 했습니다. 여기에서 그 발표를 다시 시청할 수 있습니다.
요약
이 게시글에서는 서버측 개발을 위한 Kotlin 채택의 몇 가지 예를 살펴보았습니다. JetBrains, Adobe, Expedia 및 Atlassian에서 Kotlin은 성능 지표에 매우 민감한 비즈니스에 중요한 애플리케이션을 지원합니다. 이는 Kotlin이 웹 애플리케이션 및 서비스 개발에 적합한 성숙한 프로그래밍 언어임을 보여줍니다.
이 게시물은 Anton Arhipov가 작성한 Productive Server-Side Development With Kotlin: Stories From The Industry를 번역한 글입니다.
Subscribe to Kotlin Blog updates
Discover more
Эффективная разработка серверных приложений на Kotlin: истории разработчиков
Kotlin создавался как альтернатива Java, а значит, и область его применения в экосистеме JVM должна быть такой же, как у Java. Разработка серверных приложений не исключение.
Мы хотели бы узнать, как вы разрабатываете серверные приложения на Kotlin, и рассказать о вашем опыте другим.

В последние годы популярность Kotlin среди Android-разработчиков значительно выросла. В то же время язык все чаще используют и для серверной разработки. Компании, рассматривающие возможность перехода на Kotlin, часто спрашивают нас: «Кто еще использует Kotlin для серверной разработки?».
Выбирая технологию, разработчики хотят быть уверены в своем решении. Они ищут подтверждения тому, что другие компании успешно используют эту технологию для решения аналогичных задач.
В этом посте мы рассказываем о нескольких компаниях, которые выбрали Kotlin для серверной разработки. Надеемся, это поможет вам принять решение, если вы планируете использовать Kotlin для тех же целей.
Эта статья основана на материалах с онлайн-конференции Kotlin 1.4. Видео можно посмотреть на нашем YouTube-канале.
Почему Kotlin?
Мы регулярно общаемся с Kotlin-разработчиками и знаем довольно много компаний, больших и маленьких, в которых Kotlin используется для разработки на стороне сервера. Нам интересно узнавать, почему компании выбирают Kotlin и какие преимущества им это дает.
Пользователи, с которыми мы пообщались, больше всего оценили следующие особенности Kotlin:
- Компактный синтаксис. Благодаря выразительности языка, Kotlin-код максимально лаконичен. Чем меньше кода вы пишете, тем меньше ошибок закрадывается в приложение и тем проще поддерживать окончательный код.
- Null-безопасность. Это свойство особенно нравится разработчикам. Система типов в Kotlin нацелена на то, чтобы устранить опасность обращения к null-значениям, более известную как «ошибка на миллиард». Эта функция безопасности встроена в компилятор Kotlin, что уменьшает количество проблем с разыменованием нулевых значений.
- Совместимость с Java позволяет работать значительно продуктивнее. Программируя на Kotlin, можно пользоваться всеми фреймворками и библиотеками экосистемы Java. Вы также можете постепенно внедрять Kotlin в существующий Java-проект без необходимости переписывать весь Java-код на Kotlin.
- Корутины. Это простой способ писать асинхронный код в рамках модели императивного программирования. Корутины особенно полезны при разработкие высоконагруженных серверных приложений с большим количеством операций ввода-вывода, поскольку экономят много системных ресурсов. С появлением поддержки корутин в Spring Framework пользоваться ими в серверной разработке стало еще проще.
- Kotlin Multiplatform. На Kotlin можно разрабатывать приложения под разные платформы: JVM, JavaScript, Android, iOS, а также нативные приложения. Возможность использовать общий код в приложениях, работающих на разных платформах, по мнению разработчиков, оказалась очень полезной.
Давайте посмотрим на примеры эффективного программирования на Kotlin.
JetBrains Space: масштабное переиспользование кода
Разумеется, в JetBrains мы много пишем на Kotlin, разрабатывая с его помощью не только инструменты, но и сервисы. JetBrains Space, платформа для командной работы, которую мы представили на KotlinConf 2019, построена на Kotlin и фреймворке Ktor. В Space все написано на Kotlin: серверные сервисы на JVM, Android и iOS-приложения, веб-приложение и плагин для IDE.
Благодаря Kotlin Multiplatform все эти приложения используют большой объем общего кода. Помимо общей модели данных в интерфейсе и на стороне сервера, в Space также используется общая модель представления, логика валидации и общие библиотеки. Однако UI-компоненты для каждой платформы свои, поэтому совместимость играет важную роль.
Kotlin Multiplatform
Чтобы у вас было представление о кросс-платформенной разработке на Kotlin, рассмотрим такой пример. Допустим, есть класс данных, который мы хотим использовать для нескольких платформ (JVM, JavaScript, iOS):
Класс String принадлежит стандартной библиотеке Kotlin, а LocalDate — нет. Мы можем указать, какой класс следует использовать в качестве LocalDate для каждой платформы. Для этого в общем модуле, который используется на разных платформах, мы объявляем класс LocalDate с помощью ключевого слова expect, предполагая, что разные модули обеспечат реальную реализацию. Ключевое слово actual указывает, какой тип следует использовать в платформенном коде:
Платформенно-независимый код можно написать только один раз в общем модуле проекта. Такой код затем будет использоваться разными модулями, предназначенными для конкретных платформ.
Кросс-платформенные возможности Kotlin особенно популярны среди мобильных разработчиков, которые используют общий код в Android и iOS-приложениях. На сайте Kotlin Multiplatform Mobile можно подробнее узнать о технологии и о том, как ею пользуются в разных компаниях.
Jira Software: микросервисы с Kotlin и Spring Boot
Еще один интересный пример — Jira. Atlassian использует Kotlin для разработки облачных продуктов Jira Software.
Раньше Jira была автономным монолитным Java-приложением, которое пользователи устанавливали на свои серверы. Однако с появлением облачной версии возникла необходимость разделить приложение на несколько сервисов для лучшего масшибирования.
Переезд в облако был поводом обновить стек технологий, и тут не обошлось без Kotlin. Разработчики с удовольствием перешли на новый язык и оценили повышение производительности. Теперь они используют Kotlin и Spring Boot для реализации микросервисов, которые улучшают работу важных UX-аспектов. Kotlin и Spring используются во всем семействе облачных продуктов Jira — в Jira Software, Jira Service Desk и Jira Core.
Adobe: неблокирующее программирование с корутинами Kotlin для высоконагруженных сервисов
Команда Adobe Experience Platform рассказала, почему они предпочитают Kotlin для серверной разработки.
По их словам, бекенд превратился из монолитных веб-контейнеров в распределенную сеть приложений, управляемых данными. Эти приложения должны обрабатывать большой объем данных, принимать и отправлять сообщения, и все с максимально низкой задержкой.
В своей статье команда Adobe перечисляет основные преимущества серверной разработки на Kotlin и называет поддержку асинхронного программирования наиболее ценной возможностью языка. Они пишут, что корутины легко освоить, а код получается понятным и простым в обслуживании.
«На Kotlin мы можем писать код в „прямом стиле“, который выглядит почти как блокирующий императивный код».
В приложениях много операций ввода-вывода, поскольку они зависят от внешних служб, например очередей, различных баз данных и других сервисов. Такие сетевые вызовы могут значительно снизить пропускную способность приложений. В этом случае корутины оказались привлекательным решением. Переход на асинхронное программирование увеличивает общую производительность и, следовательно, экономит аппаратные ресурсы.
Другие важные особенности Kotlin: классы данных, крепкая система типов, null-безопасность и поддержка функционального программирования. Гибкий синтаксис Kotlin позволяет с легкостью создавать собственные предметно-ориентированные языки. Этот аспект тоже оказался довольно полезен для инженеров Adobe. Почитайте, что они рассказывают о своем опыте.
Expedia Group: построение API GraphQL с помощью Kotlin
Expedia начала использовать Kotlin из-за гарантий null-безопасности, лаконичности языка и его полной совместимости с Java. Эта совместимость позволила постепенно интегрировать Kotlin в проекты без необходимости полностью переписывать приложения. Кроме того, Expedia удалось легко интегрировать Kotlin-приложения с Java-библиотеками и пользоваться существующей экосистемой JVM.
Корутины стали одной из главных причин популярности Kotlin. Они позволяют разработчикам писать полностью асинхронный код императивным способом — такой код легче читать и поддерживать. Разработчики Expedia активно пользуются Spring Framework, и, начиная с версии 5.2, в нем поддерживается совместимость между WebFlux и корутинами. Для инженеров Expedia это стало важным изменением, позволившим более эффективно использовать стек Spring и Reactive.
Недавно Expedia решила перейти на GraphQL и создать единый API-шлюз для работы всех клиентских приложений. Для этого они использовали библиотеку Kotlin для работы с рефлексией, чтобы создавать схемы GraphQL прямо из исходного кода. Полученный набор библиотек graphql-kotlin с открытым исходным кодом оказался весьма полезным. Теперь он размещен на GitHub.
На KotlinConf 2019 Дариуш Кук и Гийом Шайбель рассказали, как использовать возможности Spring Boot вместе с graphql-kotlin. Вот видео этого доклада:
Мы поделились примерами использования Kotlin для серверной разработки. В JetBrains, Adobe, Expedia и Atlassian на Kotlin написаны важные приложения, которые очень чувствительны к показателям производительности. Это говорит о том, что Kotlin — зрелый язык программирования, подходящий для разработки веб-приложений и сервисов.
Ваша команда Kotlin
The Drive to Develop
Subscribe to Kotlin Blog updates
Discover more
Productive Server-Side Development With Kotlin: Stories From The Industry
Kotlin was created as an alternative to Java, meaning that its application area within the JVM ecosystem was meant to be the same as Java’s. Obviously, this includes server-side development.
We would love to hear about your experience with Kotlin for developing server-side applications and share your experience with the community!

Kotlin has experienced immense growth in the Android ecosystem in recent years. The adoption of Kotlin for server-side development is growing steadily as well. However, the question we often get from companies considering adopting Kotlin for server-side development is “Who else is using Kotlin for this?”.
Companies want to be sure that they are making the right decision when choosing technologies. They are looking for confirmation that other companies are successfully employing these technologies for the same intended purpose.
In this post, we would like to briefly highlight a few companies that have adopted Kotlin for server-side development. We hope that this will help you make the decision if you are considering adopting Kotlin for the same purposes.
The blog post is based on the presentation content from Kotlin 1.4 Online Event. You can watch the full video at our YouTube channel.
Why Kotlin?
We are constantly talking to developers who use Kotlin, and we have learned about quite a few companies, big and small, that use Kotlin for server-side development. We’re always interested in finding out why companies are choosing Kotlin, and what benefits they gain from it.
There are a lot of nice features in Kotlin, but we’ll highlight those that the users we’ve spoken with liked the most:
- Concise syntax. The expressiveness of the language results in concise code. The less code there is to write, the fewer bugs sneak into the final application, and the more maintainable the final code is.
- Null-safety. This is the Kotlin feature that developers like the most. Kotlin’s type system is aimed at eliminating the risk of null references from code, also known as The Billion Dollar Mistake. This extra safety feature is built into Kotlin’s compiler, resulting in fewer issues with dereferencing null values.
- Java-interoperability. Interoperability with the host platform is a serious productivity booster! With Kotlin, you can leverage the Java ecosystem, with all its frameworks and libraries. It is also possible to introduce Kotlin gradually into an existing Java project without having to convert all the Java code to Kotlin.
- Kotlin Coroutines. These offer an easy way to master asynchronous code with an imperative programming model. Coroutines are especially useful for developing high-load server-side applications with a lot of IO operations, as they save a lot of system resources. The fact that Coroutines support was added to the Spring Framework made it even easier to take advantage of this feature for server-side developers.
- Kotlin Multiplatform. With Kotlin, developers can target different platforms – JVM, JavaScript, Android, iOS, and even native applications. The ability to share code between different applications running on different platforms turned out to be quite a useful feature.
Now let’s take a look at a few examples where Kotlin takes development to the next level.
JetBrains Space: extreme code reuse
You won’t be surprised to learn that we use Kotlin at JetBrains. We use it not only for tools but also for services. JetBrains Space, a team collaboration platform announced at KotlinConf 2019, is built with Kotlin and the Ktor framework. Space uses Kotlin for everything: server-side services that run on JVM, an Android application, an iOS application, the web application, and an IDE plugin.
Thanks to Kotlin Multiplatform, a large portion of the code is shared between all these different applications. In addition to sharing the data model across the UI and server-side code, Space also shares the view model, validation logic, and common libraries. The UI components are platform-specific, however, so interoperability is also important for each platform that Kotlin code targets.
Kotlin Multiplatform
Just to give you an idea of how Kotlin supports development for multiple platforms, let’s take a look at the following example. Suppose there’s a data class that we want to use for multiple platforms (JVM, JavaScript, iOS):
The String class belongs to Kotlin’s standard library but not LocalDate. We can specify what class should be used as LocalDate for each platform that the application targets. To do this, in the common module that is shared across different platforms, we declare the LocalDate class by using the expect keyword, assuming that the different modules will provide the real implementation. The actual keyword indicates what type should be used in the platform-specific code:
The code that is not platform-specific can be written just once, in the common module of the project. The common code is then reused by the different modules that target specific platforms.
Kotlin support for multiplatform development is especially popular among mobile developers, who use it to share code between Android and iOS applications. You can learn more about this on the Kotlin Multiplatform Mobile website, and you can read about other companies’ experiences with the technology.
Jira Software: Microservices with Kotlin and Spring Boot
Another interesting example is Atlassian’s Jira. Kotlin is used at Atlassian for developing Jira Software cloud products.
Jira used to be a standalone monolithic Java application that users installed on their servers. However, with the introduction of Jira cloud, the need emerged to decompose the application into multiple services in order to scale it better.
The move to the cloud created an opportunity to update the technology stack, and this is how Kotlin came into the picture. The developers felt happy adopting the language, and with happiness comes a productivity boost! Now they use Kotlin with Spring Boot to implement microservices that power critical user experiences. Kotlin and Spring are used across the entire Jira cloud family — in Jira Software, Jira Service Desk, and Jira Core.
Adobe: going lock-free with Kotlin coroutines for high-load services
The Adobe Experience Platform team shared their thoughts on why they prefer Kotlin for server-side development.
They point out that application backends have evolved from monolithic web containers into a distributed mesh of data-driven applications. These applications have to process a lot of data, receive and send messages, and everything is latency-critical.
In their article, they list the key benefits of using Kotlin for server-side development. Support for asynchronous programming is cited as the most valuable Kotlin feature. Kotlin coroutines are described as “easy to learn”, with the resulting code being straightforward and easy to maintain.
“With Kotlin, we can write code in ‘direct style’ that reads almost like blocking, imperative code.”
The applications are quite I/O-heavy, having to rely on external services like queues, various databases, and other services. And these network calls can easily degrade application throughput. Therefore, Kotlin coroutines were immediately appealing for their use case. Going asynchronous improves overall throughput and consequently saves hardware resources.
The other benefits are the key language features in Kotlin: data classes, the sound type system, null safety, and support for functional programming. Kotlin’s flexible syntax makes it easy to create an internal DSL. This is something that appears to have been quite useful for Adobe engineers, too. They also wrote an article about their experience of building a DSL with Kotlin.
Expedia Group: building GraphQL APIs with Kotlin
Expedia adopted Kotlin because of its null-safety compiler guarantees, the conciseness of the language, and its full Java interoperability. Interoperability with Java made a gradual Kotlin integration possible without having to fully rewrite applications. Java interoperability also allowed Expedia to easily integrate Kotlin applications with Java libraries and fully utilize the existing JVM ecosystem.
Kotlin coroutines were a critical factor in the wide adoption of the language. They allow developers to write fully asynchronous code in an imperative way, which leads to more readable and maintainable code. The Spring Framework is used heavily at Expedia, and starting with version 5.2 it introduced interoperability between WebFlux and coroutines. For the engineers at Expedia, this was a game changer that made it possible to leverage the Spring and Reactive stack in a more imperative way.
Recently, Expedia decided to move toward GraphQL and build a single API gateway to power all frontend applications. To achieve this, they applied Kotlin’s powerful reflection library to generate the GraphQL schema directly from the source code. The resulting set of libraries, graphql-kotlin, turned out to be quite useful. They were open-sourced and are now hosted on GitHub.
At KotlinConf 2019, Dariusz Kuc and Guillaume Scheibel talked about how to utilize the power of Spring Boot together with graphql-kotlin. Here’s the video:
Summary
In this article we shared a few examples of Kotlin adoption for server-side development. At JetBrains, Adobe, Expedia, and Atlassian, Kotlin powers business critical applications that are highly sensitive to performance metrics. This shows that Kotlin is a mature programming language suitable for developing web applications and services.
