Java2012.02.08 12:57
요즘은 Restful이 유행이다. 통신을 하기 위해서 가장  부하가 적은 웹서비스이기 때문이다. Java에서 요즘 가장 많이 사용하는 것이 Spring Framework 와 함께 Apache CXF를 가장 많이 사용한다. 그다음에 사용하는 WebService로는 Apache AXIS 이다. 둘다 Apache에서 나온 프로젝트이기 때문에 오픈소스라고 볼 수 있다. 라이센스는 걱정하지 않고 사용하기만 하면 되는 것이다. 

Apache CXF : http://cxf.apache.org

위의 Apache CXF 홈페이지를 방문하면 다운로드 뿐만 아니라 좀 더 자세한 정보를 알아 낼 수 있다. 

Apache AXIS :  http://axis.apache.org/axis2/java/core/ 

AXIS 역시 홈페이지를 방문하면 Install 가이드 및 자세한 정보를 확인 할 수 있다.
 
Apache CXF 설치

Eclipse에서 Maven Project를 생성 후 Pom.xml에 Apache CXF 를 추가한다.



환경설정

Web.xml에 다음과 같이 Servlet을 추가합니다.

<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>SimpleJaxs</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/beans.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener>

<servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class> org.apache.cxf.transport.servlet.CXFServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
</web-app> 



web.xml 환경설정이 끝나면 beans.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:jaxrs="http://cxf.apache.org/jaxrs"

  xmlns:cxf="http://cxf.apache.org/core"

  xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://cxf.apache.org/jaxrs

http://cxf.apache.org/schemas/jaxrs.xsd

http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">


  <import resource="classpath:META-INF/cxf/cxf.xml" />

  <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" />

  <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />


 <jaxrs:server id="CxfService" address="/Service">

    <jaxrs:serviceBeans>

    <ref bean="DemoBean" />

    </jaxrs:serviceBeans>

  </jaxrs:server>

  

  

  <bean id="DemoBean" class="demo.jaxrs.server. DemoCxf " />


Server 프로그램 샘플
 
그럼 이번에는 Server Program 를 생성해 보도록 하겠다.

package demo.jaxrs.server;
import javax.ws.rs.Consumes;

import javax.ws.rs.DELETE;

import javax.ws.rs.GET;

import javax.ws.rs.POST;

import javax.ws.rs.PUT;

import javax.ws.rs.Path;

import javax.ws.rs.PathParam;

import javax.ws.rs.Produces;

import javax.ws.rs.core.Response;
 

@Path("/DemoCxf/")

public class  DemoCxf {

        @GET

@Path("/getMsg/{gubun}")

public String getMsg(@PathParam("gubun") String _gubun)
        {

return "hi"+ _gubun;

}

        @POST
        @Path("/AddData/{gubun}/{data}")
        public String addData(@PathParam("gubun") String _gubun, @PathParam("data") String _data)

        {
                String data = _data;
                return "true";
        }



Client 프로그램 샘플

Server 프로그램을 생성했으면 Client 프로그램을 생성해야 한다.

import org.apache.cxf.jaxrs.client.WebClient;

 public class DemoCxfClient {
       public String getMsgClient( String serverUrl) 

{

WebClient client = WebClient.create(serverUrl);

                String gubun = "1"; 

String result = client.path("/CxfService/DemoCxf/getMsg").accept("application/xml").get(gubun);

return result;

}

        public String addDataClient( String serverUrl, String data) 

{

WebClient client = WebClient.create(serverUrl);
                String gubun = "1"; 
                String data = "test_data";   

String result = client.path("/CxfService/DemoCxf/addDataClient").accept("application/xml").post(gubun, data);

return result;

}

 
 
샘플 코드에서 나는 Rest의 두가지를  샘플로 코딩하였다. 바로 @GET 과 @POST이다. 이번에는 Rest 방식에 대하여 설명하도록 하겠다.

@GET 
   특정 구분자에 의한 값을 조회할때 
@POST
   새로운 데이터를 저장하거나 생성할 때
@PUT
   저장되어 있는 데이터를 변경할 때
@DELETE
   저장되어 있는 데이터를 삭제할 때
@HEAD
   조회하고자 하는 데이터의 메타데이터를 확인 할 때
@OPTION 
   지원 메소드를 체크할 때 
Posted by 나리 짱!!! naleejang
OpenStack2012.02.02 10:45

지난 2011년에 OpenStack Swift를 설치하면서 정보를 서로 공유를 하는것이 좋다고 생각을 했다. 그리고, 아무도 하지 않은 설치 매뉴얼을 작성해서, OpenStack Korea Community와 공유를 하였다.

여기에서도 OpenStack Swift 설치 매뉴얼을 받아볼 수 있도록 공유를 하려고 한다.

VirtualBox를 활용한 OpenStack Swift SAIO 설치 매뉴얼



OpenStack Swift Multi Server 설치 매뉴얼

 

 
Posted by 나리 짱!!! naleejang
English2012.02.01 17:16

My real name is Jang Hyun Joung. Jang is my family name. Hyun Joung are my given names.
but My nick name is nalee. Please call me "Nalee".
 
I'm a computer engineer who specialist in using Java.
I work in cloud computing system. and my company's name is "MNL Solution".
so I can install and operate OpenStack for cloud computing.
I like this job.  because my dream was to be a computer programmer.

I'm married. I have a daughter.
She is six years old. Her name is Han Yeji. Han is her family name. Yeji is her given name.
Two years ago, my husband lives in Incheon. I live in Daejeon. My daughter lives in Ilsan with her grandmother. 
so we were a weekend family.
However, I live together with my family in Ilsan now.
So I'm happy.
 
My hobby is belly dancing and learning English.
I like to learn English because I can talk to foreign people.
In addition I like to dance.
Two years ago I had a salsa performance.
My partner was a foreigner. He came from Australia. However he is South African.
It was very fun. So I will never forget the performance.


'English' 카테고리의 다른 글

Standing Tall in The Room Speech Script  (0) 2015.05.30
My Introduction~!!  (3) 2012.02.01
Posted by 나리 짱!!! naleejang
Linux2012.02.01 17:07
netstat는 ubuntu linux의 network 정보를 확인할 수 있는 명령어로써 다음과 같이 사용할 수 있다.

#netstat -nap (열려 있는 모든 포트)
#netstat -l 또는 netstat -nap | grep LISTEN (LISTEN 되는 모든 포트)
#netstat -nap | grep ESTABLISHED | wc -l ( 모든 서비스 동시 접속자 수)
#netstat -nap | grep :80 | grep ESTABLISHED | wc -l ( 웹 동시 접속자 수)
#netstat -natc (열려있는 모든 TCP 포트를 일정시간마다 반복 출력한다) 



netstat를 명령어를 실행해 보면 위와 같은 결과를 화면으로 만나볼 수 있다. 이때 사용되는 용어들에 대해서 간단히 정리해 보도록 하겠다.

Recv-Q 

프로그램이 소켓을 맺고 카피되지 않은 바이트의 수이다.


Send-Q

리모트 호스트에 의해 응답(ACK) 되지 않은 바이트의 수이다.


LISTEN

서버 애플리케이션이 적재되어 수동적인 모드로 포트를 개설하였음을 의미로 TCP는 연 결요청이 수신 되기를 기다리고 있다.


ESTABLISHED

가상회선이 작동되는데, 3단계 핸드셰이킹 과정이 완료되면 두 시스템은 이 상태에 들어간다.


SYN-SENT

로컬 시스템의 클라이언트 애플리케이션이 원격 호스트에 능동적인 개설을 요청한다. TCP는 Synchronize flag 를 설정한 시작 세그먼트를 전송 하였으며, 원격 시스템도 역시 Synchronize flag 를 설정한 시작 세그먼트로 응답할 것을 기다린다.


SYN-RECEIVED

서버의 TCP가 원격 클라이언트로부터 Synchronize flag가 설정된 시작 세그먼트를 수신하였고 자신의 시작 세그먼트로 응답 하였으며, 그 세그먼트에 대한 확인메세지를기다린다.


FIN-WAIT-1

로컬 애플리케이션은 가상 회선에 능동적인 종결을 요청하였으며, TCP는 Finish flag가 설정된 종결 세그먼트를 전송한다. 그러나 TCP는 아직도 원격 시스템이 세그먼트에 대한 확인 메세지와 자신만의 종결 세그먼트로 응답하기를 기다린다. 회선이 완전히 종결될 때까지 원격 시스템으로부터 데이터는 수신하지만, 추가적인 데이터를 전송하지는않는다.


FIN-WAIT-2

(FIN-WAIT-1 의 설명과 처럼) 로컬 TCP는 Finish flag 가 설정된 종결 세그먼트를 전송하였으며, (WAIT-CLOSE 의 설명대로) 원격 시스템으로 부터 그 세그먼트에 대한 확인 메세지를 수신한다. 그러나 원격 애플리케이션이 아직 작업을 종료 하지 않아 원격TCP가 자신의 종결 세그먼트를 생성하지 못하고 있는 상태이다.


COLSE-WAIT

(FIN-WAIT-1 의 설명과 같이) Finish flag 가 설정된 종결 세그먼트가 수신되었고 로컬 TCP는 그 세그먼트에 대한 확인 메세지를 송신 시스템에 전송한다. 그러나 로컬 TCP는 로컬 애플리케이션에서 작업을 종료하지않아 자신의 종결 세그먼트를 생성하지 못한다.


LAST-ACK

(FIN-WAIT-1의 설명과 같이) Finish flag 가 설정된 종결 세그먼트가 수신되었고, 로컬 애플리케이션은 회선의 종결에 합의하여 자신도 종결을 요청한다. 그 결과 로컬 TCP는 Finish flag 가 설정된 자신의 종결 세그먼트를 전송 하였으며, 이 세그먼트에 대한 확인 메세지가 수신되면 종결된다.


CLOSING

이 상태는 흔하지 않으며, 일반적으로 세그먼트가 네트워크에서 분실되었다는것을 나타낸다. 이런 경우 로컬 TCP는 (FIN-WAIT-1 의 설명과 같이) Finish flag 가 설정된 종결 세그먼트를 전송 하고 (LAST-ACK 의 설명과 같이) 원격 시스템의 종결 세그먼트도 수신하였지만, FIN-WAIT-1 단계에서 전송한 세그먼트에 대한 확인 메세지가 수신되지않은 상태이다. 이 상태는 보통 확인 메세지가 전송 도중 분실되었다는 의미이다.


TIME-WAIT

회선의 종결 절차가 완결되었으나 TCP 는 분실되었을지 모르는 느린 세그먼트를 위해당분간 소켓을 열어 놓은 상태로 유지한다. 이 상태는 새로운 연결이 기존의 연결에서 사용된 일련번호를 다시 사용하는 것을 막는다. 원격 시스템이 종결하는 호스트로부터 더이상 데이터를 수신할 가능성이 없으므로, 이 상태는 능동적인 종결을 요청한 호스트에서만 나타난다.


CLOSED

아무일도 발생하지 않는다. 회선은 종결되었고, TCP는 그 가상 회선에 사용하였던 모든자원을 놓아준다. 이 상태를 보여줄 수 있는 가상 회선이 없으므로 아무 일도 발생하지 않는다.

'Linux' 카테고리의 다른 글

[ubuntu] adduser 기능 및 옵션  (0) 2013.01.30
Windows7에서 Ubuntu Install USB 만들기  (0) 2012.12.08
Ubuntu Memory 정보 알아보기  (0) 2012.03.22
ubuntu netstat 명령어 정리  (0) 2012.02.01
Ubuntu CPU 정보 알아보기  (2) 2012.01.27
Ubuntu CPU 프로세스 알아보기  (0) 2012.01.27
Posted by 나리 짱!!! naleejang