728x90
반응형

원문제목 : What makes Kotlin the fastest Growing Language?

원문링크 : http://www.alignminds.com/blog/makes-kotlin-fastest-growing-language/

 

What makes Kotlin the fastest Growing Language? - ALIGNMINDS TECHNOLOGIES

Kotlin is an open-source, statically-typed language primarily developed by JetBrains programmers based in Saint Petersburg, Russia. Statically typed programming language means Kotlin performs type checking at compile-time as opposed to run-time. Java was o

www.alignminds.com

코틀린은 러시아 상트페테르부르크에 기반한 젯브레인즈의 개발자들이 개발한 오픈소스, 정적타입언어입니다.

코틀린이 정적타입언어인 이유는 런타임이 아닌 컴파일시점에 타입을 체크하기때문입니다.코틀린은 러시아 상트페테르부르크에 기반한 젯브레인즈의 개발자들이 개발한 오픈소스, 정적 타입 언어입니다. 코틀린이 정적 타입 언어인 이유는 런타임이 아닌 컴파일 시점에 타입을 체크하기 때문입니다.

 

자바는 가장 유명하고, 가장 즐겨 찾는 프로그래밍 언어였습니다, 하지만 여러 문제들과 언어적 한계를 겪은 많은 개발자들은 간절하게 문제점들이 해결되길 원했는데, 그때 젯브레인즈 개발자들이 자바보다 훨씬 효율적이라고 증명된 코틀린을  만들었습니다. 코틀린은 자바와 비교해서 여러 장점들을 가지고 있는데 그중에서 신뢰성, 효율성, 런타임 성능 그리고, 유지 보수 등이 이에 해당합니다, 거기에 자바와 상호 운용할 수 있으며 많은 자바 프레임웍, 라이브러리를 지원하여 통합하거나 양립할 수 있습니다. 또한, 코틀린은 간결하고, 깔끔하고, 이해하기 쉽게 작성할 수 있으며 적은 코드 라인으로도 문제를 해결할 수 있다는 것을 자랑하고 있어서 많은 개발자들 사이에서 인기를 얻으며 개발되고 있습니다.

 

코틀린은 최근 자바의 강력한 경쟁자가 되고 있는데 그 이유는 자바 개발자들이 공통적으로 문제라 생각하는 것들을 코틀린이 잘 해결해 주기 때문입니다. 2017년 5월에 코틀린은 구글로부터 안드로이드 공식 언어로 선정되었고, 젯브레인은 섬 이름에서 따온 코틀린으로 결정하였습니다. (코틀린은 상트페테르부르크 부근에 있는 섬 이름)

 

스택오버플로우에선 코틀린은 프로그래머들이 가장 선호하는 언어가 되어가고 있고, 파이썬이나 자바스크립트 같은 언어보다 더 인기가 높아지고 있다고 말했습니다. 특정 설문조사에 따르면 코틀린 개발자 전체의 약 80%가 프로그래밍 언어로 사용 중이며 약 30% 가 백엔드 서버 개발로 사용 중이고 나머지 30%는 SDK/라이브러리로 사용하고 있다고합니다.

쿄세라, 아틀라시안, 베이스캠프, 핀터레스트, 킵세이프는 이미 자신들의 모바일 애플리케이션을 코틀린을 사용해 개발하고 있습니다.

 

무엇이 코틀린을 빠르게 성장하는 언어로 만드는가?

1. 간결함 - 간결함은 코틀린이 다른 언어들과 비교해 가지고 있는 가장 큰 장점 중 하나이고, 동일한 문제를 더 적은 코드로 버그와 충돌을 줄이면서 해결할 수 있습니다. 또한, 좀 더 읽기 좋고 유지 보수하기 좋은 코드로 만들 수 있게 합니다.

 

2. 안정성 - 코틀린은 개발자로써 하여금 더 안정적이고 단단한 코드를 만들 수 있게 돕습니다. 코틀린의 컴파일러는 더 똑똑하고 더 안전하게 에러를 잡아내고 컴파일 시점에 체크하여 런타임 에러들을 줄여줍니다.

 

3. 상호 운용 가능 - 코틀린은 전체적으로 자바와 상호운용 가능합니다. 기존에 존재하는 코드 베이스, 안드로이드에 존재하는 모든 라이브러리들 모두 코틀린과 같이 사용할 수 있습니다.

 

4. 더 나은 생산성 - 더 적은 코드만으로 개발이 가능하기 때문에 더 나은 생산성을 가질 수 있습니다.

 

코틀린에는 일상적인 개발 작업들을 빠르게 할 수 있는 더 많은 기능들이 존재합니다.

 

코틀린은 대단히 경쟁적인 프로그래밍 언어가 되었고, 의심할 여지없이 프로그래머들의 마음을 사로잡았습니다. 오픈소스로써 가지는 현대적 언어의 모든 장점들을 안드로이드 플램폼으로 가져왔고, 안드로이드 프로그래머들에게 최적의 언어입니다.

 

코틀린으로 마이그레이션 하는 것은 프로그래머들에게 식은 죽 먹기일 것입니다. 멋진 함수형 프로그래밍의 특징들과 함께 코틀린은 안드로이드 커뮤니티에서 점점 더 빛나고 있습니다. 하지만, 안드로이드 커뮤니티에서 얻어진 코틀린의 인기를 다른 커뮤니티에서도 똑같이 얻을 수 있는지는 시간이 지나봐야 알 수 있을 것입니다.

 

728x90
반응형
728x90
반응형

코틀린으로 구현하는 당신의 첫번째 Node.js app [번역] 


원문제목 : Your first Node.js app with Kotlin


노드는 자바스크립트 기반의 강력한 서버사이드 플랫폼입니다. 슬랙봇에서 부터 경량의 REST API 또는 파이어베이스 기반의 푸시 알림서비스까지 사용됩니다.


젯브레인사에서 개발한 코틀린은 차세대 언어로 안드로이드 개발 진영으로부터 자바를 대체할 언어로써 인기를 끌고 있습니다.


저는 왜 코틀린을 안드로이드 프로젝트에서 사용해야하는지를 이야기하진 않을것입니다. 다만, 자바스크립트를 대신해 코틀린을 사용한 노드 앱을 구현하는 방법에 대해 말하겠습니다.


이 가이드의 목적은 제가 슬랙 봇을 만든 경험을 토대로 노드 기반의 서버를 개발해 보고 싶은 안드로이드 개발자들에게 맞춰져 있습니다.


실습코드는 https://github.com/miquelbeltran/kotlin-node.js 에서 확인하실 수 있습니다.


Node.js


우선 노드를 당신의 PC에 설치하세요. 노드는 npm 이라고 불리는 패키지 관리자를 가지고 있습니다. 

설치가 되었다면, 아래와 같이 프로젝트를 구성하세요.


  • 우선, 빈프로젝트 폴더를 노드 프로젝트로 구성합니다.
npm init


  • 그다음 코틀린 패키지를 설치하세요.

    npm install kotlin --save


    • 마지막으로,  ExpressJS 를 사용한 작은 REST API 로 만들어질겁니다. 아래와 같이 ExpressJS 라이브러리를 추가해주세요.
    npm install express --save


    이제 노드 프로젝트 셋팅은 끝났습니다. 이제 코틀린을 적용해보겠습니다.


    Kotlin


    코틀린 프로젝트를 자바스크립트로 설정할경우 문서를 살펴보는 것은 항상 좋은 방법입니다. 
    개인적으론 IDEA 기반의 프로젝트보다는 그레이들을 추천하는데, 그 이유는 우린 이미 안드로이드 개발에 익숙하기때문에 그레이들이 낯설지 않을것이기 때문입니다.
    그레이들을 매뉴얼대로 설치해야하는것을 기억하세요.


    당신의 gradle.build 파일은 아래와 같아야 합니다.



    kotlinOptions은 꼭 필요합니다.  moduleKind에는 commonjs가 세팅되어있어야 하고,  outputFile에 들어갈 값은 쉬운 경로로 변경하길 추천합니다.


    당신의 코틀린 소스는 src/main/kotlin/에 위치해있어야 합니다.


    이제 첫번째 코틀린 파일을 만들어 보죠.



    이 예제에서 저는 서버 포트는 3000번 그다음 ExpressJS 라이브러리를 불러오고, "I am a beautiful butterfly"를 응답하는 GET 종단점을 만들었습니다.  



    Let’s run


    우선, 그레이들을 이용해 코틀린코드를 자바스크립트로 컴파일해야합니다.
    gradle build

    자바스크립트 파일은  node/index.js  에 생성될것이며 당신이 작성한 코틀린 코드가 자바스크립트로 컴파일되어 있을것입니다. 


    이제, 노드 서버를 시작해보죠.
    node node/index.js

    잘 동작합니다! http://localhost:3000 으로 접속하여 확인할수있습니다.



    In Summary


    코틀린은 자바스크립트로 컴파일가능한 유일한 언어는 아니지만, 안드로이드 개발자 사이에선 인기가 점점 높아지고 있는 언어입니다. 만약 당신이 이미 코틀린을 사용하신다면, 다른 용도로 사용해보지 않을 이유가 없습니다.

    당신이 독립적인 안드로이드 개발자라면,  마이크로 서비스를 신속하게 개발 할수 있는 능력이 어플리케이션을 발전 시키는데 큰 도움이 될것입니다.

    보신것처럼 작은 서비스를 만드는데 몇분밖에 걸리지 않았고, 당신에게 익숙한 IDE를 사용했으며 보일러 플레이트 코드는 거의 존재하지 않았습니다.


    728x90
    반응형
    728x90
    반응형

    Spring One Tour Seoul 2018 by Pivotal

    Spring One Tour Seoul 2018 by Pivotal 행사에 참여하고 작성한 후기 


    PCF (Pivotal Cloud Foundry)

    1. Full Stack Reactive Kotlin! with Spring Framework 5, Spring Boot 2, & Project Reactor

    연사 : Mark Heckler

    • Kotlin 사용 이유
      • Kotlin 은 자바에 비해 새로운 것들을 더 빠르고 자유롭게 구현할수 있게 한다. 또한 좀 더 함축적이고 효율적이라 생각한다.
      • 현재 스프링 5 버전 이후로 Kotlin과 자바를 동등한 수준으로 개발 하고 있다.
      • 메서드가 없다. 오직 함수만 있을뿐 .. 함수 키워드는 fun 그래서 Kotlin은 fun 하다!
    • 리액티브 프로그래밍이란 ?
      • non-blocking, event-driven 어플리케이션 구현에 용이함
      • 비동기 프로그래밍을 구현할때 가장 어려운 점은 콜백헬이다. 그런점에서 리액티브 프로그래밍은 좀더 읽기 쉬운 readable 프로그래밍을 가능하게 한다.
      • 리액티브 프로그래밍은 적은 수의 스레드를 사용하여 더 많은일을 적은 자원으로 구현할 수 있게 한다.



    • Reactive Streams : 4 interfaces
      • Publisher<T>
      • Subscriber<T>
      • Subscription
      • Processor<T,R>

    • Reactive Streams initiative
      • 레드햇, 피보탈 등이 기본 스펙을 합의함

    • Project Reactor
      • 컨셉 : 기존 스프링, 자바8 이상의 기술과 경험을 그대로 녹여 사용할 수 있도록 구현하고있다. (새로운 지식에 대한 거부감이 없도록)
      • Reactor에서도 Java8 과 마찬가지로 스트림의 연결에서 map, flatMap등은 Lazy 하게 동작하므로 Terminal Operator (Java8의 경우 collect 등) 가 필요함 (e.g. subscriber)

    • IT Cloud by Netflix 추천!!!!!
      • 개발자들의 눈물과 웃음이 녹아있는 드라마라고함.

    • Coffee service with Kotlin, Reactive and Netty



    2. Cloud-Native Spring

    연사 : Josh Long

    •  “클라우드 네이티브 자바” 서적에서 포함하지 못한 몇가지 예제를 빠르게 보기


     

    • Spring Boot 2.1 부터 Ascii art 를 gif 이미지로 사용할 수 있음
      • 대신 스타터 타임에 30초 이상 더 걸림 .. ㅋㅋㅋㅋ

    • RedisRateLimiter를 사용하여 RateLimit 을 사용할 수 있음
      • 동시접속제한 가능
      • 일종의 쓰로틀링 기법

    • 핵심 키워드 Flux & Mono 
    • HTTP 에서만 Reactive 를 사용할 수 있는것이 아니다.
      • SaleForce.com 클라우드 CRM 에서 GRPC 컴파일러에서 리액티브를 사용
      • Facebook.com rsocket 프로토콜 Java 클라이언트에서 리액티브를 사용
      • SpringBoot 2.2 에서 별도 add-on없이 rsocket을 native로 지원할 예정

    • 자바 챔피언 Josh Long 과 인증샷!



    3. Spring Cloud Gateway

    연사 : Younjin Jeong

    • 해당 주제는 Spencer Gibb의 Introducing Spring Cloud Gateway 를 한국어로 재발표

     

    • What is an API Gateway ?
      • 현대적 마이크로서비스 어플리케이션은 L7만으론 부족한 기능들이 존재함
      • 특징들 : Routing, Canary-ing, Security, Monolith Strangling, Monitoring, Resiliency

    • Side-car pattern, Proxy pattern 을 합친것을 Mesh pattern
      • 애플리케이션이 존재하는 모든 서버안에 Proxy 가 존재
      • inbound, outbound 모두 proxy를 사용
      • 몇가지 오픈소스 제품들이 나와있음

     

    • 넷플릭스 OSS Zuul
      • 넷플릭스 전체 트래픽을 받고 있음.
      • 뛰어난 성능, 오픈소스
      • 최근 Zuul2 가 발표됨
      • Zuul1은 Servlet 기반의 blocking IO를 사용했음
      • Zuul2는 비동기적 방식 non-blocking IO를 지원함
      • 단점은 Zuul1 과 Zuul2 간의 하위 호환성이 없음 (완전히 새로 개발됨)
      • 그리고 넷플릭스는 자사 OSS 에 대해 적극적으로 maintain 하지 않는다. (물론 자사에서 서비스 중인 제품은 예외)

    • Spring Cloud Gateway
      • 현재 버전에선 Zuul1,2 는 사용하지 않음.
      • 예전 버전에선 Zuul1을 내장하였으나, Zuul 자체가 넷플릭스 비즈니스에 특화되어 개발되어있기때문에 내부적으로 추상화하기 힘들다는 단점이 있었음. (코드더럽..)
      • Netflix Ribbon 을 같이 사용할 수 있다.
      • API Gateway (e.g. POST /login HTTP 1.1 or GET /contents HTTP 1.1 ) -> Netflix Ribbon (Zone Available Latency check) -> API Endpoint

     

    4. Cloud Event Driven Architectures with Spring Cloud Stream 2.0

    연사 : Jakub Pilimon

    • Event Storming?

     

      • 개발을 하기 위해선비즈니스 도메인에 대해 우선 이해해야함. 이에 대한 방법을 일컫는다.
      • Card Withdrew -> Limit Assigned -> Card Repaid -> Billing Cycle Closed
      • 위에 비즈니스에서 도메인을 도출 하면 Withdraw, Assign Limit, Repay
      • Withdraw : if there is enough money
      • Assign Limit : if it wasn’t already assigned
      • 현업 과 개발자 간 공통된 언어로 통일
      • 같은 용어를 사용하더라도 각각의 정의가 다를 수 있음.

     

     

    • Event Sourcing
      • 특정 객체를 저장하는것이 아니라, 변경내역에 대한 이벤트들을 저장한다.
      • 변경내역에 대해 Audit(감사) 하기 쉬워진다.
      • 특정 시점에 문제가 발생하였을경우 state를 변경하여 해당 시점으로 테스트가 가능하다.

    5. Spring and Pivotal Application Service

    연사 : Younjin Jeong

    • 개발자들이 운영에 얼마나 많은 시간을 소비하는지 ?
      • 코드 작성,유닛테스트,기능 추가 보다 운영업무가 더 많은 시간을 소비함. (슬픈현실 ㅠㅠ)



    • Netflix 는 “Operation”팀을 -> “Cloud Platform” 이라는 팀으로 변경
      • 클라우드환경에 맞는 도구들을 만드는데 집중

    • 위로 올라갈수록 개발자 친화, 아래로 갈수록 인프라 친화


    • Pivotal Cloud Foundry Family


    • Pivotal Application Service (PAS) App Runtime 
    • Chaos Engineering 최근에 각광받고 있음
    • 12 Factors Apps, Security SSO, 배포, Configuration 등을 Cloud Foundry 에서 지원
    • 즉 PCF는 현대의 Spring Boot Application 에 특화된 Cloud 플랫폼


    728x90
    반응형
    728x90
    반응형

    ResourceBundle 을 이용한 MessageSource 구현


    그동안엔 SpringFramework 을 기본으로 적용하다 보니 MessageSource 를 직접 구현할일이 없었는데 이번에 Vert.x 로 서버를 만들면서 사용자에게 발송할 메세지를 템플릿화 할 필요가 있어서 java.util.ResourceBundle 을 이용하여 직접 구현하였다. 
    프로젝트는 Maven 기반이었고  resources 아래에 message.properties 를 만들어넣고 resources 디렉토리를 classpath 에 등록한다.
     
    템플릿에서 변수는 순서에따라 {0} {1} {2} 식으로 작성한다. 

    /resources/message.properties
    message.1={0}고객님 안녕하세요. 오늘 날짜는 {1} 입니다.


    import java.util.ResourceBundle;

    public class MessageSourceUtils {

    private ResourceBundle bundle;

    private static MessageSourceUtils instance = new MessageSourceUtils();

    private MessageSourceUtils() {
    bundle = ResourceBundle.getBundle("messages");
    }

    public static MessageSourceUtils getInstance() {
    return instance;
    }

    public String getMessage(String key) {
    return bundle.getString(key);
    }

    public String getMessage(String key, String... replaceTexts) {
    String message = getMessage(key);
    if (replaceTexts == null) {
    return message;
    }

    for (int i = 0; i < replaceTexts.length; i++) {
    message = message.replace("{" + i + "}", replaceTexts[i]);
    }

    return message;
    }
    }



    사용 방법

    MessageSourceUtils messageUtils = MessageSourceUtils.getInstance();
    String sendMessage = messageUtils.getMessage("message.1", "이상훈",LocalDate.now().format(DateTimeFormatter
    .ofPattern("yyyy-MM-dd")));




    728x90
    반응형

    + Recent posts