본문 바로가기

KOSTA : 클라우드 네이티브 애플리케이션 개발 전문가 양성과정

06/11 40일차 Spring 환경설정 및 설치 / 스프링 모듈 관계도 / 스프링 웹 동작 구조의 흐름/ 레거시 vs Boot

728x90

#스프링설치

1) S3917_J11.zip C:\IT에 압축해제

 

2 ) STS.ini : 자바 가상 머신(Java Virtual Machien, JVM) 지정
    openFile
   -vm
   C:\IT\jdk-11.0.22\bin\javaw.exe
   -vmargs

 

3) 워크스페이스(workspace) 경로
 C:\IT\S3917_J11\workspace_sts3

 

4) sts3_mvn_setting.xml 사용해 Maven repository 변경 
  Windows > preference > Maven > User Settings
    C:\IT\S3917_J11\sts3_repository

 

5) 인코딩(encoding) 변경 : UTF-8
    워
크스페이스 : [Window] - [Prefernces] - [General] - [Workspace] - [Text file encoding]
    HTML, CSS, JSP : [Window] - [Prefernces] - [Web] - [HTML Files/CSS Files/JSP Files] - [Creating files] [Encoding]

 

6) 콘솔 버퍼 제한 해제
Run/Debug > Console > Limit colsole output 체크해제

7) Spring Legacy 프로젝트 생성 : spring3_prj

-- 에러발생
   Spring Legacy Project > Spring MVC Project이 생성되지 않을 경우

  sts3 종료 후 해당 워크스페이스로 이동
  //워크스페이스\.metadata\.plugins\org.springsource.ide.eclipse.commons.content.core (이클립스 한번은 실행해야 폴더가 생성)
  https-content.xml 넣기
  STS 재실행

-- 에러발생
STS MVC Project invalid thread access, org.springframework.samples.mvc failed

org.springframework.templates.mvc-3.2.2.zip  압축풀어 3개 파일 아래 경로에 넣기
   C:\IT\workspace_sts3\.metadata\.sts\content\org.springframework.templates.mvc-3.2.2
  - template.html
  - templage.zip
  - wizard.json

 

8) 톰캣 서버 연동
   프로젝트  > Run As > Run on Server 

 

9) home.jsp 상단 지시어 추가 후 webapp으로 이동
  <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

 

10) pom.xml 사용해 depnedency lib 일괄 다운 

 

 

#스프링 모듈 관계도

 

- 스프링 3.0은 작은 단위의 모듈로 여러 개로 나뉘어져 있습니다.

- 모두 넣어서 사용할수도 있지만 각 모듈의 의존 라이브러리를 프로젝트에 넣어야 되기 때문에 권장되지 않습니다

 

 

- Data 접근 계층 : 영속성 프레임 워크 연결 담당입니다.

- MVC 계층 : 서블릿을 연결하는 담당

- AOP 계층 : 공통된 코드를 빼서 특정 메서드나 클래스 시점에서 흐름을 이어가게 하는 담당

- Core Container : 스프링 bean 제어, Spring 핵심 부분

 

 

 

# 스프링 웹 동작 구조의 흐름

 

1. url에 입력한 요청값이 Tomcat으로 들어간다.

- 톰캣의 thread Pool에서 해당 요청을 받아서 Connector를 통해 HTTP버전에 맞는 요청을 연결해줍니다.

 

2. Tomcat에서 web.xml로 이동합니다.

- 톰캣은 구동될때 서버.xml 웹.xml을 본다. 이 설정을 제일 먼저 본다. 설정대로 움직입니다. 

- 톰캣안에는 서블릿 콘테이너, 스프링 컨테이너가 존재합니다.

- url 요청에 따라 (1)서블릿 컨테이너로 이동되거나, (2)스프링 컨테이너로 이동합니다.


<!-- 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>

<servlet>
	<servlet-name>SPRING_SERVLET</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/servlet-context.xml</param-value>
		</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>	
<servlet-mapping>
	<servlet-name>SPRING_SERVLET</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>
	
<servlet>
	<servlet-name>CharaterServlet</servlet-name>
	<servlet-class>com.lec02.servlet.CharaterServlet</servlet-class>
</servlet>	
<servlet-mapping>
	<servlet-name>CharaterServlet</servlet-name>
	<url-pattern>/CharaterServlet</url-pattern>
</servlet-mapping>

 

(1) 서블릿 컨테이너

-서블릿 컨테이너는 HttpServletRequest, HttpServletResponse 두 객체를 생성합니다.

- 컨테이너는 서블릿 service() 메서드를 호출하며, Post,Get 여부에 따라 doGet()또는 doPost()를 호출합니다.

- doGet(), doPost()는 동적인 페이지를 생성 후 HttpServletResponse 객체에 응답을 보냅니다.

- 응답이 완료되면 HttpServletRequest, HttpServletResponse를 소멸시킵니다.

 

(2) 스프링 컨테이너

- Tomcat에 의해 web.xml이 로딩됩니다. load-on-startup으로 톰캣 시작시 우선권을 갖습니다.

- DispatcherServlet의 설정된 servlet-context.xml대로 실행됩니다. 

<!-- 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="/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="/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>
	
	<context:component-scan base-package="com.lec01.hello" />

<annotation-driven> : 스캔한 패키지 내부에 클래스들 중 Controller 어노테이션을 가진 클래스들을 Controller로 로딩하도록 합니다.

<resource mapping="/resource/**" location="/resources/"> : 정적인 리소스들의 정보를 기술합니다. (이미지,CSS,JS)

ViewResolver : 서블릿 설정으로 prefix(접두사)와 suffix(접미사)를 붙여 경로 설정을 합니다. 사용자가 일일히 전체경로와 jsp를 붙이지 않아도 됩니다.

context:component-scan : 해당 패키지에 있는 파일들의 어노테이션을 스캔하여 Bean으로 등록하는 역할을 합니다.

 

 

 

# 스프링부트와 스프링레거시의 차이점

1.설정 자동화

-레거시:  xml 파일을 사용하여 FrontController인 DispatcherServlet과 Context-path를 정의하고, Spring bean의 Component-scan 패키지를 하나하나 명시하는 작업이 필요합니다.

- Boot : @SpringBootApplication은 @ComponentScan 어노테이션이 포함되었기 때문에 스캔 경로를 따로 지정하지 않아도 해당 클래스의 하위 패키지의 @Component로 등록되어있다면 자동으로 스캔이 이루어집니다.

 

2. 내장 Servlet-Container 제공

-레거시: 외장 Tomcat을 설치한 후 war파일을 배포하여 압축을 풀고 Tomcat안에 해당 파일을 등록해서 써야 합니다.이 방식은 jsp파일등의 모든 파일들이 Servlet형태로 변환하여 war파일로 압축하기 때문에 무겁고, 실행시간이 오래 걸립니다.

- Boot: Dependency를 등록하면 자동으로 서버를 띄울 수 있습니다. jar 파일로 배포하여 서비스 배포가 가능하며, 외부 톰캣 설치없이 즉시 어플리케이션 실행이 가능합니다.

 

3. Dependency 설정 지원

-레거시 : Dependency간의 버전이 맞지 않으면 오류가 납니다.

-Boot : Dependency에 대한 자동화된 설정을 지원함으로써 개발자가 의존성에 대한 버전을 명시하지 않아도 의존성 패키지에 등록된 버전을 자동으로 등록해줌으로써 보다 간편한 설정이 가능하도록 지원하고 있습니다.

 

 

WEB/INF는 tomcat만 접근할 수 있습니다.

web/app은 유저 페이지, WEB/INF는 관리자 페이지를 놔둔다.