O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

백엔드 서버 개발과 코틀린의 조합

2.322 visualizações

Publicada em

GDG Daejeon 2019에서 발표한 자료입니다.
코틀린을 이용해 백엔드 서버를 개발한 경험을 바탕으로,
백엔드 개발에 필요한 코틀린의 프레임워크와 라이브러리를 소개합니다.

Publicada em: Tecnologia
  • I like this service ⇒ www.HelpWriting.net ⇐ from Academic Writers. I don't have enough time write it by myself.
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui

백엔드 서버 개발과 코틀린의 조합

  1. 1. 백엔드 서버 개발과 코틀린의 조합 김대석 SI Analytics
  2. 2. 발표자 소개 김대석 / SI Analytics 10년간 천리안 위성 수신 처리 시스템을 개발 현재는 인공 지능을 이용한 위성 영상 분석 시스템의 서버를 개발 중 C++(10년) -> Java(5년) -> Kotlin(6개월) 2
  3. 3. CONTENT • 코틀린 소개 • 백엔드 프레임워크 • 기타 라이브러리 3
  4. 4. 코틀린 소개 4
  5. 5. 언어 개발 목적 젯브레인에서 인텔리 J를 플랫폼으로 하는 IDE 들은 모두 자바로 개발되고 있었다. 우리는 모던하고 강력하며 빠르게 진화하는 언어인 C#으로 개발하는 닷넷 팀 의 동료들이 너무 부러웠다. 하지만 우리는 자바를 대신할 만한 언어를 찾을 수 없었다. 5 코틀린 인 액션 – 지은이의 말 중
  6. 6. 언어 개발 목적 그래서 우리가 만들었습니다 6 젯브레인
  7. 7. 특징 • JVM 기반 범용 언어 • 모던 문법 적용 • 기존 자바 코드와 완전히 호환 • 인텔리J IDE가 자바 코드를 코틀린 코드로 변환해 줌 7
  8. 8. 히스토리 • 젯브레인에서 개발 2011년 공개 • 구글 2017년 공식 안드로이드 언어로 채택 8
  9. 9. 문법적 설탕 • 간결한 문법: 세미콜론 없음, new 키워드 없음, 타입 추론, 람다 식 • 변경 불가능한 변수, if / try 식 • 싱글톤, 초기화 지연 • 널 안정성, 엘비스 연산자 • 스마트 캐스트, when 문 • 데이터 클래스 • 확장 함수 9
  10. 10. 문법적 설탕 • 간결한 문법 • 세미콜론 없음, new 키워드 없음, 타입 추론, 람다식 10
  11. 11. 문법적 설탕 • 변경 불가능한 변수, if / try 식 11
  12. 12. 문법적 설탕 • 싱글톤, 초기화 지연 12
  13. 13. 문법적 설탕 • 널 안정성, 엘비스 연산자 13
  14. 14. 문법적 설탕 • 스마트 캐스트, when 문 14
  15. 15. 문법적 설탕 • 데이터 클래스 • toString(), hashCode(), equals(), copy() 메서드 생성 15 Output:
  16. 16. 문법적 설탕 • 확장 함수 • 기존 API의 클래스를 함수 호출의 주체로 만들 수 있다 16
  17. 17. 높은 그의 벽 • 널 안정성, 엘비스 연산자 • Java 라이브러리 호출을 통한 결과는 모두 Nullable이라 보면 됨 • 받아온 변수를 사용할 때마다 널 안정성 체크 필요 • 코틀린 코드의 비중이 늘면 점점 깔끔해짐 (하지만 현실은 시궁창) 17
  18. 18. 높은 그의 벽 • DSL (Domain Specific Language) • 많은 코틀린 라이브러리가 DSL을 사용 • 도메인에 특화된 언어라 좋다지만 모르는 사람이 보기엔 그들만의 언어 • 내부 동작 파악하기 어려움 18
  19. 19. 높은 그의 벽 • 코루틴 (Coroutine) • 쓰레드 풀을 관리 해 주는 경량 비동기 라이브러리 • 코틀린 1.3 부터 정식 사용 • 쉽게 비동기 처리 및 동기화 수행 • 잘 쓰려면 공부, 공부, 공부 19
  20. 20. 코틀린 선택 이유 (Officially) 20 생산성: 상 안정성: 중상 생태계: 상 대중성: 하 발전성: 상
  21. 21. 코틀린 선택 이유 (Unofficially) • 자바로 서버 개발 • 코틀린 언어를 접하고 스터디 • 자바에 비해 체감 생산성 30~40% 향상 • 이직 • 회사의 첫 백엔드 개발자 당첨 • 혼자서 백엔드 개발 처음부터 시작 • 너 하고 싶은 거 해 • 코틀린, Why not? 21 비교 • 스칼라를 먼저 접하고 스터디 • 스칼라는 생산성은 높으나 많은 개념들을 다 알지 못하고 쓰면 잘못 쓰기 쉬움
  22. 22. 백엔드 프레임워크 22
  23. 23. 백엔드 개발 시 필요한 것들 • 웹 서버 • 테스트 • 의존성 주입 • 데이터베이스 • 데이터 전송 형식 • 메세지 큐, RPC, 등등... 여기선 위의 것들 위주로 23
  24. 24. 백엔드 개발 시 필요한 것들 • 이 모든 것들을 해결해 주는 마법 같은 그 이름 – 스프링 프레임 워크 • 코틀린도 정식 지원한다던데? • 하지만... • 어노테이션 주도 개발이 싫어요! • 스프링 매직이 싫어요! 24
  25. 25. 백엔드 개발 시 필요한 것들 자바에 스프링이 있고 스칼라에 AKKA가 있다면 코틀린엔 그런거 없다! 25
  26. 26. 프레임워크 선정 • 코틀린으로 개발된 프레임워크 위주 • 가볍고 주요 기능에 특화되어 있는 프레임워크 • 러닝 커브가 낮은 프레임워크 • 안정성도 중요 26
  27. 27. 프레임워크 선정 • 유용한 페이지 - https://kotlin.link/ 27
  28. 28. 웹 서버 프레임워크 (Ktor) • 링크: https://github.com/ktorio/ktor • 젯브레인에서 만들고 공식 지원하는 오픈소스 프로젝트 • Request-response, Authentification, Session, Websocket, Redirect 등 제공 28
  29. 29. 웹 서버 프레임워크 (Ktor) • 내장 서버 엔진 활용 가능 (Netty, Jetty, Tomcat) 29
  30. 30. 웹 서버 프레임워크 (Ktor) • 팁 - 모듈화 예제 • 확장 함수 정의 형태로 모듈화 하여 코드 작성 가능 30
  31. 31. 웹 서버 프레임워크 (Ktor) • 서버 테스트 지원 31
  32. 32. 테스트 프레임워크 (kotlintest) • 링크: https://github.com/kotlintest/kotlintest • 스칼라테스트의 영향을 받아 제작 32
  33. 33. 테스트 프레임워크 (kotlintest) • 여러가지 테스트 작성 방식 제공 33
  34. 34. 테스트 프레임워크 (kotlintest) • 다양한 Matcher 제공 34
  35. 35. 테스트 프레임워크 (Mockito-Kotlin) • Java Mockito 코틀린 Wrapping 라이브러리 • Test double, Stubbing, Spying 등 제공 35
  36. 36. 의존성 주입 프레임워크 (koin) • 링크: https://insert-koin.io/ • 경량 의존성 주입 프레임워크 • 의존성 주입이란? • 구성 요소(클래스 등)의 의존 관계가 내부가 아닌 외부에서 설정하는 것 36
  37. 37. 의존성 주입 프레임워크 (koin) 37
  38. 38. 데이터베이스 (exposed) • 링크: https://github.com/jetbrains/Exposed • 코틀린으로 제작된 경량 SQL 라이브러리 • Java의 Requery와 비슷한 형태 • 아직 V1.0이 릴리즈 되지 않음 (0.17.7) 38
  39. 39. 데이터베이스 (exposed) 39
  40. 40. 데이터베이스 • Exposed는 정식 릴리즈 안 한 것도 문제였지만 Spatial Database 지원이 필요한데 안 하는 것이 문제 • Requery도 마찬가지로 Spatial Database 지원 안 함 • Java Hibernate 선택 • 결국 Annotation 지옥 40
  41. 41. 데이터베이스 • 팁 - 엔티티의 타입으로 DB 필드 성격 파악 가능 • DB의 Generation 여부 • 필드 정보 삽입 이후 변경 가능 여부 • Nullable 여부 41
  42. 42. 데이터 전송 • Klaxon: Json Parser for Kotlin • Kotson: Gson 코틀린 wrapping 라이브러리 • Jackson-module-kotlin: Jackson 코틀린 wrapping 라이브러리 • Protobuf 선택 • 이 기종 간, 언어 간 데이터 전송 라이브러리 • 메시지 정의 후 프로토 파일 컴파일 시 Java 코드 생성됨 42
  43. 43. 데이터 전송 (ProtoBuf) • 메시지 정의 • 사용 43
  44. 44. 44 기타 라이브러리
  45. 45. HTML 라이브러리 (kotlinx.html) • 동적인 HTML과 DOM을 쉽게 생성할 수 있도록 DSL을 제공하는 라이브러리 • 아직 V1.0이 릴리즈 되지 않음 (v0.6.12) • 아직까지는 간단한 HTML 생성에 활용하기 좋은 정도 45
  46. 46. 로그 라이브러리 (kotlin-logging) • Java SLF4J를 Wrapping 한 라이브러리 • 로그를 쉽게 사용할 수 있도록 API 제공 46
  47. 47. CLI 라이브러리 (clikt) • 커맨드 라인 도구를 쉽게 제작할 수 있도록 도와주는 라이브러리 • 다양한 Argument 및 옵션 제공 • Bash Autocomplete 기능 제공 47
  48. 48. CLI 라이브러리 (clikt) 48
  49. 49. 정적 검사 도구 • Ktlint, Detekt, Kotlinter • Kotlinter 사용 중 • Gradle 플러그인 제공 • Gradle Task로 코드의 포맷을 빠르게 자동 수정 가능 49
  50. 50. Q&A 50

×