zepinos
20k
2015-10-26 00:08:11
13
7015

Vert.x 가 Node.js 보다 좋은 이유 (반 쯤 우스개)


1. JVM 을 쓴다


1.1 분명 JVM 은 V8 엔진보다 오래된 역사를 가졌고, 그 역사 동안 수많은 사람들이 갈고 닦아서 더욱 안정적으로 최적화 되어 있습니다. 구글(V8)이 대단한 업체이지만, 선(JVM)도 바보는 아닙니다.

1.2 JVM 기반의 언어(Groovy 등)에서 개발한 라이브러리를 그대로 가져다 쓸 수 있습니다.

1.3 Vert.x 가 Node.js 보다 라이브러리가 적다고 하는데, 웹에서 쓰던 Javascript 에서 socket 을 직접 열거나 file 을 직접 열거나 해보신 분? 그런게 없으니 라이브러리가 많은거지, Vert.x 는 이미 Java 등의 라이브러리나 JVM 자체적으로 지원되는 기능들이 있습니다.

1.4 기본적으로 멀티 쓰레드를 이용합니다. JVM 에서 원래 되던거니까요.

1.5 JMX 등...JVM 에서 지지고 볶고 하던거 다 됩니다.


2. 폴리글랏이다

2.1 Java 뿐만 아니라 몇 가지의 언어를 더 지원합니다. 마이너 버전이 올라가면 지원 언어가 더 늘어나곤 합니다. 해당 언어의 좋은 라이브러리를 위해서 여러 언어를 짬뽕으로 섞어서 개발하고 EventBus 로 비동기로 호출해서 결과를 받아오면 됩니다.

2.2 Javascript 라는 언어가 Java 보다 매력적이라서 Node.js 을 쓴다구요? Vert.x 는 Javascript 도 지원된다구요...

2.3 Javascript 로 개발하다가 혈압 올라 키보드 부셔먹을 뻔 했다는 글 많이 보실 겁니다. Javascript 로 개발하닥 도저히 동작 방식이 이해가 안된다구요? ruby 으로 짜보세요. Vert.x 는 폴리글랏입니다. 2.x 버전에서 지원하던 python 이나 clojure, ceylon 도 곧 지원할지도 모르죠.

2.4 개발툴이 아쉬우세요? Sublime 이나 WebStorm 은 분명 좋은 개발툴인데...하지만 IntelliJ 나 Eclipse 같진 않으시다구요? 그럼 그냥 Java 로 짜세요. 거의 비슷한 방식으로 동작합니다.

0
  • 댓글 13

  • 마구마구
    1k
    2015-10-26 08:20:59

    정보 감사합니다.

    vert.x 를 접해보지 않아서 말하기가 다소 조심 스러운데 노드의 수 만개가 되는 미들웨어 중에는 단지 기능 구현에만 그치지 않고 구현의 편의성이나 확장성을 갖춘 훌륭한 것들이 많은데 단지 vert.x에서는 일부 모듈 없이 날 코딩으로 기능 구현 가능하다하여 장점으로 어필하는 것은 다소 괴장됐다는 생각이 들었습니다.

  • 앙앙이
    2015-10-26 09:12:53

    저기 어떻게 읽어야 하나요?

    버트점엑스?

  • bluerain
    2k
    2015-10-26 09:35:13

    마구마구님//

    트집은 아니지만, 실무에서 여러 업무를 하게 되다보면

    때론 날코딩이 아니면 답이 없는 경우가 간혹 생깁니다.

    자주는 아니지만, node.js의 미들웨어와 같은 java의 라이브러리를 사용하지 않고 해야하는 경우가

    생깁니다.

    vert.x가 node.js 보다는 나온 게 늦었으니 '어느쪽이 더 많다'라고 하는건,

    후발주자에게는 언제나 생기는 '약점 아닌 약점'인 거죠.

    그걸 얼마나 잘 커버 하느냐가 후발주자가 선발주자를 앞서는데에 큰 보탬이 되겠지요.

    아직은 좀 더 지켜봐야 할듯 합니다.

  • nusicaa
    2k
    2015-10-26 10:33:02

    vertx 좋습니다 전 서버 API는 이것으로 작성하기로 결정했죠

  • zepinos
    20k
    2015-10-26 11:48:55

    마구마구 님 // 편의성이나 확장성이 좋은 모듈들이 많겠지만, Vert.x 에 모듈이 적다고...구현해야할 것을 구현하는게 불가능한 일은 거의 없다...는 뜻으로 받아들여 주시면 고맙겠습니다(반쯤 농담이었으니까요).


    실제 Spring 에 embeded 해서 만들거나 하면 사실 Node.js 보다 훨씬 더 많은 편의성과 확장성을 기대할 수도 있습니다.


    사실, Node.js 도 실무가 아닌 R&D 용으로 좀 써보긴 했는데, socket.io 가 좀 부럽긴 했지만(Vert.x 2.x 에서 괜찮은 socket.io 를 만들어주신 백기선 님께서 개발중단을...지금 미국 A 사로 이직하신 듯) 그 외에는 크게 문제될 게 없었습니다. 기껏해야 Couchbase 에서 Node.js 용만 만들어줘서 Vert.x 에서는 직접 Java SDK 을 이용해서 모듈...까지는 아니고 날코딩을 좀 했다는 정도? 뭐 그랬습니다.

  • return true
    2k
    2015-10-26 13:54:48

    날코딩이 뭔자 알 수 있을까요?

  • talkbox
    598
    2015-10-27 00:03:51

    참고로 vert.x의 기본 통신 라이브러리는 netty를 씁니다.


    netty와 vert.x는 어느정도 level의 api를 활용하고자 하냐에 따라 선택이 달라질 수 있어요.

  • 다곤
    4
    2017-11-26 07:51:22

    너무 오래된 글이라 질문하면 답변이 있을지는 모르겠지만 최근에도  활동하시기에 vertx  문의를 드려봅니다.

    메시지발송에서 vertx를 사용중인데 메시지 작성을 하면 소켓통신을 이용하여 서버에 메시지 내용을 db에 저장하고 이벤트를 발생하여 클라이언트에서 내용을 db에서 읽어 표시하는 방식을 사용 중입니다. 클라이언트는 이벤트를 감시하도록 스케쥴러가 구동되고 있습니다.

    메시지 작성부분을 반복문을 이용해 작성시키면 db에는 저장이 되는데 이벤트가 발생하지 않아 10번 정도 반복문을 이용해서 보내면 평균 3번 정도만 정상발송됩니다. 이벤트 발생 후 딜레이를 0.4초 정도 주면 이상이 없이 발송됩니다. 딜레이를 주지않고 정상발송시킬 방법은 없을까요?

  • zepinos
    20k
    2017-11-26 17:07:56 작성 2017-11-26 17:11:40 수정됨

     다곤  님 // 추측하기엔...비동기 결과를 받기 전에 사용자에게 결과를 보내서 비동기를 다 수행하지 않는 것 같네요. db 저장을 비동기로 실행한다면 비동기 결과를 받은 뒤(중괄호 안에서) 메세지를 보내고 리턴하는지 확인해보세요

  • 다곤
    4
    2017-11-27 12:25:37

    zepinos 님 // 답변 감사드립니다.

    답변주신대로면 db처리전에 사용자에게 이벤트를발생한 문제인건데 그럼 랜덤하게 db처리가 먼저 되면 메시지가 정상이고 db처리보다 사용자에게 보내는게 먼저면 메시지가 안가는거 아닌가요?

    그리고 제가 우선 처리한 방법은 사용자에게 이벤트 발생 후 0.3초 딜레이를 준거였는데 이런 경우는 정상 작동하거든요...ㅠㅠ

    님께서 조언해주신대로면 db처리가 끝난 뒤에 이벤트 발생이면 동기화로 바꾸라는건가요?

    잘 모르는 초보라 질문만 많네요 ㅠㅠ

  • zepinos
    20k
    2017-11-27 12:32:43

    코드 없이 답변이 좀 힘들겠는데요.


    보통 vert.x 을 보면


    명령1 {

        명령2{

            명령3{

            }

        }

    }

    명령4


    이런 식으로 구성될 경우 명령1->명령2->명령3->명령4 로 실행된다고 생각하기 쉽지만 사실 명령1->명령4->명령2->명령3 와 같이 명령 4는 명령1~명령3 의 결과가 나오기 전에 이미 실행 가능한 상태가 됩니다. 이게 비동기이며, 이 깊이가 깊어질수록 코딩하기 힘들어진다는 이야기가 나오는 것이구요.

    딜레이를 줬을 때 제대로 된다는 것은 명령1 이 실행이 완료가 되어야 내부의 명령2를 실행하는데, 명령4는 명령1을 시작하고 바로 실행되기 때문에 명령1이 실행되고 난 뒤에 명령2가 실행될 시간을 주기 위해 딜레이를 줘서 순차적으로 처리되는 것처럼 보이게 된다는 의미입니다.


    굳이 vert.x 로 할 필요가 있는 작업인가요?

  • 개발자5
    138
    2018-05-15 14:14:08

    그냥 C# 으로 해 보세요.


    Visual studio 성능이 너무 좋아져서, 뭘 하시든 날라다닐 것으로 예상이 됩니다.


    그냥 우스개였어요.

  • 로그인을 하시면 댓글 을 등록할 수 있습니다.