간단한 용어설명
WAS(웹 애플리케이션 서버 Tomcat, 웹 서버 + 서블릿 컨테이너 기능 제공)
서블릿 컨테이너(Catalina, 서블릿을 관리하는 곳, Tomcat 이라고도 함)
스프링 컨테이너(Controller, Service 등 Bean 을 관리하는 곳)
서블릿(Servlet, Client 의 모든 요청을 받아서 -> 스프링이 만든 Controller 에게 배분)
WAR
WAR(Web Application Archive) 라는 이름에서 알수가 있듯이 WAR 파일은 웹 애플리케이션 서버(WAS) 에 배포할 때 사용하는 파일입니다. JAR 파일이 JVM 위에서 실행된다면, WAR 는 웹 애플리케이션 서버(WAS) 위에서 실행됩니다.
HTML 같은 정적 리소스와 클래스 파일을 모두 함께 포함하기 때문에 JAR 와 비교해서 구조가 더 복잡하고 WAR 구조를 지켜야 하기 때문에 더 복잡합니다.
WAR 압축을 풀어보면 WEB-INF 가 있는데 안에 자바 클래스와 라이브러리, 설정 정보가 들어갑니다.
WEB-INF 와 나머지 영역은 HTML, CSS 같은 정적 리소스가 사용되는 영역입니다.
WAR 배포방법
과거에 자바로 웹 애플리케이션을 개발할 때는 먼저 서버에 톰캣 같은 WAS(웹 애플리케이션 서버) 를 설치해야 했습니다.
그리고 WAS 에서 동작하도록 서블릿 스팩에 맞추어 코드를 작성하고 WAR 형식으로 빌드해서 war 파일을 만들었습니다.
이렇게 만들어진 war 파일을 WAS 에 전달해서 배포하는 방식으로 전체 개발 주기가 동작했습니다.
이런 방식은 WAS 기반 위에서 개발하고 실행해야 합니다.
여기서 말하는 WAS 는 위에서 설명하였듯이 Tomcat 을 말합니다.
작동방식은 아래와 같습니다.
WAR 파일(WAS 에 맞추어 Servlet 설정, WAR 형식으로 빌드) -> 웹 애플리케이션 서버(WAS, Tomcat)에 전달 -> 가동
간단한 WAR 배포
우선 WAR 파일을 배포하기 위해서는 아파치 톰캣이 필요합니다.
저는 MAC 을 사용하고 있어 MAC 기준으로 설명하겠습니다.
아파치 톰캣을 설치하려면 MAC, Linux 사용자는 아래와 같은 설정을 해야 합니다.
톰켓설치폴더/bin 폴더로 이동 -> chmod 755 * (권한을 주기 위해서입니다.)
이렇게 설정을 하고 실행하거나 종료를 하시면 됩니다.
실행할 때는 ./startup.sh, 종료할 때는 ./shutdown.sh 입니다.
MAC, Linux 사용자는 권한을 주지 않으면 "permission denied" 라는 오류가 발생하기 때문에 설정이 꼭 필요합니다.
톰캣 실행 로그는 아래와 같은 폴더 경로에서 확인이 가능합니다.
톰캣폴더/logs/catalina.out
만약 톰캣이 실행되지만 localhost:8080 으로 접근이 되지 않는다면 catalina.out 을 확인하시면 됩니다.
대부분 8080 port 를 사용하고 있어 오류가 발생하는 경우가 많기 때문에 8080 port 를 꺼주시면 됩니다.
이제 우리가 만든 WAR 파일을 배포하기 위해 프로젝트 폴더로 이동하고 아래와 같은 순서로 진행하시면 됩니다.
./gradlew build
build/libs/server-0.0.1-SNAPSHOT.war 파일 생성됨.
이렇게 ./gradlew build 명령어를 입력하시면 server-0.0.1-SNAPSHOT.war 파일이 생성이 됩니다.
이렇게 배포한 WAR 를 WAS 에 올려 실행하는 방법은 다음과 같습니다.
혹시나 모를 톰캣 서버를 종료한다. ( ./shutdown.sh )
톰켓폴더/webapps 하위를 모두 삭제한다.
빌드된 server-0.0.1-SNAPSHOT.war 를 복사하고 톰켓폴더/webapps 에 넣는다.
빌드된 server-0.0.1-SNAPSHOT.var 파일을 ROOT.war 이름으로 변경한다.
톰캣 서버를 다시 시작한다. ( ./startup.sh )
WAR 파일 내부 살펴보기
WAR 를 푼 결과는 아래와 같습니다.
WEB-INF
classes
hello/servlet/TestServlet.class
lib
jakarta.servlet-api-6.0.0.jar
index.html
이렇게 WEB-INF, classes, lib 이 있는 걸 볼 수가 있습니다.
classes 는 내가 만든 java 파일들이 있고, lib 안에 있는 것들은 라이브러리, html 은 내가 만든 정적 페이지입니다.
꿀팁
하나의 WAS 의 여러개의 웹애플리케이션을 띄울 수 있습니다.
톰켓파일/webapps 에다가 myapp1.war, myapp2.war, ROOT.war 를 올려놓으면
localhost:8080/myapp1, localhost:8080/myapp2, localhost8080/
으로 3개를 가동시킬 수 있습니다.
'Spring' 카테고리의 다른 글
Swagger (0) | 2025.10.02 |
---|---|
Spring 외부설정, 조회방법 (0) | 2025.09.22 |
JPA 의 OSIV (1) | 2025.09.11 |
JPA 에 대하여 (8) | 2025.08.25 |
Spring 에서 CORS 설정 (3) | 2025.07.09 |