반응형

그래들(Gradle)은 프로젝트를 생성할 때 지정하는 type을 통해 어플리케이션의 종류를 지정할 수 있습니다. 이번에는 Gradle을 이용해 Web 어플리케이션을 어떻게 만들고 빌드 할 수 있는지 알아봅니다. 특히 Gradle을 이용한 Web 어플리케이션 개발을 위한 방법은 여러가지가 있을 수 있으나 여기에서는 초경량 Servlet Container인 Jetty 서버(gradle에서는 'gretty' plugin으로 관련 파일을 실행) 와 Gradle의 war plugin을 이용해 개발 배포 하는 방법을 알아보도록 하겠습니다.

1. 프로젝트 만들기

Web 어플리케이션 역시 init의 type 파라미터는 java-pplication으로 지정하면 됩니다.
테스트를 위해 콘솔을 열어 아래와 같이 프로젝트를 만들어 보시기 바랍니다.
디렉토리명은 gradleweb입니다.

C:\java-msa\workspace>mkdir gradleweb
 
C:\java-msa\workspace>gradle init --type java-application
 
BUILD SUCCESSFUL in 7s
2 actionable tasks: 2 executed

2. WEB 빌드를 위한 어플리케이션 구조 만들기

Web 어플리케이션 개발, 배포를 위해 지금 만든 gradlewe/src/main 내부에 아래와 같은 구조로 디렉토리들을 추가하도록 합니다.

C:\java-msa\workspace\gradleweb

└─src
    ├─main
    │  ├─java
    │  ├─resources
    │  └─webapp
    │      └─WEB-INF
    │          └─views
    └─test
        └─java

3. Servlet 개발

3.1.web.xml 제작
%PROJECT_ROOT%/src/main/webapp/WEB-INF/web.xml 파일을 만들고 다음과 같이 내용을 입력 하도록 합니다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
xmlns="http://xmlns.jcp.org/xml/ns/javaee
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">

 
</web-app>

3.2. Servlet 만들기
%PROJECT_ROOT%/src/main/java/test라는 디렉토리를 만들고 TestServlet.java라는 파일을 만들고 다음과 같이 코드를 입력하도록 합니다. 코드를 보면 /test라는 url이 호출 되었을 때 WEB-INF/views 아래의 test.jsp 호출 되는 구조로 되어 있습니다. 또한 @WebService 어노테이션 사용을 통해 web.xml에 서블릿을 등록하지 않아도 작동 할 수 있겠 금 설정 했습니다.

package test;
 
import java.io.IOException; 
import java.io.PrintWriter; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.*;
 
@WebServlet("/test")
public class TestServlet extends HttpServlet {
 
  @Override
  public void doGet(HttpServletRequest request, HttpServletResponse response) 
  throws IOException,ServletException {
        process(request, response);
  }
 
  @Override
  public void doPost(HttpServletRequest request, HttpServletResponse response) 
  throws IOException,ServletException {
        process(request, response);
  }
    
  public void process(HttpServletRequest request, HttpServletResponse response) 
  throws IOException,ServletException {
        PrintWriter out = response.getWriter();
        request.getRequestDispatcher("/WEB-INF/views/test.jsp").forward(request, response);
    }
}

3.3. jsp 만들기
%PROJECT_ROOT%/src/main/webapp/WEB-INF/views 디렉토리 아래에 test.jsp를 만들고 내용을 다음과 같이 작성하도록 합니다.

<html>
           <body>
                     <h1>Hello Gradle!!</h1>
           </body>
</html>

3.4. 지금까지 작업 리뷰
지금까지의 작업한 결과의 디렉토리 구성은 다음과 같습니다.

C:\JAVA-MSA\WORKSPACE\GRADLEWEB
│  build.gradle
│  gradlew
│  gradlew.bat
│  settings.gradle
├─.gradle
│  ├─4.10.2
│  │  │  gc.properties
│  │  ├─fileChanges
│  │  │      last-build.bin
│  │  ├─fileHashes
│  │  │      fileHashes.bin
│  │  │      fileHashes.lock
│  │  └─taskHistory
│  │          taskHistory.bin
│  │          taskHistory.lock
│  └─buildOutputCleanup
│          buildOutputCleanup.lock
│          cache.properties
│          outputFiles.bin
├─gradle
│  └─wrapper
│          gradle-wrapper.jar
│          gradle-wrapper.properties
└─src
    ├─main
    │  ├─java
    │  │  │  App.java
    │  │  └─test
    │  │          TestServlet.java
    │  ├─resources
    │  └─webapp
    │      └─WEB-INF
    │          │  web.xml
│          └─views
    │                  test.jsp
└─test
        └─java
                AppTest.java

4. build.gradle 파일 수정

Web Application을 위한 build.gradle 파일은 war plug-in이나 기타 컴파일을 위한 추가 요소들이 더 필요합니다. Web Application을 구동하기 위해서는 Servlet Container가 필요한데 여기에서는 초경량 Servlet Container인 jetty 서버를 이용해 Web Application을 구동하도록 하겠습니다. 결론적으로 그래들(Gradle)의 기본 라이브러리외에 추가 라이브러리 사용해야 하며 이를 위해 buildscript를 추가해 jetty를 위해 gretty plug-in을 jenter로부터 추가 다운 받도록 하겠습니다.(buildscript, repository 그리고 dependencies를 알기 위해서는 여기를 클릭하시기 바랍니다.).

apply plugin: 'java' 
apply plugin: 'war' 
apply plugin: 'gretty' 
 
buildscript { 
           repositories { 
                     jcenter()
           } 
           dependencies { 
                     classpath group:'org.akhikhl.gretty', name:'gretty-plugin', version:'+' 
           } 

 
repositories { 
           jcenter() 

 
dependencies { 
           testCompile group:'junit', name:'junit', version:'4.12' 
}
 

4.1.war plug-in
그래들(Gradle)에서 java application 개발을 지원하기 위해 기본 기능에 war 기능을 추가합니다.

4.2.gretty plug-in
gretty는 그래들(Gradle)에서 jetty(경량 웹서버)를 사용 할 수 있게 해 주는 Plug-In 입니다. 
 

5. 배포 및 실행

5.1. war 생성
gradlew war 명령어를 통해 실행하며 war plug-in을 추가해서 사용 할 수 있는 task입니다. 명령어를 실행하게 되면 프로젝트 이름의 war 파일이 생성됩니다.

<C:\java-msa\workspace\gradleweb>gradle war
 
BUILD SUCCESSFUL in 5s
2 actionable tasks: 2 up-to-date
C:\java-msa\workspace\gradleweb>

이 결과 build디렉토리에 다음과 같은 war 파일이 생성되었습니다.

 …
C:\JAVA-MSA\WORKSPACE\GRADLEWEB\BUILD
├─classes
│  └─java
│      └─main
│          │  App.class
│          └─test
│                  TestServlet.class
├─inplaceWebapp
│  └─WEB-INF
│      │  web.xml
│      └─views
│              test.jsp
├─libs
│      gradleweb.war
└─tmp
    ├─compileJava
    └─war
            MANIFEST.MF


5.2. gradle run (Jetty 서버 실행)
그래들(Gradle)을 통해 콘솔상에서 jetty 서버를 실행해 보도록 합니다. 실행은 run을 통해 가능합니다.

C:\java-msa\workspace\gradleweb>gradle run
2018-12-11 14:21:28.285 INFO  - Auto-configuring server connectors
2018-12-11 14:21:29.064 INFO  - jetty-9.1.0.v20131115
2018-12-11 14:21:31.512 INFO  - Started o.e.j.w.WebAppContext@1c7696c6{/gradleweb,file:/C:/java-msa/workspace/gradleweb/build/inplaceWebapp/,AVAILABLE}
2018-12-11 14:21:31.757 INFO  - Started ServerConnector@16612a51{HTTP/1.1}{localhost:8080}
 
> Task :jettyRun
 
Jetty server 9.1.0.v20131115 started.
: runs at the address http://localhost:8080/gradleweb
Press any key to stop the jetty server.
<=========----> 75% EXECUTING [1m 25s]
> :jettyRun
> IDLE

5.3. 화면 테스트
웹 브라우저를 통해 방금 만든 test servlet을 호출 해 볼 수 있습니다.
http://localhost:8080/gradleweb/test


이상으로 그래들(Gradle)과 Jetty서버를 통한 간단한 웹 어플리케이션 개발 프로세스를 알아 보았습니다.
 
감사합니다.

반응형

+ Recent posts