logo
logo
백엔드
Ktor
멀티 플랫폼에 대한 지원을 목적으로 개발된 코틀린 기반 프레임워크이며, 코루틴 기반의 비동기 서버와 HTTP 클라이언트를 모두 지원한다.
StackOverflow 질문 수: 1358
Github Stars : ★ 13439
사용 기업
종합
모빌리티
블록체인
교육
techstack-logo
SK플래닛
techstack-logo
지바이크
techstack-logo
오퍼스엠
techstack-logo
매스프레소
techstack-logo
현대자동차그룹
기술 블로그 글
카카오페이
Ktor로 팀 환경에 맞는 API 서버 구현하기
bri.ghten 다른 기본적인 예제 포스팅과 다르게 실제로 팀 내에서 Ktor를 서비스로 구성하는 과정을 같이 따라가 보면서 학습할 수 있었던 좋은 글입니다.dory.m Ktor 써보고 싶은 사람 손! Ktor를 활용해 서비스를 구성할 때 필요한 요소가 꾹꾹 눌러 담겨 있는 워니의 글 한번 보고 가세요~ 직렬화, 로깅, 메트릭 등에 대한 길잡이가 되어 줄 것입니다.안녕하세요. 카카오페이 후불결제TF 워니입니다.카카오페이는 혁신금융서비스로 소액후불결제업무(BNPL, Buy Now Pay Later)를 제공하고 있습니다. 저희 팀은 사용자들이 후불교통카드로 사용한 금액에 대해서 승인/청구/납부/연체 등을 관리하는 플랫폼을 개발/운영하고 있습니다.저는 새로운 환경을 프로젝트에 도입하는 것을 선호합니다. 이번에도 Ktor 환경을 팀 내에 도입해보고 싶었습니다. 하지만 도입해보기 전에 카카오페이의 환경과 팀의 개발 컨벤션에 맞게 구현될 수 있는지 확인이 필요했습니다. 구현 과정과 구현하며 느꼈던 점을 공유하고자 이 글을 작성했습니다. 이 글에서는 Ktor 환경으로 구현한 내용만 다루고 있습니다. Spring 프레임워크와 비교 분석한 내용은 Spring 공화국에서 Ktor 사용하기를 참고하시기 바랍니다.Ktor 애플리케이션을 만드는 방법은 크게 두 가지가 있습니다.• 직접 코틀린 프로젝트를 생성해서 의존성을 설정하는 방법• Ktor에서 제공하는 Ktor Generator 혹은 IntelliJ에서 Ktor Generator를 활용해 생성하는 방법기능별로 어떤 의존성이 필요한지 명확하게 알고 싶어 코틀린 프로젝트를 생성해서 의존성을 설정하는 첫 번째 방법을 선택했습니다.Ktor 애플리케이션을 만들기 위해 IntelliJ에서 Kotlin 프로젝트를 생성하고 Ktor Server 의존성을 설정했습니다.프로젝트 생성 다음으로는 서버에 대한 설정이 필요합니다. 서버 설정에도 두 가지 방법이 있습니다.• embeddedServer 방식: 서버를 실행하는 코드와 설정을 같이 작성(예시)저는 서버 설정의 가시성을 위해 EngineMain 방식을 선택했습니다.설정 파일을 에 작성했습니다. yaml로 작성한 설정 파일을 읽기 위해서는 추가 의존성이 필요했습니다.기본 구성을 마친 상태에서 main 함수를 실행하면 서버가 실행됩니다. 서버를 실행하고 을 호출하면 아래처럼 응답을 받을 수 있습니다.애플리케이션 로직과 별도로 공통된 처리 기능을 Ktor에서는 plugin이라고 부릅니다. 예를 들면 요청/응답 body의 json serialize, deserailize 기능이 plugin으로 제공됩니다.이렇게 제공되는 Ktor의 plugin들을 사용해서 카카오페이와 팀 개발 환경에 맞는 서버를 만들어 보겠습니다.Ktor에서 json 형식을 사용하기 위해서는 ContentNegotiation 의존성 설정을 하고 plugin을 설치해야 합니다. ContentNegotiation plugin은 json 뿐만 아니라 다양한 포맷의 serializer를 적용할 수 있습니다.카카오페이
kotlin
ktor
SK텔레콤
Ktor프레임웍 #1 : 소개(UP&RUNNING)
Kotlin언어을 개발했고, 개발 환경 IDE로 유명한 Jetbrain사에서 개발한 경량 웹 프레임워크인 Ktor를 이용한 간단한 REST-API서버 개발 소개 글입니다. Ktor는 Pivotal사의 Spring 프레임워크에 비해서 상당히 경량화된 프레임워크(AOP,DI같은 고급(?) 기능들은 지원하지 않습니다.)이고, 코틀린과 코루틴에 대한 기본 지식이 있다면 러닝 커브가 낮습니다. REST API서버를 실행하기 위한 기본적인 프로젝트 셋업 및 상용 배포를 위한 설정(배포 환경에 따른 설정 파일 분리, 데이터독 로그 연동을 위한 설정 등등..)위주로 알아 보겠습니다.Ktor는 다음과 같은 독특한 특징을 가지고 있습니다.• None Ktor는 Kotlin의 코루틴을 활용하여 비동기 처리를 기본적으로 지원합니다. 이는 성능을 향상시키고, 리소스 사용을 최적화하는 데 도움이 됩니다.• None Ktor는 Kotlin의 멀티플랫폼 기능을 활용하여 JVM뿐만 아니라 Kotlin/Native, Kotlin/JS 등 다양한 플랫폼에서 사용할 수 있습니다. 이는 다양한 환경에서의 애플리케이션 개발을 용이하게 합니다.• None Ktor는 설정이 간편하고 경량 서버로 설계되어 빠르게 구동할 수 있습니다. 이는 빠른 배포와 유연한 확장이 필요한 현대적 MSA(Microservices Architecture) 구조에 적합합니다.위와 같이 좋은 특징을 가지고 있지만, 아직 아쉬운 점도 많은 것이 사실 입니다.• None Ktor의 ecosystem가 개발자 커뮤니티는 아직 한참 확장 중입니다. Spring과 같이 오랜 기간 개발된 프레임워크에 커뮤니티의 성숙도나, 지원하는 third-party 패키지들이 아직 부족합니다.• None 출현한지 얼마 되지 않은 프레임워크인 관계로 Best Practice나 몇몇 기능들은 아직 아쉬운 부분들이 있습니다.아쉬운점들도 있지만, 저같은 경우 위의 특징들중 첫번째와 3번째 특징 때문에 관심을 가지게 되었고,팀에서 마침 AI Divergency프로젝트 때문에 MAS 컴포넌트 추가가 필요해서 프로젝트 셋업 작업을 진행 했고, 작업후 내용 정리 및 공유 차원에서 글을 작성 하는 중입니다.Ktor프로젝트 셋업을 위해서는 초기 프로젝트 생성용 싸이트를 이용하는 방법과 IntelliJ IDE를 이용하는 방법이 있습니다ktor에서 공식적으로 제공하는 프로젝트 생성 싸이트 https://start.ktor.io/settings 에 접속 합니다.이 싸이트에 접속해서 해야할 일은 크게 3가지 입니다.첫번째와 세번째에 대한 설명은 생략하도록 하겠습니다.(적절하게 입력해 주세요)두 번째 플러그인들 선택에 대해서 알아 보도록 하겠습니다.이외에도 DefaultHeaders, Forwared Headers, Static Content, CORS, DoubleReceive등등도 나중에 필요한 경우가 있을수 있을꺼 같지만,우선 단순한 REST API서버 개발을 목표로 한다면 위의 목록만으로도 충분 합니다.플러그인 선택까지 마친 후 download를
kotlin
ktor
카카오페이
Spring 공화국에서 Ktor 사용하기
안녕하세요. 10대들의 성공적인 금융관리 시스템을 개발하고 있는 영세그TF 베니입니다. 저는 실무 초기부터 Spring Framework(이하 Spring)를 사용해 개발을 시작했습니다. 단 몇 줄의 코드만으로 서비스를 쉽게 구성할 수 있고 온갖 필요한 기능은 다 있는 Spring의 매력에 빠졌습니다. 현재는 다른 서버 개발자들처럼 대부분의 프로젝트를 Spring으로 개발하고 서비스에 적용하고 있습니다.Spring을 사용하면서 개발 효율 면에서 큰 이점을 얻고 있다고 생각하지만 점점 거대해지는 Spring은 Microservice의 작은 인스턴스를 추구하는 현재의 서버개발 환경에서 아쉬운 점이 많았습니다. 그러던 중 우연히 Ktor를 알게 되어 성능 테스트, 낮은 러닝 커브, 개발 편의성 측면에서 도입을 검토했고 업무에 적용하기 적합하다는 판단을 내려 Ktor로 서비스를 구축하게 되었습니다.이런 경험을 토대로 이번 게시글에서는 Ktor의 성능 측정결과와 분석, 예시코드, Ktor의 장단점, Ktor를 언제 도입하면 좋을지 말씀드리고자 합니다. 이번 게시글은 Ktor와 Spring의 우위를 가리려는 목적은 아닙니다. Ktor를 사용해보고 싶은데 도입에 어려움이 많을 것 같고 안전성, 성능이 걱정되어 사용하기를 망설였던 분들에게 도움이 되기를 바랍니다.Jetbrains에서 크게 3가지 관점으로 Ktor의 장점을 소개합니다.저도 Ktor를 경험해 본 입장으로서 위의 3가지 장점에 크게 공감합니다.• Ktor 자체가 Kotlin으로 구축되어 있어 Kotlin으로 개발한다면 언어적으로 궁합이 잘 맞습니다. Spring은 자바로 개발되어 있어 언어적인 차이로 인하여 nullable처리나 호환성 이슈가 있지만 Ktor는 그렇지 않습니다. 또한, Ktor로 들어온 모든 요청은 시작부터 응답까지 Coroutine으로 처리되며 Coroutine을 따로 선언할 필요 없어 로직을 구현함에 있어 편리한 부분이 많았습니다.• Ktor는 가볍습니다. 원하는 기능만 선택적으로 사용해서 서버를 구축할 수 있고 Spring과 다르게 사용하지 않은 리소스까지 무분별하게 Bean으로 만들어 인스턴스화하지 않습니다. Ktor는 이미 만들어져 있는 공식 플러그인이나 직접 만든 커스텀 플러그인을 통해 다양한 모듈을 만들어 필요한 기능만 유연하게 추가합니다.• JetBrains에서 강력하게 지원해 주는 부분도 좋았습니다. 이 글을 쓰는 현시점에 Ktor 3.0.0 버전까지 출시되며 적극적인 활동을 하고 있습니다. IntelliJ IDEA에서 Ktor를 위한 프로젝트 설정도 지원하고 있습니다.Spring을 두고 굳이 Ktor를 써야 할 이유가 있을까요? 먼저, Ktor가 서버 Framework로 얼마나 적합한지를 확인하기 위해, 아래 3가지 관점으로 테스트를 진행했습니다.부팅 속도가 중요한 이유는 장애 발생으로 인해 인스턴스가 죽었을 때 빠르게 다시 살아나는 것이 필요하기 때문입니다. 인스턴스가 장애에서 빠르게 복구되어야 다른 인스턴스에 트래픽이 몰리는 현상을 방지할 수 있습니다.
ktor
spring
카카오엔터테인먼트
라이브채팅 플랫폼 구현기 1탄 : 개발 언어 및 기반기술 조사
2022년 초, 멜론뮤직어워드(MMA) 2022 행사를 준비하는 과정에서 기존 MMA 생중계 시 사용되는 댓글 시스템이 사용자 참여에 불편함이 있었고, 이를 해소하기 위해 '실시간 채팅 플랫폼'의 필요성이 대두되었습니다. 그래서 '실시간 채팅 플랫폼' 도입을 위한 3가지 방안을 검토했는데요. 자체 구축 채팅 플랫폼 카카오톡 소스 활용외부 채팅 플랫폼  어떤 방안을 선택할지 논의가 이어졌고, 복잡하고 다양한 내부 서비스(시스템)의 요구사항을 수렴하는 것이 가장 중요했기에 '자체 구축 채팅 플랫폼'으로 최종 결정하게 되었습니다. 그 당시 플랫폼개발실 산하 플랫폼개발2팀(현 파트너플랫폼개발팀)에서 개발을 맡게 되었고, 결정된 '실시간 채팅 플랫폼'의 사전 요구사항은 다음과 같았습니다.✔️ 동시 접속자 200,000 명 처리✔️ 채팅 메시지 전송/수신 max 1000ms(1초)✔️ 금칙어 관리(추가/제거) 실시간 적용✔️ 실시간 도배 탐지 ✔️ 채팅 메시지 영구 저장✔️ 실시간 채팅 지표 모니터링✔️ 채팅 meta정보 관리 위 요구사항을 5개월 정도의 짧은 시간 안에 분석/설계/구현/성능검증(테스트)까지 모두 완료해야 하는 매우 도전적인 프로젝트였는데요.Jace, Umid, Probe! 3명의 개발자가 '라이브채팅'이라는 프로젝트명을 확정한 시점부터 고군분투하며 플랫폼을 구현하고, 멜론뮤직어워드(MMA) 2022와 고막소년단 Live를 성공적으로 완수했을 때까지의 노력과 경험을 소개해보려고 합니다.   Umid / Probe / Jace    [Chapter 1] 개발 언어 및 기반기술 조사  1. 개발 언어 선정 가장 먼저 라이브채팅 플랫폼의 다양한 애플리케이션을 구현하기 위한 개발 언어를 선정했는데요. 후보군으로 Java, Kotlin, Go Lang, Erlang을 선정하고, 어떤 언어를 사용할지 개발자 입장에서 검토했습니다. 언어장점단점Java◽️ 참여 개발자 모두 익숙한 보편적인 언어◽️ 별다른 Study없이 바로 구현 가능◽️ 지겨운 NullPointerException 처리◽️ 불필요한 행사 코드 다수 필요◽️ Modern한 언어들의 기본적인 지원사항 지원이 늦음     - String Template     - Null SafetyKotilin◽️ Nullsafe◽️ 손쉬운 비동기 구현 (Coroutine)◽️ Java에 익숙한 개발자라면 Learning curve가 크지 않음◽️ 약간의 Learning curve 발생Go Lang◽️ CPU 연산에 있어서 Java, Kotlin 대비 빠른 처리 성능◽️ Java, Kotlin에 비해 보더 다 적은 Resource를 사용◽️ 개발 경험 없음◽️ 제대로 된 구현을 위한 일정 수준 이상의 Learning curve 발생◽️ Go Lang 기반 Eco system에 대한 경험 부족Erlang◽️ Facebook의 Erlang을 활용한 Chat 성능 개선 사례 보유  ◽️ 동시성 및 분산 시스템 개발에 유리◽️ 개발 경험 없음◽️ 제대로 된 구현을 위한 일정 수준 이상의 Learning
java
kafka
kotlin
ktor
nodejs
redis
연관 기술 스택
techstack-logo
Kotlin
techstack-logo
Spring
techstack-logo
SpringBoot
Copyright © 2025. Codenary All Rights Reserved.