다시 Spring 시작!

 

Sever - Runtime Environment 에서 이전에 등록했던 서버를 삭제할 수 있다.

 

● WAS (Web Application Sever)

개발할 때 Tomcat을 많이 사용한다.

 

Tomcat 버전에 따른 지원 양식 (https://tomcat.apache.org/whichversion.html)

현재 우리는 Java JDK 1.8버전을 이용하여 학습하기 때문에 Tomcat 9.0.x 버전을 사용하고 있다.

서블릿 버전은 4.0을 사용하고 있다.

 

서블릿(Servlet) : 자바로 웹 애플리케이션을 만들기 위한 기술 스펙

서블릿도 일종의 Framework(Library) 이다. 버전이 있다.

웹 프로젝트 생성시

- Dynamic Web Module Version : 4.0 선택

- workbench : 현재 이클립스의 개발환경 JRE 버전

- Server's host name: ip주소
(http:// ip주소 :8080 /springframework/...)

 

(제일 중요한 것은 내가 사용하는 자바 버전에 따라 고려하는 것이다.)

 

JSP 스펙은 사용하는 서블릿 버전에 따라 선택

 

WAS 
- Tomcat
- 운영 서버 → Welogic, Jeus

Tomcat 다운로드 Core
zip, tar.gz는 운영체제에 상관없이 사용가능
32-bit/64-bit Windows Service Installer (pgp, sha512) --> 톰캣을 운영서버로 사용하고 싶은 경우에 다운로드한다?

 

Deployment Descriptor(DD) : 배치를 기술 = web.xml

 

pom.xml → 빌드 툴 (라이브러리들 추가)   ex) Maven, ...
전자정부프레임워크의 기본 빌드 툴은 Maven
convert to Maven project를 하게되면 pom.xml파일이 생성된다.

 

log4j2.xml을 src/main/resources 폴더에 넣어둔 이유?

src/main/java + src/main/resources → classes로 들어가게 됨

 

log4j2.xml 은 log를 출력할 용도로 넣어준 것
log.레벨(" ");


○ 출력할 로그 레벨을 결정
Info 레벨의 로그만 출력
개발 완료되면 error 레벨로 수정

레벨의 단계 : Debug > info > warn > error

 

 

● Spring IoC 컨테이너

→ 사람이 제어를 하는 것이 아니고 spring이 제어를 한다. (컨테이너가 알아서 관리해줌) 원래 사람이 해야하는 것을 대신해준다하여 역제어라 부른다.

 

○ 인터페이스 개념으로 이해

1) ContextLoaderListener에서 만들어지는 객체는 모든 DispatcherServlet마다 공유가능한 객체라고 보면 됨 (root-WebApplicationContext)

2) DispatcherServlet마다 만들어짐

ex) http://www.naver.com을 만들고 싶다.
요청하는 url에 따라서 페이지들을 만들 수 있는데,
/news 페이지
/shopping 페이지
이렇게 나눈다고 치면 각각의 DispatcherServlet가 개별의 객체들을 만들고 관리한다.
(자세히 알아보자)
dispatcher : 분배하다, 보내다
- 설정대로 클라이언트의 요청을 처리 --> RequestMapping("/ ... ")
- 컨테이너를 만듦

root는 부모 dispatcher 자식 개념으로 이해하고 넘어간다...

 

ContextLoaderListener → <param-value>classpath:spring/root/*.xml</param-value>
DispatcherServlet → <param-value>classpath:spring/dispatcher/*.xml</param-value>
가 내부적으로 컨테이너를 만든다.

 

 

classpath는 WEB-INF → classes 위치 // ppt 4페이지 참고(웹 애플리케이션 폴더 구조)

classpath:spring/dispatcher/*.xmlsrc/main/resources/spring/dispatcher/*.xml
xml파일의 이름이 중요한 것은 아니다. 이 xml파일들이 컨테이너들을 만들어내는 것.

 

 

※ xml 문서

용도 : 응용 프로그램의 데이터 전달

 

ex) 나 → 설정파일(구성 / configuration) = .xml, .properties, .json
XML파일(데이터 전달) → 응용프로그램 → 그에 맞춰 실행

ex) A 프로그램 → XML파일(문서)형태, JSON파일형태 → B 프로그램 

 

☞ 우리가 스프링을 사용할 때

나 → XML파일(Spring 설정 파일) → ContextLoaderListener, DispatcherServlet
 xml파일에 컨테이너에 어떠한 객체를 생성 or 초기화해라..라는 내용이 들어가 있음

 

# 스프링 설정 파일 작성 방법 (xml 작성방법)

1) XML 문서 유형 선언

< ? xml version="1.0" encoding="UTF-8" ? > --> xml은 반드시 소문자
- 작성시 유의할 점
  - 맨 첫줄에 작성 (주석도 오면 안됨)
  - version="1.0" --> 무조건 1.0.. 버전은 10년 전부터 1.0에서 끝났다고 본다
  - encoding="UTF-8" --> 다국어로 작성을 해야 한다면.

2) root 엘리먼트는 한개만 작성
<a> </a>
<b> </b> --> 절대 안됨.

3) namespace

... → 필기하지 말고 이해하는 식으로 강의

 

cf) 스키마(shcema)란? : 구조, 형태

 

 

★ DispatcherServlet (web.xml) 설정

- Spring Web MVC 흐름 파악하기

 

1) 요청이 Dispatcher Servlet으로 들어옴.
ex) 요청 : http://localhost:8080/htmlcssjs/dom/index

2) Handler Mapping에게 요청에 대한 정보를 얻게되고
@RequestMapping("/dom")
     @RequestMapping("")
3) 그 정보에 맞는 Controller를 실행

4) Controller는 해당 모델을 보여주기위해 JSP파일 이름(뷰)을 반환

5) ViewResolver가 JSP파일의 정보를 얻고 해당 JSP의 경로를 반환

6) 해당 경로를 받아 Dispatcher Sevlet이 실행되고

7) 클라이언트에게 응답해줌.

 

Dispatcher Servlet은 은행 창고 직원으로 비유할 수 있다.
Springframework를 사용한다고 해서 바로 사용할 수 있는게 아니고 설정을 해주어야 한다.

 

<servlet>
	<servlet-name>DispatcherServlet</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param> <!-- 초기 설정 -->
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring/dispatcher/*.xml</param-value>
        <!-- /WEB-INF/spring/dispatcher/*.xml -->
	</init-param>
    <!-- 컨테이너 객체를 언제 만들 것이냐? 보통 1을 준다. -->
	<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
	<servlet-name>DispatcherServlet</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>

서블릿네임은 마음대로 지어도 된다.
위의 서블릿 네임과 밑의 서블릿 네임을 같게 해야 한다.
(load-on : "실행할 때"라고 해석)
(url-pattern에는 http://localhost:8080/springframework가 생략된 것
이 조건이 맞아야만 실행하게 된다)

classpath: 부분을 수정하여 다른 폴더에 xml파일을 관리할 수도 있다..

 

 

★ 설정 파일 생성 (ch01_component_scan.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"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

	<context:component-scan base-package="com.mycompany.htmlcssjs" use-default-filters="false">
		<!-- @Service 어노테이션이 붙어있는 클래스를 찾아서 객체로 생성 -->
	   <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
	   <!-- @Repository 어노테이션이 붙어있는 클래스를 찾아서 객체로 생성 -->
	   <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
	</context:component-scan>
	
</beans>

 

 

● 문자 인코딩 필터 설정

CharacterEncodingFilter에 먼저 문자를 확인한 다음에 Dispatcher Servlet에 요청이 들어감
(url-pattern에는 http://localhost:8080/springframework가 생략된 것
이 조건이 맞아야만 실행하게 된다)

 

 

● 어노테이션 인식

 

root의 ch01_component_scan.xml파일 (위 코드에서 bean을 생략하였다)

<context:component-scan base-package="com.mycompany.htmlcssjs" use-default-filters="false">
	<!-- @Service 어노테이션이 붙어있는 클래스를 찾아서 객체로 생성 -->
   <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
   <!-- @Repository 어노테이션이 붙어있는 클래스를 찾아서 객체로 생성 -->
   <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>

이 코드를 src/main/java 폴더에 패키지와 클래스 추가하기

 

dispatcher폴더의 component_scan.xml과 root폴더의 component_scan.xml을 비교
→ include, exclude, use-default-filters="false"
include는 Service와 Repository를 찾으면 객체를 생성
exclude는 Service와 Repository를 제외한 것들을 찾으면 객체를 생성

 

Service, Dao → ppt 14페이지

공유 빈을 관리(옵션)

 

 

● MVC와 무관한 Resource URL 매핑

웹 애플리케이션의 폴더 구조를 보며 이해하자. (ppt 4페이지)

WEB-INF는 절대로 URL로 접근할 수 없다.(막아놓음) 보안상으로 공개하지 않는다.
resources는 가능
따라서 resources는 WEB-INF폴더 아래에 놓지 않는 것이다.

 

 

● View 이름을 JSP 경로로 매핑

ViewResolver에서 매핑으로 찾은 해당 뷰(JSP파일)를 찾아주는 역할을 함. 
(접두사, 접미사를 설정하여 찾음)

 

 

● header.jsp, footer.jsp 삽입

각 페이지마다 공통적인 부분을 include해도 된다.

 


css 깨알지식..

부트스트랩 그리드 시스템을 이용하려면 row를 넣어주어야 한다.

container-fluid → 전체 폭을 차지함


※ 정리

스프링 환경설정.. 너무 어렵다. 머릿속으로 잘 정리가 안된 상태...

열심히 노트에 끄적여 봤지만 이해가 안된다.

강의 ppt를 반복적으로 보고 정리노트를 보며 수정하며 공부해야할 것 같다.

'JAVA' 카테고리의 다른 글

32일차 2024 - 4 - 11  (0) 2024.04.11
31일차 2024 - 4 - 9  (0) 2024.04.09
29일차 2024 - 4 - 5 (Git과 GitHub)  (0) 2024.04.05
28일차 2024 - 4 - 4  (0) 2024.04.04
27일차 2024 - 4 - 3  (0) 2024.04.03

+ Recent posts