바로 직전 포스팅에 이어 이번에는 이클립스에서 메이븐으로 Embedded Glassfish(이하 eGF) 개발을 다루도록 하겠습니다. 이 내용은 지난번 오픈소스 프로그래밍 수업시간에 과제로 제출한 내용인데요, 벗꽃은 만발하고 하늘은 청명한 가운데 이 레포트를 끝내지 못해서 출사 가지 못한 한을 담아 포스팅을 합니다.(이날 대략 12시간의 삽질 끝에 레포트를 마칠 수 있었습니다. 물론 레포트를 마치고 출사를 가려했던 저의 꿈은 산산히 부서졌다는 ㅠㅜ)
  우선 미리 알려 드리는 사항은 eGF의 API는 계속 변하고 있으므로 이 포스팅에서 사용한 문법이 언제까지 유효할지 모른다는 점입니다.(이 문제 때문에 주말내내 삽이 나이고 내가 삽인 삽과의 물아일체를 경험하였습니다. -_-;) 혹시 포스팅 날짜(2009년 4월 8일)로 부터 많은 시간이 흐른뒤 보시는 분은 API를 다시한번 확인 하실 필요가 있을듯 합니다.
  우선 과제에 앞서서 저희에게 주어진 참고 링크들은 아래와 같았습니다.
Embedded GlassFish
  하지만.. 어느 예제도 지금 현재 동작하는게 없었습니다. OTL 다만 이런 자료들을 통해서 개괄적으로 어떻게 동작하는지는 파악할 수 있었습니다. 그런데 저 링크들을 하나씩 봐보면 서버의 역할을 하는 각각의 클래스 이름이 변한것을 알 수 있습니다. 어떤 자료에선 Server란 클래스를 사용하고 있고 어떤 자료에선 GlassFish란 클래스를, 어떤 자료에선 AppServer란 클래스를 사용하고 있습니다.
  그럼 서론을 거두절미하고 본론으로 들어가서 이클립스를 이용해서 eGF를 개발하는 방법을 알아보도록 하겠습니다.(이 전에 지난번에 포스팅을 한 "Eclipse에서 maven 개발환경 구축하기" 를 참고하셔서 메이븐 개발환경을 구축해 주세요)우선 이클립스를 실행한 다음 File>New를 선택해서 들어갑니다. 메뉴트리엣서 Maven>Maven Project를 선택하고 Next를 누릅니다.
New

Maven>Maven Project

  다음 창에서 Create a simple project(skip archetype skeleton)을 체크해주고, Use default Workspace location도 체크해준 다음 현재 워크스페이스의 경로를 설정해 줍니다.
New Maven Project
  다음 창으로 넘어가자마자 Enter a groupID for the artifact란 에러 메시지가 뜨는데, 여기서 당황하지 마시고 GroupId와 Artifact Id에 대충 아무거나 적어줍니다. Description에 아무 메시지나 적어줍니다.(Description이 비어 있으면 이상하게 에러가 뜨더라고요 -_-;)
New Maven Project
  Finish를 눌러주면 이클립스 하단 Console창에 파란색 글씨로 뭔가 메시지가 쭉쭉~ 올라가는게 보입니다. 아마 프로젝트를 새로 생성한다는 정보가 그냥 쭉쭉 올라가는것 같습니다. 프로젝트 생성이 완료되면 아래 그림과 같이 프로젝트가 생성됩니다.
Project Explorer
  그럼 우선 eGF 사용을 위해 pom.xml을 수정하도록 하겠습니다. eGF의 사용을 위해 pom.xml에 아래 내용을 추가해 줍니다.(물론 최상위 노드인 project 노드 안에 포함되도록 추가해야 하겠습니다.)
<repositories>
    <repository>
        <id>glassfish-repo-archive</id>
        <name>Nexus repository collection for Glassfish</name>
        <url>http://maven.glassfish.org/content/groups/glassfish</url>
        <snapshots>
            <updatePolicy>never</updatePolicy>
        </snapshots>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.glassfish.embedded</groupId>
        <artifactId>glassfish-embedded-all</artifactId>
        <version>3.0-SNAPSHOT</version>
    </dependency>
</dependencies>
  이제 maven에 대한 설정은 끝이 났습니다. 이제 남은것은 서버를 동작시킬 메인 함수를 갖고 있는 클래스를 생성하는 것과 서비스로 제공되어질 서블릿 클래스를 생성하는 것입니다.(테스트는 빼겠습니다. why? 귀찮고 할줄 몰라서 -_-;)  src란 폴더 밑으로 main이란 폴더와 test란 폴더가 자동으로 생성되 있을 것입니다. main이란 폴더를 열어보면 java란 폴더와 resources란 폴더가 들어 있는데 resources는 web.xml이나 기타 어플리케이션에 필요한 자료를 담는 폴더라고 보시면 되고 java폴더는 말 그대로 java 소스를 저장하는 폴더라고 보시면 됩니다. /src/main/java 에 HelloServlet.java란 클래스 파일을 하나 생성하고 아래와 같이 소스를 입력합니다.
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.println("Hello Servlet~!");
    }
}
src/main/resources 폴더에 web.xml을 생성하고 아래와 같이 내용을 작성합니다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      version="3.0">
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/HelloServlet</url-pattern>
    </servlet-mapping>
</web-app>
  이렇게 작성하면 우리가 서비스 해야될 HelloServlet이란 서블릿 클래스의 생성이 완료됩니다. 이제 eGF를 사용해서 이 서비스를 제공할 서버를 띄우면 되겠죠? :-) src/main/java 폴더에 main함수를 갖는 임의의 클래스를 생성해서 아래와 같이 작성해 줍니다.
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.Collections;

import org.glassfish.embed.AppServer;
import org.glassfish.embed.ScatteredWar;

class HanDK{   
    public static void main(String[] args) throws Exception{
        String NAME = "handk";
        String SNAME = "/HelloServlet";
        int port = 9999;
        AppServer glassfish = newGlassFish(port);
        ScatteredWar war = new ScatteredWar(NAME,
                new File("src/main/resources"),
                new File("src/main/resources/web.xml"),
                Collections.singleton(new File("target/classes").toURL()));
        glassfish.deploy(war);
        URL url = new URL("http://localhost:" + port + "/" + NAME + SNAME);
        BufferedReader br = new BufferedReader(
                new InputStreamReader(
                url.openConnection().getInputStream()));
       
        System.out.println("");
        System.out.println("Connect to http://localhost:"+port+"/"+NAME+SNAME);
       
    }
    static AppServer newGlassFish(int port) throws Exception {
        AppServer glassfish = new AppServer(port);
        System.out.println("Ready ...");
        return glassfish;
    }
}
  작성이 끝나면 Project Explorer에서  프로젝트 이름에 오른쪽 클릭 후 Run as.. 메뉴의 maven install 메뉴를 클릭 해주면 이 프로젝트에 필요한 eGF라이브러리들을 메이븐이 알아서 repository에서 받아옵니다.
eGF 라이브러리 다운로드가 완료되면 Run as..>Java Application으로 실행시켜 봅니다. 실행이 완료되면 아래와 같은 화면을 보실 수 있습니다.
실행이 완료되면 아래와 같이 브라우저 상에서 서블릿이 동작하는 것을 확인하실 수 있습니다.
  위에서도 누차 강조했듯이 eGF는 현재 진행중인 오픈소스 프로젝트이기 때문에 어느정도 시간이 지나면 이 포스팅의 내용과는 다르게 흘러 갈 수 있습니다. 이점 주의하셔서 참고하시기 바랍니다. :-)
저작자 표시
신고
Posted by 제소

댓글을 달아 주세요

  1. 잘생긴호년 2009.04.13 13:06 신고  댓글주소  수정/삭제  댓글쓰기

    ㅋㅋㅋ 동균이 바보다

  2. RonaldOi 2015.01.09 19:45  댓글주소  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.



티스토리 툴바