플렉스로 만들기는 했지만, 뭐 모든 클라이언트 플랫폼에서 쉽게 만들 수 있습니다.

요아래에 있는 RESTful Web Service를 구축하셨다면 그것을 이용한 클라이언트가 필요할 것입니다.

게시판용 RESTful WebService만들기
http://mudchobo.tomeii.com/tt/345
http://mudchobo.tomeii.com/tt/346

그래서 구현해봤습니다.
우선 5가지 요청을 합니다.

1. 게시물 리스트를 받아오는 것(GET)
2. 게시물 1개의 데이터를 받아오는 것(GET)
3. 게시물 쓰기(POST)
4. 게시물 삭제(DELETE)
5. 게시물 수정(PUT)

핵심은 RESTful요청이 가능한 라이브러리입니다. 요아래를 참고하세요~

[Flex/AIR] RESTful WebService를 위한 Flex RestService Library!


이 라이브러리를 통해 RESTService요청을 합니다. (기존 Flex에 있는 HTTPService는 DELETE와 PUT이 안됩니다.)
[code]
<rest:RESTService id="boardService" method="GET"
        rootURL="http://localhost/BoardWS/resources/wsboards/" port="9080"
        result="resultBoardHandler(event)" fault="faultHandler(event)"/>
[/code]
이런식으로 요청하면 되겠죠? ^^

아래는 구현체 소스입니다.
허접해서 도움이 될지는 모르겠지만....-_-; 어쨌든 저의 삽질의 결정체니....-_-;

저 위에서 구현한 WebService를 띄워놓고, 이 클라이언트로 접속하면 잘 될겁니다.

사용자 삽입 이미지

 
Posted by 머드초보

댓글을 달아 주세요

  1. BlogIcon AccessDenied 2008.10.16 16:15  댓글주소  수정/삭제  댓글쓰기

    역시 좀 짱이군 ㅎㅎㅎ

 
넷빈즈에서는 RESTful 웹서비스를 손쉽게 만들 수 있습니다.
RESTful은 기존에 사용하던 SOAP/WSDL-based의 WebService와 다르게 매우 간단하게 HTTP를 통해서 자원을 접근할 수 있습니다. 넷빈즈 웹서비스관련문서페이지에는 이렇게 써있군요.

  • REST-based. REpresentational State Transfer is a new way to create and communicate with web services. In REST, resources have URIs and are manipulated through HTTP header operations. For more details, see RESTful Web Services.
  • SOAP/WSDL-based. In traditional web service models, web service interfaces are exposed through WSDL documents (a type of XML), which have URLs. Subsequent message exchange is in SOAP, another type of XML document. For more details, see SOAP-based Web Services.

기존 SOAP/WSDL-based는 WSDL이라는 문서에 정의된 것을 바탕으로 데이터를 요청하고, 요청한 결과를 리턴받는 것 같았습니다. 그리고 데이터를 주고받기 위해서 SOAP이라는 프로토콜을 사용했습니다. 그 프로토콜에 의하면 무슨 봉투만들고, 정의된 표준에 의해서 리턴값을 만들어야 하는 점이 있었는데요.

이 RESTful방식은 자원이 uri를 가지고 있는데요. 그냥 http요청으로 해당 자원 uri를 요청하는데, method를 get, put, delete, post를 이용해 직관적으로 자원에 접근하는 듯 합니다. 아직 잘 모르겠네요-_-; DB랑 연동해서 삽질해보려니 힘들어서 우선 제가 제일 좋아하는 sayHello만 찍어봤습니다-_-;

참고자료
넷빈즈 웹서비스 관련문서페이지
http://www.netbeans.org/kb/61/websvc/intro-ws.html

1. 느리고 답답한 넷빈즈6.1이 필요합니다.

2. New Project -> Web -> Web Application, ProjectName은 HelloWS, Next!

3. Server는 GlashFish V2로 합니다. tomcat으로는 여기서도 아마 테스트를 지원하지 않을 듯 합니다. Finish!

4. HelloWS프로젝트 이름에 대고, 오른쪽버튼 New -> Other -> Web Services -> RESTful Web Services from Patterns선택, Sinleton선택 Next!

5. Resource Package는 자기가 원하는 대로! 저는 com.mudchobo.hello,
Resource Name은 Hello. 이것만 고치면 아래는 자동으로 고쳐집니다. Path부분이 해당 자원의 uri가 됩니다. Finish!
만들어진 소스코드를 보면 HelloResource라는 클래스가 생성되었습니다. @Path("hello")라는 어노테이션이 붙었는데요. HelloResource라는 자원은 /hello로 접근하는 자원이라는 것을 지정해주는 겁니다.
이 HelloResource에는 2가지 메소드가 자동으로 만들어졌습니다. GET과 PUT인데요.
우리가 만들것은 parameter로 name을 받아서 Hello! name 을 리턴하는 것을 만들껀데요. 그러면 GET메소드를 수정해야합니다.

[code]@GET
    @ProduceMime("application/xml")
    public String getXml(
            @QueryParam("name")
            @DefaultValue("NONE")
            String name) {
        return "<?xml version=\"1.0\" encoding=\"utf-8\"?><hello>Hello! " + name + "</hello>";
    }
[/code]
QueryParm어노테이션은 http요청 시 요청파라메터구요. 이건 name으로 받습니다. DefaultValue는 NONE로 했습니다.
보통 자원에 접근하는 주소는 아래와 같이 되더군요.
http://localhost:8080/HelloWS/resources/자원URI
hello자원은 http://localhost:8080/HelloWS/resources/hello이더군요.

저렇게 바꾸었으면 테스트를 할 수 있습니다. GlassFish가 테스트를 너무 잘 지원해줘서 참 좋습니다.

사용자 삽입 이미지

HelloResource클래스에 GET과 PUT이 있기때문에 2개가 나옵니다. 아래는 테스트결과로 리턴받는 값을 실제로 볼 수 있습니다. http Monitor도 있어서 요청한 값, 리턴값을 다 볼 수 있습니다.

이제 다른 클라이언트에서 사용할 수 있습니다. Flex에서 요청하신다면...이건 SOAP WSDL방식이 아니기 때문에 <WebService>를 사용하는 것이 아니라 <HTTPService>를 사용해야합니다.
[code]<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">

    <mx:Script>
        <![CDATA[
            import mx.rpc.events.ResultEvent;
            private function click():void
            {
                service.send({name: inputName.text});
            }
           
            private function result(event:ResultEvent):void
            {
                 labelResult.text = event.result.hello;
            }
        ]]>
    </mx:Script>
    <mx:HTTPService id="service" method="GET"
        url="http://localhost:8080/HelloWS/resources/hello"
        result="result(event)" />
       
    <mx:TextInput id="inputName" />
    <mx:Button label="확인" click="click()"/>
    <mx:Label id="labelResult" />
   
</mx:WindowedApplication>
[/code]
해당 자원주소에 method를 지정해주고 파라메터로 name을 넘기면 됩니다.
그럼 리턴값은 xml로 받게 됩니다.

제가 잘 몰라서 그러는데, 잘못된 점 있으면 태클걸어주세요-_-; 아직도 잘 모르겠네-_-;
아졸려...-_-;


 
Posted by 머드초보

댓글을 달아 주세요

  1. 고도리 2011.02.07 22:42  댓글주소  수정/삭제  댓글쓰기

    잘보고 갑니다^^
    wcf활용해서 restful 서비스하다 막혀서 한번해봤는데 정말 손쉽게 잘 되는군요^^
    이클립스도 이런기능있었으면 좋겠는데 아쉽군요^^

    아무튼 좋은글 잘 보고갑니다!

    아근데
    제가 자바는 안써보고 처음해봐서그런데;
    어노테이션부분은 스스로 정의하는건가요?
    오류가 나네요 ㅜㅜ [Code]부분도 그렇고

    오류가 나는데 왜그럴까요 ? ㅠㅠ

 
이건뭐 설명이 필요없네요.
아까 전시간에 만든 WebService를 호출해봅시다.

전시간에 만들어 놓은 웹서비스
http://mudchobo.tomeii.com/tt/328

플렉스빌더를 실행합니다.
Air로 프로젝트를 하나 만듭니다.
[code]
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
    layout="vertical">
   
    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;
           
            private function callWebService():void
            {
                helloWebService.sayHello(input.text);
            }
           
            private function resultHandler(event:ResultEvent):void
            {
                Alert.show(event.result.toString());   
            }
           
            private function faultHandler(event:FaultEvent):void
            {
                Alert.show(event.fault.message);   
            }
        ]]>
    </mx:Script>
   
    <mx:WebService id="helloWebService"
        wsdl="http://localhost:9080/HelloWebApp/HelloService?WSDL"
        useProxy="false"
        result="resultHandler(event)"
        fault="faultHandler(event)" />
       
    <mx:TextInput id="input" enter="callWebService()"/>
    <mx:Button id="button" label="Button" click="callWebService()"/>
       
</mx:WindowedApplication>
[/code]
wsdl부분에서만 주소를 WSDL파일 주소로 써주세요.
그 외에는 RemoteObject나 HTTPService와 같이 같은 방식으로 해주면 돼요.

다음엔 RESTful이 뭔지 좀 알아봐야겠습니다.

 
Posted by 머드초보

댓글을 달아 주세요

  1. BlogIcon 꽃녀 2008.09.23 09:23  댓글주소  수정/삭제  댓글쓰기

    왜 머드죠?
    진흙초보인가요?
    본문과 상관없는 내용 ㅈㅅ.;;

    • 머드초보 2008.09.23 10:02  댓글주소  수정/삭제

      아......-_-;
      http://ko.wikipedia.org/wiki/%EB%A8%B8%EB%93%9C_%EA%B2%8C%EC%9E%84
      머드라는 게임의 한장르가 있었습니다.
      MUD(Multi User Dungeon)!
      PC통신 때 해본사람만 아는 ^^
      직접 커맨드로 입력해서 동서남북으로 이동하고, 몬스터를 만나면
      '몬스터이름 공' 이런식으로 커맨드를 쳐주면 공격하고, 기술이름도
      쓰고 그러는 게임이 있었거든요 ^^

      그런 게임을 처음 접할 때 왠지 머드뒤에 초보라고 붙이면,
      거기 사람들이 많이 도와줄 것 같아서-_-;
      머드초보라고 지었는데 그 뒤로 계속 써왔네요 ^^
      중1때 처음 했으니...벌써....10년이 넘었군요 ㅠ

  2. BlogIcon 꽃녀 2008.09.23 12:50  댓글주소  수정/삭제  댓글쓰기

    중1이면 14살..
    그럼 머드님 나이가 24~25인가여?
    후덜덜덜...덜덜

    • 머드초보 2008.09.23 13:18  댓글주소  수정/삭제

      아.....대충 10년이라는 얘기였는데 ^^
      그래도 거의 근처에 맞추셨네요 ^^
      26살이에요 ^^
      꽃녀님은 왜 꽃녀인지 물어봐도 될까요? ^^

  3. BlogIcon 꽃녀 2008.09.23 16:07  댓글주소  수정/삭제  댓글쓰기

    헉.. 머드소년님이시네요...ㅜㅜ
    부럽삼
    전 광남할려다가 이상해서 꽃남 하려고 하다가 이상해서 꽃녀로 한거에요.히히

    • 머드초보 2008.09.23 16:23  댓글주소  수정/삭제

      소년이라뇨 ^^
      제가 얼굴에 +5나이 면상 아이템을 착용하고 있어서-_-;
      아하 그렇군요 ^^
      사실 전 처음에 여자분이신줄 알았어요-_-;

    • BlogIcon 열이아빠 2008.10.09 23:27  댓글주소  수정/삭제

      그런 사연이 있었군요.
      덕분에 머드초보님에 대한 정보도
      얻어가네요..ㅎㅎ

    • 머드초보 2008.10.10 09:08  댓글주소  수정/삭제

      아넵 ^^ 사실 방문을 유도한....-_-;
      위자드팩토리 런칭파티가시나요? ^^
      저는 치과때문에 못가는데-_-;

 
친구가 학교에서 웹서비스를 배운다고 합니다.
저도 그 수업을 들었죠. 그 수업에서 웹서비스를 만드는 것은 정말 많은 노력이 들어가서 만드는 방법이였습니다. 필요한 라이브러리를 다 각각 복사하고, 컴파일도 직접하며, 톰캣도 이상한 웹서비스 톰캣을 사용하더라구요.
그렇게 하게되면 완전 원시적인 방법으로 배우게 되므로 많은 도움이 되긴 됐습니다만, 이렇게 손쉽게 만드는 방법도 알아두면 좋죠 ^^

이건 SOAP프로토콜을 이용한 웹서비스를 만들겁니다. 최근 RESTful을 이용한 어쩌구 하는데 이건 좀 더 공부가 필요하겠네요.

우선 넷빈즈를 실행합니다. 넷빈즈는 여기서 다운로드할 수 있습니다.
http://download.netbeans.org/netbeans/6.1/final/
왠만하면 다되는걸로 받으세요-_-; 다되면 좋잖아요 ^^

실행한 뒤 웹애플리케이션을 만듭니다.
New Project -> Web -> Web Application
ProjectName : HelloWebApp
server: GlassFish v2
(톰캣으로 해도 됩니다만, 톰캣은 테스트를 할 수 없더라구요. 예전에 수동으로 웹서비를 만들었을 때 테스트가 너무 힘들어서 삽질했던 기억을 생각하면...-_-; GlassFish도 참 대단한 was같네요)
Finish로 생성.

웹서비스를 만들기 위해서는 프로젝트이름의 마우스오른쪽버튼을 누르면 New -> WebService가 있습니다.
Web Service Name은 Hello라고 하고, package는 com.mudchobo.hellows라고 합시다.
Finish를 누르면 Design모드로 뭔가 뜹니다.
여기서 우리가 Operation을 하나 만들어봅시다.
Add Operation을 클릭합니다.
Name은 메소드명입니다. sayHello라고 합시다.
Return Type은 말그대로 리턴형입니다. 걍 냅둡시다.
parameter는 1개추가해서, Name을 name이라고 하고, 형은 java.lang.String으로 합시다.
이제 Source보기로 바꿉니다.

소스를 보면 WebService를 어노테이션으로 만들 수 있는 것을 볼 수 있습니다.
이건 정말 환상적이네요. 기존에 WSDP인가? 이걸로 할 때에는 미친듯이 삽질해도 웹서비스를 만드려면 엄청힘들었는데 이건뭐 그냥 어노테이션으로 끝내버리네요 ^^
[code]
@WebService()
public class Hello {

    /**
     * Web service operation
     */
    @WebMethod(operationName = "sayHello")
    public String sayHello(@WebParam(name = "name")
    String name) {
        //TODO write your implementation code here:
        return "Shit! " + name + " 바보!";
    }

}
[/code]
위와 같이 name이라는 파라메터를 넣으면 return은 Shit! 이름 바보! 라고 보내줍시다.
이제 한번 run을 해봅시다.
GlassFish가 시작되면서 브라우저로 웹페이지가 뜹니다.
Hello World!라고 뜨는군요. 이제 WebService를 테스트해봅시다.

WebService -> Hello에 오른쪽버튼 클릭 후 Test Web Service를 클릭합니다.


한글은 깨지는군요. 어쨌든 WSDL파일도 클릭하면 볼 수 있습니다.
테스트하면 잘 되는군요.

다음시간에는 클라이언트를 통해서 저 웹서비스를 호출해보도록 하겠습니다.
클라이언트 언어는 쉽게 WebService를 호출할 수 있는 Flex로 해보도록 합시다-_-;
클라이언트는 여기를 클릭하세요.
http://mudchobo.tomeii.com/tt/329
 
Posted by 머드초보

댓글을 달아 주세요