Spring Project 구조분석

yimo22·2023년 6월 11일
0

WEB

목록 보기
8/8

Intro

웹 프로젝트를 하면서, 많은 폴더에 resource 와 소스코드를 보관한다. 이때마다 각 폴더가 무슨역할을 하는지 헷갈려서 이번기회에 정리를 한다.

Project Structure

  1. src/main/java

    자바파일이 모여있는 곳이다. 패키지를 분리해서 자바 클래스를 관리.

  2. src/main/resources

    자바 클래스에서 사용하는 리소스를 보관하는 곳이다. DB연결을 위한 자원, 의존성 주입(DI)을 위한 xml 파일 등 자바 코드 외 모든 자원을 보관하는 곳이다.

  3. src/test/java

    자바파일과 동일한 역할을 하는 곳이지만, Test를 위한 자바코드만을 보관한 ㄴ 곳이다.

  4. src/test/resources

    위와 동일하게 테스트를 위한 리소스들을 보관하는 곳이다

  5. src

    WEB에 관련된 자원이 담겨있는 루트 폴더이다. 하위 폴더에 웹과 관련된 모든 자원들이 분류되어 있다. main 폴더 안에 모두 들어간다.

    • src/main/webapp/resources 웹에 필요한 다양한 자원들을 보관하는 곳이자, 사용자가 직접 접근할 수 있는 공간이다. .js, .css, .img 파일 등이 보관되며 보통은 Controller 가 요청을 가로채지 않고 바로 접근할 수 있도록 따로 설정해서 사용하는 곳이다.
    • src/main/webapp/WEB-INF 웹에 필요한 코드파일과 컴파일된 파일, 그리고 여러 환경설정 파일들이 보관되는 곳이다. 보안이 중요한 파일들이기 때문에 외부 사용자가 직접 접근할 수 없으며, Controller의 핸들러를 통해 내부적으로만 접근할 수 있는 폴더이다.
    • src/main/webapp/WEB-INF/classes 컴파일 된 파일이 보관되는 곳
    • src/main/webapp/WEB-INF/spring 스프링 환경설정 파일(context)이 보관되는 장소
    • src/main/webapp/WEB-INF/views JSP, HTML 파일등이 보관되는 장소이다. 이 폴더가 루트(/) 의 기준점이 된다. 사용자가 직접 입력하고, 컨트롤러가 받아주는 URL이 이 폴더의 구조를 따라간다.
    • src/main/webapp/WEB-INF/spring/root-context.xml 웹과 관련되지 않은 정보들의 메타정보들이 담긴다. 예를 들어, <context:component-scan> 가 들어갈 수 있다.
    • src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml 웹과 관련된 정보들의 메타정보들이 담긴다.
  6. pom.xml

    이는 Project Object Model(POM) 의 약자로, 프로젝트의 전체적 구조를 정의하는 xml 파일이다.


More. Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>
	
	<!-- Creates the Spring Container shared by all Servlets and Filters -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- POST 방식의 한글 처리. -->
	 <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
        </init-param>
     </filter>
     
     <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
     </filter-mapping>
     
	<!-- Processes application requests -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<!-- 하단에 복수의 servlet을 등록하여 여러개의 DispatcherServlet을 만들 수 있다.-->
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

</web-app>

web.xml은 설정을 위한 파일이다. WAS가 처음 구동될 때 web.xml을 읽어 웹 애플리케이션을 구성한다. 이때 web.xml에 DispatcherServlet을 등록해두면, spring이 이를 만들고 관리한다.

  • DispatcherServlet 설정
    • <init-param> 을 설정하지 않으면 <servlet-name>-servlet.xml 파일에서 applicationContext의 정보를 load 한다.
    • Spring Container는 설정파일의 내용을 읽고 ApplicationContext 객체를 생성한다.
    • <url-pattern>은 Dispatcher Servlet이 처리하는 URL Mapping pattern 을 정의한다.
      • 보통은 *.do , /* , / 등을 많이 사용한다.
      • +) /* 은 tomcat에 있는 기본 web.xml.jsp 를 처리하는 설정파일을 무시해버리기 때문에 / 을 사용하는것이 옳다고 한다.
    • Servlet이므로, 1개 이상의 DispatcherServlet 설정이 가능하다.
    • <load-on-startup>1</load-on-startup> 설정시, WAS startup 시점에 초기화 작업을 진행한다.
  • 최상위 Root ContextLoader 설정
    <!-- Creates the Spring Container shared by all Servlets and Filters -->
    	<listener>
    		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    	</listener>
    Context 설정 파일들을 로드하기 위해 web.xml 파일에 리스너를 설정한다. (ContextLoaderListener) 리스너가 설정이 되면, /WEB-INF/spring/root-context.xml 파일을 읽어서 공통적으로 사용되는 최상위 Context를 생성한다. 그 외의 다른 컨텍스트 파일들을 최상위 어플리케이션 컨텍스트에 로드하기 위해서는 다음과 같은 코드를 작성하면 가능하다
    <context-param>
    	<param-name>contextConfigLocation</param-name>
    	<param-value>
    		/WEB-INF/spring/root-context.xml
    		classpath:com/.....[파일경로]/[파일이름].xml
    	</param-value>
    </context-param>

REF

https://node-js.tistory.com/entry/Spring-webxml-root-contextxml-servlet-contextxml-역할Servlet-DispatcherServlet이란

profile
Viva La Vida!

0개의 댓글