자바

[Java ] Vert.x(Vertx) 로 HttpServer 구축하기!

알통몬_ 2018. 7. 3. 10:25
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


이번 포스팅에서는 Vert.x 라는 것에 대해 공부합니다.


Vert.x 란 공식페이지에

Eclipse Vert.x is a tool-kit for building reactive applications on the JVM.

위처럼 설명하고 있는데요.

JVM 에서 반응형 애플리케이션을 빌드하기 위한 툴킷 이라고 하네요.


HttpServer를 구축하기 위해서는 Core 와 Web 모듈을 추가해야 합니다.


Maven Repository 사이트에 들어가셔서 vertx 라고 검색을하면

https://mvnrepository.com/

몇 가지가 쭉 나오는데요.  Vert.x Core 와 Vert.x Web 을 추가하시면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- https://mvnrepository.com/artifact/io.vertx/vertx-unit -->
        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-unit</artifactId>
            <version>3.5.2</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.vertx/vertx-web -->
        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-web</artifactId>
            <version>3.5.2</version>
        </dependency>
 
cs

만약 메이븐을 쓰시지 않으신다면 공식홈페이지에서 Vert.x 를 다운받으시면 됩니다.

https://vertx.io/download/


HttpServer 열기

공식페이지에는 

1
2
3
4
5
6
7
8
9
10
11
 
import io.vertx.core.AbstractVerticle;
public class Server extends AbstractVerticle {
  public void start() {
    vertx.createHttpServer().requestHandler(req -> {
      req.response()
        .putHeader("content-type""text/plain")
        .end("Hello from Vert.x!");
    }).listen(8080);
  }
}
cs

요렇게 나와있는데 이거 쓰면 빨간줄 생기더라구요 ㅎㅎ


그래서 다른 방법을 찾아봤습니다.

클래스를 하나 만들고 AbstractVerticle 를 상속받으면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package netty.server.http;
 
import io.vertx.core.AbstractVerticle;
import io.vertx.core.MultiMap;
import io.vertx.core.Vertx;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.RoutingContext;
import io.vertx.ext.web.handler.BodyHandler;
 
public class HttpServer extends AbstractVerticle{
 
    public void start() {
        Router router = Router.router(Vertx.vertx());
        router.route().handler(BodyHandler.create());
        router.post("/membership").handler(this::getOk);
        Vertx.vertx()
        .createHttpServer()
        .requestHandler(router::accept)
        .listen(9292,"xxx.xxx.xxx.xxx");
    }
    
    public void getOk(RoutingContext routingContext) {
        HttpServerResponse res = routingContext.response();
        MultiMap map = routingContext.request().params();
        String id = map.get("id");
        JsonObject json = new JsonObject().put("code""000").put("id", id);
        res.putHeader("content-type""text/plain").end(json.toString());
    }
    
    public static void main(String[] args) throws Exception {
 
            HttpServer server = new HttpServer();
            server.start();
        
    }
}
 
cs


router.post() 에서 ""안에 들어가는 값은 host 뒤에 붙는 주소입니다.

예를 들어 클라이언트가 http://xxx.xxx.xxx.xxx/users 라는 곳으로 로그인을 요청한다고 하면

post("/users") 라고 사용하면 됩니다.

그리고 getOk() 메서드에서 map은 요청 값을 처리합니다.


다음 포스팅에서 

안드로이드와 Vert.x 간의 Http통신에 대해 다룰 때 알아보도록 하겠습니다.

이상입니다.

감사합니다.

반응형