스프링 ch2-9 ~ ch2-12

서현우·2022년 7월 1일
0

스프링의정석

목록 보기
60/85

관심사의 분리, MVC 패턴

OOP 5대 설계 원칙

SOLID
1. SRP - 단일 책임의 원칙
"하나의 메서드는 하나의 책임만 진다"

코드의 분리

  1. 관심사(해야할 작업)의 분리
  2. 변하는 것, 자주 변하지않는 것 분리
  3. 공통(중복) 코드 분리

MVC패턴 흐름 단순화

입력, 처리, 출력을 분리. + Model.
요청이 들어오면 DispatcherServlet이 Model을 생성해서 요청의 정보를 저장하고 Controller로 보낸다.
Controller에서 작업을 하고, Model에 작업 결과를 map으로, 저장한다. 그리고 모델과 뷰의 이름을 DispatcherServlet으로 보낸다.
DispatcherServlet에서 받은 뷰의 이름으로 Model을 보내고, 해당 뷰에서 응답을 클라이언트로 보낸다.

jsp 인코딩 임포트

<%@ page contentType="text/html; charset=utf-8" %>

servlet-context.xml, root-context.xml

둘 다 spring설정 파일.
servlet-context.xml은 스프링 웹관련 설정파일.
root-context.xml은 스프링의 웹이 아닌 설정파일.

servlet-context.xml

아래는 기본으로 설정되어있다.

<!-- resources폴더(이미지) 경로 맵핑 -->
<resources mapping="/resources/**" location="/resources/" />
	
<!-- InternalViewResolver는 view의 접두사, 접미사를 자동으로 붙여준다 -->
<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>

pom.xml

<!-- 프로젝트의 java 버전, spring버전 설정 -->
<properties>
	<java-version>11</java-version>
	<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
	<org.aspectj-version>1.6.10</org.aspectj-version>
	<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>

<!-- EL로 source, taget의 java버전 처리 -->
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-compiler-plugin</artifactId>
	<version>2.5.1</version>
	<configuration>
		<source>${java-version}</source>
		<target>${java-version}</target>
		<compilerArgument>-Xlint:all</compilerArgument>
		<showWarnings>true</showWarnings>
		<showDeprecation>true</showDeprecation>
	</configuration>
</plugin>

spring에서 매개변수의 이름과 Model을 얻어오는 과정 및 타입 변환 과정

  • Reflection API로 먼저 시도하고, 실패하면 Class file로 매개변수의 이름을 얻어온다.
  1. Reflection API - jdk1.8이상, -parameters옵션 활성화
  2. Class file - target폴더에 binary파일로 저장되어 있다.

Servlet

  • Servlet은 @WebServlet을 클래스 앞에 붙이고, HttpServlet을 상속받아야한다.
  • 또한 Spring과는 달리 클래스마다 맵핑을 해줘야 한다.
    따라서 클래스를 많이 만들어야하는 단점이 있다.
  • 메서드이름은 꼭 service로 해야 한다.(오버라이딩 하기 때문)
profile
안녕하세요!!

0개의 댓글