[수업정리] Spring Framework (1)

노이즈믹·2023년 7월 25일
0
post-thumbnail

Ch01. Dev Env

(Create MVC Project)

개발 툴 설치

  • 전자 정부 프레임 워크

    • 개발자용 개발환경 32&64bit(Implementation Tool) Version 3.9.0
  • Java8 등록

    • https://adoptium.net 의 openjdk 8 설치
    • Eclipse Menu > Window > Preferences > Java > Installed JREs > Add…
    • openjdk 8 기본 jdk로 체크
  • Lombok Plug-in 설치

    • java -jar lombok.jar > 사용할 이클립스 체크 > Install / Update

WAS(Tomcat) 등록

프로젝트 생성 및 설정

  • File > New > Project ... > eGovFrame > eGovFrame Web Project

    • Project name: springframework (or springwebapp)
    • Target Runtime: Apache Tomcat v9.0
    • Dynamic Web Module version: 4.0
    • Group Id: com.mycompany
    • Artifact id: springframework (or - springwebapp)
  • Deployment Descriptor(web.xml) 생성

    • springframework > 마우스 우클릭

      Java EE Tools
      Generate Deployment Descriptor Stub 선택

  • pom.xml 수정

    • springframework > Maven > Disable Maven Nature
    • pom.xml 삭제 > eclipse 재시작
    • springframework > Configure > Convert to Maven Project
  • pom.xml 내용 추가

<dependencies>
	<!-- 서블릿 4.0 의존 설정 -->
	<!-- 참조: https://tomcat.apache.org/whichversion.html -->
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>javax.servlet-api</artifactId>
		<version>4.0.1</version>
		<!-- 최종 산출물에는 포함되지 않음 -->
		<scope>provided</scope>
	</dependency>

	<!-- JSP 2.3 의존 설정 -->
	<dependency>
		<groupId>javax.servlet.jsp</groupId>
		<artifactId>javax.servlet.jsp-api</artifactId>
		<version>2.3.3</version>
		<!-- 최종 산출물에는 포함되지 않음 -->
		<scope>provided</scope>
	</dependency>

	<!-- JSTL 1.2 의존 설정 -->
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>jstl</artifactId>
		<version>1.2</version>
	</dependency>
    <!-- Logging log4j-slf4j2 의존 설정 -->
	<!-- src/main/java/log4j2.xml 파일 생성 -->
	<dependency>
		<groupId>org.apache.logging.log4j</groupId>
		<artifactId>log4j-slf4j2-impl</artifactId>
		<version>2.20.0</version>
	</dependency>

	<!-- Lombok 의존 설정 -->
	<dependency>
		<groupId>org.projectlombok</groupId>
		<artifactId>lombok</artifactId>
		<version>1.18.28</version>
	</dependency>

	<!-- Spring Framework 설정 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>5.3.29</version>
	</dependency>

	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>5.3.29</version>
	</dependency>

</dependencies>
  • logj4 2.x 설정 파일
    src/main/resources/log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <Console name="Out" target="SYSTEM_OUT">
      <PatternLayout pattern="%-5level: %logger{36}.%M() - %msg%n"/>
    </Console>
  </Appenders>
  
  <Loggers>
    <Logger name="com.mycompany.springwebapp" level="info" additivity="false">
      <AppenderRef ref="Out"/>
    </Logger>
    <Root level="error">
      <AppenderRef ref="Out"/>
    </Root>
  </Loggers>
</Configuration>

Spring IoC 컨테이너 설정

  • IoC(Inversion of Control:역제어) 컨테이너

    • 자바 객체(빈:Bean)의 라이프사이클(생성, 초기화, 서비스, 소멸)을 관리
    • IoC의 대표적 예는 ServletContext – Servlet의 생명 주기를 관리
  • 스프링에서 제공하는 IoC 컨테이너

  • WebApplicationContext

    • Spring Web MVC에서 사용하는 IoC 컨테이너
    • ContextLoaderListener와 DispatcherServlet에서 생성할 수 있음
  • ContextLoaderListener 설정

    • 공유 빈을 관리하는 WebApplicationContext 생성(web.xml)
    • 설정 파일 생성(ch01_component_scan.xml)
  • DispatcherServlet 설정

    • DispatcherServlet(web.xml)
      WebApplicationContext 생성
      요청을 접수 및 컨트롤러 메소드 실행
      View(JSP)로 이동(Forward)

    • 설정 파일 생성(ch01_component_scan.xml)

문자 인코딩 필터 설정

  • POST 방식의 요청 파라미터 문자값을 UTF-8로 인코딩(한글 복원)
  • web.xml

Annotation 인식

  • IoC 관련 Annotation

    • <context:component-scan base-package=“com.mycompany”/>
      base-package=“”: Annotation을 찾을 시작 패키지(하위 패키지 모두 검색)
      use-default-filters=“true”: 아래 Annotation을 찾아 관리 빈으로 자동 생성
      @Controller, @Service, @Repository, @Component

    • <context:include-filter>: 관리 빈 생성에 포함될 Annotation 지정
      Root WebApplicationContext 설정 파일(ch01-component-scan.xml)에서 작성

    • <context:exclude-filter>: 관리 빈 생성에서 제외될 Annotation 지정
      DispatcherServlet WebApplicationContext 설정 파일(ch01-component-scan.xml)에서 작성

    • 빈 생성 및 소멸 관련 @Annotation 자동 인식
      @PostConstruct, @PreDestroy

    • 의존성 주입 관련 @Annotation 자동 인식
      @Resource, @Autowired, @Inject, @Value

  • MVC 관련 Annotation

    • <mvc:annotation-driven/>
      @RequestParam, @GetMapping, @PostMapping, @ModelAttribute 자동 인식
      DispatcherServlet WebApplicationContext 설정 파일(ch01-component-scan.xml)에서 작성

MVC와 무관한 Resource URL 매핑

  • Resource 파일 종류: .css, .js, .jpg, .png
  • DispatcherServlet WebApplicationContext 설정 파일에서 작성
    src/main/resources/spring/dispatcher/ch02-static-resource.xml

View 이름을 JSP 경로로 매핑

  • InternalResourceViewResolver
    • Controller의 요청 매핑 메소드의 리턴값을 내부 리소스(JSP) 경로로 해석

  • DispatcherServlet WebApplicationContext 설정 파일에서 작성
    • ch01-view-resolver.xml

HomeController와 home.jsp 작성

  • HomeController 수정

  • /WEB-INF/views/home.jsp 작성

    • header.jsp, footer.jsp 삽입
  • 실행

    • springframework > Run As > Run on Server

컨트롤러와 뷰 작성

  • Controller

    • 컨트롤러 역할을 할 클래스에 @Controller 어노테이션 적용
      컨트롤러 빈을 생성해서 싱글톤으로 관리
      기본 생성자를 이용해서 객체 생성

    • 샘플: Ch01Controller.java

  • View

    • /WEB-INF/views/ch01/content.jsp
    • /WEB-INF/views/common/menu.jsp
  • [참고] Context Root(Path) 변경
    springframework > 마우스 우클릭 > Properties > Web Project Settings
    Context root: /
    Servers 뷰 > Tomcat 중지 > Tomcat 삭제 > Tomcat 재추가
    springframework > 마우스 우클릭 > Run As > Run On Server

  • [참고]
    Maven Update시 Context Root는 pom.xml의 로 재설정됨

메이븐의 설정 파일( pom.xml )

메이븐 저장소

  • 중앙 저장소(Central Repository)

  • 사내 원격 저장소

    • 회사내에서만 개발자들이 공유하기 위해 사용
  • 로컬 저장소(메이븐 빌드시, 또는 pom.xml 파일에서 의존 라이브러리 설정시)

    • 다운되는 의존 라이브러리가 저장되는 위치
    • 기본 경로: <USER_HOME>/.m2/repository

Spring Framework 라이브러리 설정

profile
개발 공부 블로그

0개의 댓글