SW/Gradle

Gradle : Java 웹 애플리케이션 War : 배포 방법, 예제, 개념, 개요

얇은생각 2025. 1. 21. 07:30
반응형

Java로 웹 애플리케이션을 만드는 즐거운 여정을 함께 해보려고 해요. 개인적으로, 백엔드 로직이랑 사용자 액션이 딱 맞아떨어질 때 그 기분이 진짜 최고잖아요? 그래서 오늘은 간단한 쿠폰 애플리케이션을 만들어볼 거예요. 사용자가 쿠폰 코드를 입력하면 할인을 받을 수 있는 기능을 구현하고, 나아가 이걸 WAR 파일로 패키징해서 서버에 배포하는 것까지 다뤄볼게요.

 

Gradle : Java 웹 애플리케이션 War : 배포 방법, 예제, 개념, 개요

 

1. 기본 HTML 구조 만들기

먼저 HTML 파일(index.html)을 만들어볼게요. 이 파일은 사용자에게 첫인상을 주는 메인 페이지 같은 거예요. 가장 먼저 할 일은 간단한 HTML 링크를 추가해서, 사용자가 클릭했을 때 쿠폰 코드를 입력할 수 있는 페이지로 이동하게 만드는 거죠. 이렇게 하면 사용자가 쉽게 접근할 수 있어요. 제가 처음에 만들었을 때도 이 링크를 넣고 나니까, “오, 이제 뭔가 웹사이트 같아 보이네?”라는 생각이 들더라고요.

index.html 파일은 이렇게 생겼어요:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Home - Coupon Application</title>
</head>
<body>
    <a href="coupon">Get Coupon</a>
    <form action="coupon" method="post">
        <label for="coupon">Coupon Code:</label>
        <input type="text" id="coupon" name="coupon">
        <input type="submit" value="Get Discount">
    </form>
</body>
</html>

여기 보면 <a href="coupon">Get Coupon</a>라는 링크가 있어요. 이 링크를 클릭하면 Java Servlet으로 연결돼요. 그리고 그 밑에 있는 폼에서 사용자가 쿠폰 코드를 입력할 수 있게 했죠. 폼은 POST 메서드를 사용해서 데이터를 서버로 보내요. 이게 GET보다 좀 더 안전한 방식이거든요. 저도 처음에는 이 차이를 몰라서 여기저기 실수도 했었는데, 그 과정에서 많이 배웠어요.

 

2. Java Servlet 작성하기

Java Servlet은 웹 애플리케이션에서 사용자 요청을 백엔드 로직으로 연결해주는 중요한 역할을 해요. 이번 프로젝트에서는 GETPOST 요청을 둘 다 처리할 수 있는 Servlet을 만들어볼 거예요.

  • GET 요청 처리: 사용자가 쿠폰 링크를 클릭하면 GET 메서드가 호출돼요. 그리고 Servlet이 간단한 메시지를 브라우저로 보내줘요. 뭐, “Super Sale” 같은 거죠. 짧지만 강렬하게!
  • POST 요청 처리: 사용자가 쿠폰 코드를 제출하면 POST 메서드가 실행돼서 할인 메시지를 만들어주고, 그 결과를 화면에 보여줘요.

 

다음은 Java 코드 예시예요:

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/coupon")
public class CouponServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().print("Super Sale");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String coupon = request.getParameter("coupon");
        String discountMessage = "Discount for coupon " + coupon + " is 50%";
        request.setAttribute("discount", discountMessage);
        request.getRequestDispatcher("response.jsp").forward(request, response);
    }
}

여기서 중요한 부분은 @WebServlet("/coupon") 애너테이션이에요. 이걸 사용해서 /coupon URL과 Servlet을 연결했어요. 그래서 사용자가 쿠폰 코드를 입력하고 제출하면, doPost 메서드가 그 요청을 받아서 response.jsp로 결과를 전달하는 거예요. 처음에 이걸 이해하는 데 시간이 좀 걸렸는데, 개념을 잡고 나니까 정말 재미있었어요.

 

3. JSP로 할인 표시하기

사용자가 쿠폰 코드를 제출했으면 이제 할인을 보여줘야겠죠? 그 역할을 하는 게 바로 response.jsp예요. 여기서는 Servlet에서 받은 할인 메시지를 그대로 사용자에게 보여줘요. 사용자 입장에서는, “오, 쿠폰 입력했더니 바로 할인 정보가 나오는구나!”라는 느낌을 받을 수 있도록 해주는 거죠.

response.jsp 파일은 이렇게 생겼어요:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Discount Page</title>
</head>
<body>
    <h2>Your discount: ${discount}</h2>
</body>
</html>

이 JSP 페이지에서는 JSP 표현 언어 (${})를 사용해서 Servlet에서 설정한 할인 메시지를 그대로 보여줘요. 솔직히 이렇게 간단하게 사용자에게 결과를 보여줄 수 있는 게 JSP의 매력이에요. 처음엔 어렵게 느껴졌지만, 손에 익고 나니까 금방 익숙해졌어요.

 

4. Gradle로 애플리케이션 WAR 파일로 패키징하기

이제 모든 기능을 다 만들었으니까, 애플리케이션을 패키징해서 서버에 배포할 준비를 해야겠죠? Gradle의 WAR 플러그인을 사용하면 이 작업이 정말 간단해져요. WAR 파일은 말 그대로 모든 프로젝트 파일을 하나로 묶어주는 도구라고 생각하면 돼요. 저도 처음에 이걸 알게 됐을 때, “와, 이렇게 쉽게 배포 준비를 할 수 있다니!”라고 감탄했어요.

먼저 build.gradle 파일을 이렇게 수정해 볼게요:

plugins {
    id 'war'
}

dependencies {
    compileOnly 'jakarta.servlet:jakarta.servlet-api:5.0.0-M2'
}

 

여기서 중요한 건:

  • 원래 쓰던 application 플러그인 대신 war 플러그인을 사용했다는 점이에요.
  • jakarta.servlet-apicompileOnly로 추가했는데, 이건 컴파일할 때만 필요하고, 실제 실행할 때는 필요 없기 때문이에요.

 

이제 WAR 파일을 빌드하려면 다음 명령어를 실행해 보세요:

gradle war

이 명령어를 실행하면 Java 클래스를 컴파일하고, 모든 파일을 하나의 WAR 파일로 묶어서 Apache Tomcat 같은 서버에 배포할 수 있게 해줘요. 이렇게 말하니까 어렵게 느껴질 수도 있지만, 사실 명령어 한 줄이면 끝나는 거라 정말 편리해요.

 

5. 배우면서 느낀 점: 개인적인 이야기

Java Servlet과 JSP를 처음 다뤘을 때는 솔직히 조금 헷갈렸어요. HTML 설정부터 Servlet 연결, JSP 페이지에서 응답 보여주는 것까지, 요즘 사용하는 프레임워크들과 비교하면 꽤 다른 점이 많았거든요. 특히 GETPOST 요청의 차이를 이해하는 게 처음에는 크게 와닿지 않았는데, 데이터 보안이나 처리 측면에서 이게 얼마나 중요한지 알게 됐어요. 한 번은 GET 요청으로 데이터를 보냈다가 보안 문제가 생겨서 꽤 애를 먹었던 기억이 나네요. 하지만 그런 경험 덕분에 더 많이 배우게 된 것 같아요.

Gradle을 쓰면서는 “이렇게 간단하게 패키징할 수 있다니” 하고 감탄했어요. 몇 줄의 코드로 애플리케이션을 WAR 파일로 만들어서 배포 준비를 끝낼 수 있다는 게 정말 매력적이었죠. 그리고 compileOnly 스코프를 사용해서 불필요한 의존성은 빼고 깔끔하게 유지하는 것도 큰 도움이 됐고요. 이렇게 하나하나 경험하면서 조금씩 성장하는 느낌이 들어서 뿌듯했어요.

 

6. 마무리

Java로 Servlet과 JSP를 사용해서 웹 애플리케이션을 만드는 건 정말 보람찬 경험이에요. 요청과 응답의 흐름을 이해하는 건 웹 개발의 기본을 다지는 데 큰 도움이 되죠. HTML로 사용자 인터페이스를 만들고, Servlet으로 백엔드 로직을 처리하고, JSP로 사용자에게 결과를 보여주는 그 과정 하나하나가 웹 개발의 깊이를 더해주는 것 같아요. 그리고 WAR 파일로 패키징해서 실제 배포까지 하는 과정은 더더욱 값진 경험이었어요. Java 풀스택 개발에 관심 있는 분들이라면 꼭 한 번 해보시길 추천드려요.

반응형