[3. Vert.x 동작 코드 작성 및 스프링 연결(?)]


Vert.x는 독립적인 애플리케이션으로 구성할 수도 있고 

스프링+Vert.x 처럼 Embedded 형태로 구성할 수도 있습니다


저는 Embedded 형태로 작성을 하였구요

자세한 방법은 [http://vertx.io] 나 

백기선님의 강의 영상[http://devon.daum.net/2012/session/b3#.Uw1du-N_tWA]을 봐주시면 됩니다


ㅇ VertxSample 클래스

package com.spring.vertx.controller;


import org.vertx.java.core.Handler;

import org.vertx.java.core.Vertx;

import org.vertx.java.core.http.HttpServer;

import org.vertx.java.core.json.JsonObject;


import com.nhncorp.mods.socket.io.SocketIOServer;

import com.nhncorp.mods.socket.io.SocketIOSocket;

import com.nhncorp.mods.socket.io.impl.DefaultSocketIOServer;

import com.nhncorp.mods.socket.io.spring.DefaultEmbeddableVerticle;


public class VertxSample extends DefaultEmbeddableVerticle {

private static SocketIOServer io = null;


@Override

public void start(Vertx vertx) {

int port = 12345;

HttpServer server = vertx.createHttpServer();

io = new DefaultSocketIOServer(vertx, server);

io.sockets().onConnection(new Handler<SocketIOSocket>() {

public void handle(final SocketIOSocket socket) {

socket.on("msg", new Handler<JsonObject>() {

public void handle(JsonObject event) {

System.out.println("handler ::: " + event.getString("msg"));

io.sockets().emit("response", event);

}

});

}

});

server.listen(port);

}

}


VertxSample 클래스를 그냥 controller 패키지 안에 넣었습니다 ㅎㅎ


간략하게 설명하자면... 

- HttpServer 생성 : HttpServer server = vertx.createHttpServer()

- Connection 이벤트 연결 : io.sockets().onConnection()

- 특정 키 명으로 요청시 동작할 이벤트 연결 : socket.on() 

- 모든 클라이언트로 메세지 전달 : io.sockets().emit()


순수 Vert.x 모듈만 가지고 작성을 하려면 굉장히 힘들텐데

백기선님께서 mod-socket-io 라는 좋은 모듈을 만들어 주셔서 위처럼 간단하게 구현이 가능합니다


이제 위 클래스를 스프링 프로젝트가 로드될때 같이 실행시켜 주기만 하면 됩니다

vertx-servlet.xml 에 bean 으로 선언만 해주시면 프로젝트가 로드될때 같이 실행이 됩니다


그래서 2장에서 작성했던 vertx-servlet.xml 에서 주석처리 했던 것을 풀어 주시면 됩니다

<bean id="vertxSample" class="com.spring.vertx.controller.VertxSample" />


서버 쪽 구성은 이제 끝났습니다 


다음 장에서는 클라이언트에서 socket.io.js 를 사용하여 요청 및 출력하는 부분을 만들어 보도록 하겠습니다



Posted by 꼬렙
:

이제 두번째 입니다


[2. 스프링을 사용해서 프로젝트 구성]


일단 스프링으로 웹페이지가 잘 돌아가도록 구성을 해놓고 시작을 해야겠죠


ㅇ Dynamic Web Project 생성



ㅇ JAR 파일 복사

준비한 JAR 파일들을 WebContent -> WEB-INF -> lib 폴더로 다 넣구요




ㅇ Folder 생성

스프링 설정을 저장할 [res] 폴더와 View 페이지 파일이 들어갈 [views] 폴더를 생성해줍니다


[res]를 Source Folder 로 만드는 이유는 컴파일할때 WEB-INF/classes 밑으로 저장하도록 하기 위해서입니다

그래야 스프링 설정파일의 위치를 정의하는 곳에 classpath: 이런 구문을 사용할 수 있습니다


ㅇ web.xml 설정

web.xml의 선언부는 사용하는 톰캣 버전에 따라서 약간 모습이 달라질수 있습니다

저는 6.0을 기준으로 작성했습니다

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

         xmlns="http://java.sun.com/xml/ns/javaee" 

         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 

                             http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 

         id="WebApp_ID" 

         version="2.5">

         

  <display-name>Vertx</display-name>

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

        

        <!-- 한글 깨짐 방지용 필터 설정 -->

<filter>

<filter-name>encodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>utf-8</param-value>

</init-param>

</filter> 

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>


        <!-- 서블릿 설정 -->

<servlet>

<servlet-name>Vertx</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:vertx-servlet.xml</param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name>Vertx</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>


<!-- log4J -->

<context-param>

<param-name>log4jConfigLocation</param-name>

<param-value>classpath:log4j.xml</param-value>

</context-param>


<listener>

<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

</listener>


</web-app>


web.xml


ㅇ 서블릿 설정 파일 vertx-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">


        <!-- com.spring.vertx 를 포함한 모든 하위 패키지의 기본 애노테이션 적용 클래스 자동 스캔 -->

<context:component-scan base-package="com.spring.vertx" />

        <!-- JSP를 View 페이지로 쓰기 위해서 Internal View Resolver 선언 -->

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix" value="/WEB-INF/views/" />

<property name="suffix" value=".jsp" />

</bean>


<!-- vert x 적용 파일 -->

        <!--

<bean id="vertxSample" class="com.spring.vertx.controller.VertxSample" />

         -->

</beans>




vertx-servlet.xml


웹페이지가 잘 뜨는지 확인할때는 

아직 VertxSample 클래스를 작성하지 않아서 오류가 나기 때문에 일단 주석으로 처리해놓구요

나중에 주석을 풀어 주시면 됩니다

이 파일은 [res] 에 넣어줘야 합니다 (Source Folder)


ㅇ log4j 설정 파일


log4j.dtd


log4j.xml


이 log4j 설정파일들은 그냥 [res] 로 넣으면 됩니다



ㅇ JSP View 파일 생성

이클립스에서 JSP 파일 생성하면 기본 구문들은 자동으로 입력을 시켜 줍니다

[main.jsp] & [main2.jsp]

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>


<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Insert title here</title>

</head>

<body>

<h1>Main</h1>

</body>

</html>

대충 페이지가 돌아간다는 것만 확인할 수 있도록 아무 글자나 찍도록 해놓구요

main.jsp / main2.jsp 파일 두개를 생성해줍니다

서로 다른 페이지에서 채팅 기능이 잘 되는지 확인하기 위해서 입니다


ㅇ Controller 클래스 

아까 자동 스캔을 지정한 com.spring.vertx 를 기본 패키지로 만들구요

controller 패키지를 추가해서 MainController.java 를 만들어 줍니다


[MainController.java]

package com.spring.vertx.controller;


import java.util.Map;


import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.servlet.ModelAndView;


@Controller

public class MainController {


@RequestMapping("main.do")

public ModelAndView main(Map<String, Object> map) {

ModelAndView mav = new ModelAndView();

mav.setViewName("main");

return mav;

}


@RequestMapping("main2.do")

public ModelAndView main2(Map<String, Object> map) {

ModelAndView mav = new ModelAndView();

mav.setViewName("main2");

return mav;

}


}


MainController.java



프로젝트 설정은 끝났습니다


이제 톰캣에 프로젝트를 등록하고 확인해보면 됩니다




다음 장에서는 위 스프링 프로젝트에 Vert.x 적용 클래스를 만들어서 포함시켜 보도록 하겠습니다

Posted by 꼬렙
:

모든 자료는 

백기선님의 [Vert.x & Socket.IO 이해 및 활용] 및  Vert.x 사이트 [http://vertx.io] 의 문서를 참고하였습니다

좋은 모듈을 만들어주신 백기선님께 감사드립니다


메이븐에 익숙하지 않은 사람도 많기 때문에 일반 웹 프로젝트로 만들었구요

따라서.. 라이브러리 JAR 파일도 각각 따로 넣어줘야 합니다


현재 Vert.x 버전이 2.1M5 까지 나와있는데요..

최신 버전으로 적용하면 백기선님께서 만드신 mod-socket-io 가 제대로 동작이 되질 않아서 1.3.1 final 버전을 사용했습니다


1. 라이브러리 JAR 파일 준비

2. 스프링을 사용해서 프로젝트 구성

3. Vert.x 동작 코드 작성 및 스프링 연결(?)

4. socket.io.js를 이용한 웹페이지 작성


위 순서대로 만들어보겠습니다


[1. 라이브러리 JAR 파일 준비]

ㅇ Vert.x JAR

Vert.x 사이트로 가서 맨밑에 Older versions 에서 1.3.1 final 버전을 받습니다


vertx-1.3.1.zip

귀찮은 분들은 이 파일을 받으시면 됩니다 ㅎ


ㅇ mod-socket-io JAR 

이건 조금 작업을 해주셔야 하는데요.. 백기선님의 Github 주소로 프로젝트를 받으셔야 합니다

[https://github.com/keesun/mod-socket-io]

git을 사용하기 위한 이클립스 설정과 다운로드 방법은 너무 내용이 길어지기 때문에 생략하도록 하겠습니다 ㅎㅎ

검색을 해보시면 아주 많은 방법들이 잘 나와있으니 참고해주세요

단.. 현재 개발중인 master 말고 verx-131 로 받아주시면 됩니다



위와같이 Git Repository 로 받아주시구요 

받아온 프로젝트를 Import 하시면 됩니다


이제 mod-socket-io 프로젝트를 JAR 파일로 Export 시켜줍니다

이클립스 설정을 통해서 개발할때는 프로젝트를 연결시켜서 오류를 없앨수 있지만

컴파일할때 등 여러 귀찮은 문제가 생겨서 미리 JAR로 추출한 다음에 코딩하는게 편합니다

JAR Export 하는 방법은 아실꺼니까.. 생략하겠습니다


mod-socket-io-131.jar

mod-socket-io 프로젝트를 Export 한 JAR 입니다


ㅇ Spring JAR 

스프링 공식사이트에 가보시면 안타깝게도 직접 다운로드 메뉴가 없습니다

메이븐으로 받도록 설명하고 있습니다... 제길...

그래서 제가 예전에 받아놓은 스프링 3.1 버전 JAR 파일을 올려놓도록 하겠습니다

jar_spring_3.1.zip



ㅇ 그리고 기타 부수적인 JAR 입니다

로그도 찍어야 하고.. JSP 파일에서 JSTL 도 쓸수 있으므로 아래 파일들이 필요합니다

commons-logging-1.1.1.jar


jstl-1.2.jar


log4j-1.2.16.jar


slf4j-api-1.7.5.jar


slf4j-log4j12-1.7.5.jar


이제 spring + vert.x 를 써보기 위한 라이브러리는 준비가 끝났습니다


다음 장에서 위 파일들을 가지고 프로젝트를 구성해 보도록 하겠습니다



Posted by 꼬렙
: