본문 바로가기
Spring

스프링 프로젝트 구조 알아보기

by mingutistory 2020. 4. 16.
728x90

프로젝트 생성은 오랜만에 하다 보니까 살짝 햇깔린 것들이 있어서 정리하려고 한다. 구글 드라이브에 저장해놨던 내용들을 평소에 궁금했지만 익숙해서 설정했던 것들이 뭔지 알아가면서 해보려 한다.

 

 

file > new > spring legacy project 생성 

프로젝트명 입력 > spring MVC project 선택 > Next

패키지 명 입력. 최소 3레벨 이상으로 구성하는 것이 규칙

 

많은 폴더들이 만들어진 것을 확인 할 수 있다.

지금 캡쳐는 이미 pom.xml을 수정한 상태니까 자바 버전은 무시하자! (기본 1.6 인듯)

 

익숙해서 계속 사용하고 있었지만 설명하기는 힘든 상태이므로 폴더들과 파일들에 대해서 조금 알아보자. 

 

1. Maven Dependencies

Maven이란?

- 프로젝트 진행 시 사용할 라이브러리를 관리를 도와줌. pom.xml에 필요한 라이브러리를 정의하면 사용할 라이브러리뿐만 아니라 해당 라이브러리가 작동하는데 필요한 다른 라이브러리까지 관리하여 네트워크를 통해 자동으로 다운 받아줌. > Maven이 없다면 수동으로 외부 라이브러리를 추가 해줘야함. 

- 외부 라이브러리를 사용 할 때 온라인을 통해서 라이브러리를 관리를 할 수 있음. 

- 작업 환경이 다른 개발자들이 소스코드를 공유하기 위해서 메이븐을 사용할 때 pom.xml을 같이 공유하면 개발환경이 다르더라도 에러가 터지지 않고 정상적으로 실행됨.

- 라이브러리 저장 위치(repository)? 

window > preferencees > Maven > User settings에서 저장 위치를 확인 할 수 있음.

+ 온라인 네트워크를 통해서 관리하는데 유선은 괜찮지만 무선의 경우 인터넷 연결이 불완전해서 파일 손상이 될 수 있음. 그런 경우 repository를 지우고 다시 다운. 

 

2. pom.xml 

- 프로젝트 정보 : 프로젝트 이름, 개발자 목록, 라이센스 등의 정보 기술

<name> : 프로젝트 이름

<url> : 프로젝트 사이트 URL 

 

- 빌드 설정 : 소스, 리소스, 라이프 사이클 별 실행할 플러그인 등 빌드와 관련된 설정 기술

- 빌드 환경 : 사용자 환경 별로 달라질 수 있는 프로파일 정보를 기술

- POM 연관 정보 - 의존 프로젝트(모듈), 상위 프로젝트, 포함하고 있는 하위 모듈 등을 기술

<groupId> : 프로젝트의 그룹 ID 설정

<artifactId> : 프로젝트의 Artifact ID 설정

<version> : 버전 설정

<packaging> : 패키징 타입 설정

<dependecies> : 이 프로젝트에서 의존하는 다른 프로젝트 정보를 기술함

ㄴ <dependency> </dependency> : 하나의 라이브러리르 의미

 

+ JRE System Library 업데이트 하는 법

프로젝트 오른쪽 마우스 > Maven > Update Project이 설정 정보(pom.xml)을 기반으로 해서 repository에 각종 라이브러리가 다운 될 것. 

 

수정 사항

	<properties>
		<java-version>1.8</java-version>
		<org.springframework-version>5.0.7.RELEASE</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
	</properties>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>

 

 

3. servlet-context.xml

- 웹과 관련된 스프링 설정 파일 

DispatcherServlet과 관련된 설정을 해야 함

* DispatcherServlet이란? 

- web.xml에서 등록 가능

	<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-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

- servlet 컨테이너에서 HTTP 프로토콜을 통해 들어오는 모든 요청을 제일 앞에서 처리하는 컨트롤러

- 동작방식 ?

이미지 출처 : http://springmvc.egloos.com/504151

관련 내용 http://springmvc.egloos.com/504151 진짜 잘 설명되어 있다. 

처음에는 진짜 잘 이해 안됬는데 이제 조금 읽힌다. 

 

기본 형태

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

	<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
	
	<!-- Enables the Spring MVC @Controller programming model -->
	<annotation-driven />

	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<resources mapping="/dist/**" location="/resources/dist/" />
	<resources mapping="/plugins/**" location="/resources/plugins/" />	
	<resources mapping="/resources/**" location="/resources/" />

	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>
	
	<context:component-scan base-package="com.spring.escape" />
	
	
	
</beans:beans>

 

- <annotation-driven /> 어노테이션 사용 선언

- <resources mapping = "/resources/**" location="resources/"> html 리소스 디렉토리 정의 

 

	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>

jsp와 name을 매핑함.

 

	<context:component-scan base-package="com.spring.escape" />

 패키지 하위의 모든 어노테이션을 스캔해서 빈으로 등록하겠다는 것. 

 

4.root-context.xml

기본 형태

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<!-- Root Context: defines shared resources visible to all other web components -->
		
</beans>

- view와 관련되지 않은 객체 정의 (service, repository(DAO), DB 등의 비즈니스 로직 관련 설정)

- 처음 프로젝트 생성시 아무 내용 없음. 

- 스프링 설정 파일

 

5.web.xml 

설정을 위한 설정 파일. WAS가 최초로 구동시 각종 설정 정의. 

여러 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>

	<!-- 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-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

</web-app>

 

 

<context-param></context-param> : web.xml의 전역 변수를 선언해주는 부분. 

 ㄴ <param-name> : context parameter 이름

 ㄴ <param-value> : context parameeter 값

 

<listener></listner> : apllication listenr bean 가리키기 위한 부분. bean은 웹 어플리케이션에 등록되어있어야 함.

 

<servlet></servlet> : servlet 선언시 사용. 

<servlet-mapping></servlet-mapping> : servlet과 url 사이의 매핑 정의 

ㄴ url-pattern : servlet과 매핑할 url 패턴을 선언하는 부분 / 서블릿에 어떤 요청을 할 때 특정 url로만 요청 될 수 있게 함.

 

 

추가로 사용해본 적 있는 element만 정리해보겠다. 

- <filter> Element : 사용하는 필터 선언하는 부분.

	<!-- Korean Filter -->
	 <filter>
		<filter-name>CharacterEncodingFilter</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>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>

- <fiter-mapping> Element : 설정한 필터를 어디에 적용할 것인지 url/servlet을 통해 선언함

<filter-mapping>
		<filter-name>CharacterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
</filter-mapping>

- <welcome-file-list> Element : 서버로 요청이 들어왔을 때 표시할 파일을 순서대로 정의함

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

 

바탕으로 환경 설정을 완료하겠다.

 

 

 

+ 읽어보려고 기록하는 블로그

http://springmvc.egloos.com/487497

 

스프링이 도대체 뭐란 말인가?

본 문서를 읽는 독자들에게 부탁하나 하노라면 토비의 스프링 3와 함께 읽어주길 바란다. 많은 부분이 이 책에서 인용되었고 필자 또한 책을 읽고 이해가 가지 않는 부분에 대해 적어놓는 형태인지라 책과 함께 블로그를 읽는다면 큰 도움이 될 것이라 생각되기 때문이다. ----------------------------------------------------

springmvc.egloos.com

 

300x250

댓글