Web 어플리케이션 프로젝트

편집일시: 2020-05-18 12:10 조회수: 326 댓글수: 0
일반적인 Java 어플리케이션은 `gradle init`으로 생성하였다. 그러면 Web 어플리케이션은 어떻게 생성하고 구성되는지 설명한다. ## Web 어플리케이션 생성 Web 어플리케이션은 프로그램의 구성도 또한 실행 방법도 다르다. Java 클래스뿐만 아니라 HTML 및 JSP도 사용하므로, 그 파일들을 하나로 모와서 war 파일을 작성해야 한다. 또한 실행은 서블릿 컨테이너 (이른바 Java 서버)도 필요하다. 이렇게 생각한다면, 일반 Java 어플리케이션 생성 방법으로는 되지 않는다고 생각할 것이다. 그러면 일단 실제 프로젝트를 만들면서 Web 애플리케이션 개발 단계를 설명한다. 우선 프로젝트를 만든다. 명령 프롬프트 또는 터미널을 시작하고 적당한 위치에 프로젝트 디렉토리를 준비한다. ``` $ mkdir GradleWebApp $ cd GradleWebApp ``` 여기에서는 "GradleWebApp"라는 디렉토리를 만들고, 그 안으로 이동하고 Gradle의 초기화를 실시한다. ``` $ gradle init --type java-application ``` 이것으로 생성이 된다. 그런데 보면 알 수 있듯이, 극히 일반 Java 어플리케이션과 같은 방식이다. ``` $ mkdir GradleWebApp $ cd GradleWebApp $ gradle init --type java-application Starting a Gradle Daemon (subsequent builds will be faster) BUILD SUCCESSFUL in 16s 2 actionable tasks: 2 executed $ ls build.gradle gradle gradlew gradlew.bat settings.gradle src ``` 사실은 2017년 12월 시점에 Gradle에는 "Web 어플리케이션 전용 타입" 이라고 하는 것은 준비되어 있지 않다. 따라서 `java-application` 타입을 초기화하고, 나머지는 수동으로 프로젝트를 만들어 갈 수 밖에 없다. ## Web 응용 프로그램 폴더 구성 그럼, Web 어플리케이션의 폴더 구성을 준비한다. Web 어플리케이션의 폴더는 다음과 같은 형태로 구성된다. ### GradleWebApp 폴더 ``` . ├── build.gradle, 그외 생략 └── src └── main │   ├── java │   ├── resources │   └── webapp │   └── WEB-INF └── test └── java └── AppTest.java ``` 우선 어플리케이션 프로그램 관련에 대해 정리한다. 'test'등은 직접 관계 없기 때문에 설명은 생략한다. Web 어플리케이션 및 일반 Java 어플리케이션의 가장 큰 차이점은 main 폴더에 있는 폴더의 구성이다. 여기에는 아래와 같이 3개의 폴더가 있다. ### java폴더 익숙한 Java 소스 코드 파일을 배치하기 위한 폴더이다. 서블릿 등은 여기에 소스 코드를 배치한다. ### webapp 폴더 이는 Web 어플리케이션의 공개되는 폴더로 정적 웹 자원을 두는 곳이다. JSP 파일이나 HTML 파일 등은 여기에 배치한다. 또한 여기에는 WEB-INF 폴더를 준비하고 그 안에 web.xml을 배치한다. ### resources 폴더 Web 어플리케이션의 프로그램에 필요한 자원을 제공한다. 이는 Web 페이지에 표시할 이미지 파일 등은 아니다(그것들은 webapp 이다). 예를 들어, JPA 등을 이용할 때 준비하는 persistence.xml 같은 프로그램이 필요로 하는 리소스 파일이다. &nbsp; 그럼, 만든 GradleWebApp 안에 이러한 폴더들을 준비한다. main 안에 새롭게 webapp와 resources를 만들고 webapp에 추가로 WEB-INF를 생성한다. ## web.xml Web 어플리케이션의 각종 정보를 작성하는 web.xml를 준비한다. 여기에서는 최신 버전으로 Servlet 3.1를 사용한다. ``` <?xml version="1.0" encoding="utf-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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> ``` ## 서블릿 준비 Web 어플리케이션에서 표시하는 Web 페이지로 간단한 서블릿을 작성한다. main 폴더에 있는 java 폴더에 com 폴더 그 안에 devkuma 폴더 또는 그 안에 web 폴더를 만든다. 그리고 web 에 SampleServlet.java라는 이름으로 Java 소스 코드 파일을 작성한다. 소스 코드의 내용은 아래와 같다. ```java package com.devkuma.web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/hello") public class SampleServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html><head><title>Servlet</title></head>"); out.println("<body><h1>Sample Servlet</h1>"); out.println("<p>Welcome to Sample Servlet page!</p>"); out.println("</body></html>"); } } ``` 여기에서는 `@WebServlet` 어노테이션을 사용하여 `/hello` 서블릿을 주소를 설정하고 있다. 이 설정으로 인해 Servlet API 3.0 이상이 필요하다. 서블릿 컨테이너의 버전에 따라 동작하지 않는 경우도 있으므로 잘 확인해야 한다(단, 동작 체크 자체에는 외부의 서블릿 컨테이너는 사용하지 않기 때문에 문제는 일어나지 않을 것이다). 그외에 webapp 폴더에 JSP 파일이나 HTML 파일 등을 배치 해두면 된다. ## 최종 폴더 및 파일 구조 최종으로 파일을 모두 만들면 같이 된다. ``` . ├── build.gradle, 그외 생략 └── src ├── main │   ├── java │   │   ├── App.java │   │   └── com │   │   └── devkuma │   │   └── web │   │   └── SampleServlet.java │   ├── resources │   └── webapp │   └── WEB-INF │   └── web.xml └── test └── java └── AppTest.java ```

다음 글 : build.gradle 작성