Programming/Web

웹 애플리케이션

주죵 2021. 1. 31. 15:28
728x90
반응형

웹 애플리케이션이란?

웹 애플리케이션이란 무엇일까? 사용자의 입장에선 웹 브라우저에서 사용하는 서비스가 그냥 웹 애플리케이션이구나 할 수 있겠다. 하지만 그런 모호한 개념이 아닌 정확한 정의를 짚어보자.

기존 우리가 사용하던 정적 웹 애플리케이션에 동적인 서비스(서블릿, JSP 등등)를 추가한 프로그램을 웹 애플리케이션이라고 할 수있다. 즉, 앞서 우리가 살펴봤던 정적 웹프로그래밍에 컨테이너에서 수행되는 동적 웹 프로그래밍을 포함한 서비스를 제공하는 서버프로그램이 웹 애플리케이션이다. 

 

웹 애플리케이션의 구조

세상살아가는게 내가 그렇다해서 다 그런건 아니다.ㅋㅋ 실제로 웹 애플리케이션에도 통용되는 정해진 형식같은 구조가 존재한다.

기본 디렉터리 구조

웹 애플리케이션의 이름
WEB-INF
classes lib web.xml

컨테이너에서 실행되는 웹 애플리케이션은 기본적으로 위와 같은 구조를 같는다.

웹 애플리케이션의 이름은 루트 디렉터리가 되고, 아래에 위와 같은 하위 디렉터리를 기본 구조로 가진다.

 

컨테이너에서 웹 애플리케이션 실행

위의 구조를 갖는 웹 애플리케이션을 컨테이너에서 실행하는 방법은 크게 두가지가 있다.

  • 컨테이너의 루트디렉터리 하위로 직접 웹 애플리케이션을 옮겨서 실행하는 방법
  • 컨텍스트에 경로를 등록하여 컨테이너가 알아서 실행하도록 설정하는 방법

 

컨텍스트 등록하기

컨텍스트는 톰캣 컨테이너의 server.xml에 등록한다. server.xml은 서버와 관련된 설정정보를 xml형태로 저장해놓은거라고 할 수있다. tomcat 컨테이너를 사용하는 경우 tomcat/conf 디렉터리에 위치하고 있다. (jboss등 그외의 컨테이너 사용하는 경우 직접 찾아보거나 구박사님의 힘을 빌려보도록 하자)

 

컨텍스트 등록을 위해선 아래와 같은 컨텍스트 태그를 설정해서 호스트에 추가해주면 된다.

<Context path="/컨텍스트 이름"
			docBase="웹애플리케이션 WEB-INF 디렉토리"
            reloadable="true 혹은 false" />

path : 웹애플리케이션 컨텍스트의 이름이다. 다른 웹애플리케이션과 중복되지 않는 값을 가져야 한다.

docBase : 컨텍스트에 대한 웹애플리케이션이 위치한 경로

reloadable : 실행 중 소스코드가 수정될 경우 바로 갱신할지 말지를 설정한다. 즉 false면 소스코드 변경시에 톰캣을 내리고 다시실행해야 수정한 기능이 반영된다.

 

 

웹애플리케이션 서비스하기

개발한 웹애플리케이션을 서비스하기위해선 배치(deploy)를 해야한다.

프로젝트와 하위 폴더들을 매번 옮기는것은 비효율적이기 때문에, 보통 war형태의 압축파일을 빌드하여 컨테이너로 옮겨준다. 보통 배치한 후에 실행했을때 자잘한 오류가 나면, 프로젝트 새로 war파일로 빌드해서 옮기는건 귀찮음 + 시간낭비이기 때문에 war파일 압축 풀어주고 직접 열어서 손보기도 한다. (물론 기존 war파일은 지우고 압축을 푼 프로젝트 폴더를 .war파일로 설정해줘야한다.) 

 

war파일이 대체 무엇인지 아무것도 몰랐던 나는 회사에서 처음 로컬서비스 실행 실습할때 큰 삽질을 했었다. 난생처음보는 war파일을 deployment 디렉토리에 옮겨놓았지만 실행이 잘 안되서 프로젝트안의 xml파일 몇개를 수정해야 했다.(경로설정이 몇개 잘못되있었던것 같다.) 내가 아는 압축파일은 .zip 파일정도가 끝이었기에 war파일을 보고 '이거 뭐 어떡하라는거지,,?' 하고있으니 선배가 와서 war파일 압축을 풀어줬다....

아니 보통 압축파일이면 반디집이나 알집 아이콘이라도 떠있어야지... 얘는 아무아이콘도 안떠있었다고.... 이날 퇴근하면서 '어떻게 나란놈은 압축파일도 못푸는걸까..?' 라며 좌절을 했었다ㅋㅋㅋㅋㅋㅋ 지금생각해보니 좀웃기네 ㅋㅋ

728x90

'Programming > Web' 카테고리의 다른 글

HTTP  (0) 2021.06.20
REST API  (0) 2021.06.20
[Java Web] Servlet이 뭐냐..?  (0) 2021.02.06
웹프로그래밍의 기본  (2) 2021.01.19