: 자바 프로젝트의 빌드를 자동화 해주는 Build Tool
→ Build Tool은 소스코드를 컴파일, 테스트, 분석 등을 실시하여 애플리케이션을 자동 생성하는 프로그램
→ Maven은 xml에 필요 라이브러리를 정의해주기만 하면, repository를 통해 자동으로 라이브러리를 관리해주고, 빌드생명주기를 관리
스프링 프로젝트 생성 시 Spring Legacy Project - Spring MVC Project로 선택하면 쉽게 생성할 수 있지만,
Dynamic Web Project에서 하나씩 직접 설정해보며 Spring MVC + Maven 프로젝트에 대해 알아보자.
프로젝트 생성
: Open Perspective - Java EE로 변경
→ File - New - Dynamic Web Project 생성
Maven 프로젝트 설정
: 프로젝트 마우스 우클릭 - Configure - Convert to Maven Project → [Finish]
xml 파일은 모두 객체(Bean)를 정의!
: Project Object Model을 설정 즉, Maven의 빌드 옵션 및 의존성 라이브러리 설정
→ Maven Repository에서 Spring Web MVC
검색 (MVC 모델 사용을 위한 라이브러리)
→ 아래와 같이 <dependency>
태그 복사
→ <project>
태그 내 <dependencies>
태그를 만들어 그 안에 붙여넣기
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.25</version>
</dependency>
</dependencies>
→ 그 외 기본 라이브러리 목록
→ 로깅 시스템 사용을 위한 라이브러리 목록
→ 태그 작성만으로 라이브러리가 추가됨!
: 서버가 구동되면 제일 먼저 인식하여 설정 구성
→ 아래와 같이 web.xml 생성
→ <web-app>
태그 안에 아래 설정 추가
<!-- DispatcherServlet 설정 -->
<servlet>
<servlet-name>dispatcherServlet</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요청에 대한 URL 패턴 설정-->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 한글 깨짐 설정(텍스트 인코딩) -->
<filter>
<filter-name>encodingFilter</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>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
⇒ DispatcherServlet이 <url-pattern>
에 등록한 요청을 가로채, <param-value>
로 설정한 HandlerMapping에게 보냄
: DispatcherServlet과 관련된 설정
→ WEB-INF에 spring, views 폴더 생성
→ spring 폴더 안에 servlet-context.xml
파일 생성
→ <beans>
태그 안에 다음 설정 추가
<!-- spring MVC annotation(@)을 사용하기 위한 설정 -->
<context:annotation-config />
<!-- controller로 처리할 view 위치 및 확장자명 설정 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 공통 패키지(공통 경로) 설정 -->
<context:component-scan base-package="com.mypack.sample" />
⇒ HandlerMapping 설정: annotation으로 각각의 클래스와 메소드가 어떤 역할을 하는지 지정하고, DispatcherServlet으로부터 받은 요청을 url과 매핑되는 Controller에게 처리 요청
⇒ ViewResolver 설정: Controller에서 반환한 view 이름에 접사를 붙여 검색 후 view로 이동
: servlet-context.xml
에서 설정했던 공통 경로에 java class 생성
package com.mypack.sample;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller // 요청에 해당하는 로직으로 분기, 응답
public class HelloController {
private static Logger logger = LoggerFactory.getLogger(HelloController.class);
// 요청url 및 요청메소드 설정
@RequestMapping(value = "hello.do", method = RequestMethod.GET)
public String hello() {
// logging 방법1
System.out.println("HelloController helloMethod() " + new Date());
// logging 방법2
logger.info("HelloController helloMethod() " + new Date());
return "hello"; // WEB-INF/views/hello.jsp로 이동
}
}
⇒ 서블릿 설정에 의해 자동으로 반환값 앞에 /WEB-INF/views/
를 붙여주고(prefix), 뒤에 .jsp
를 붙여줌(suffix)
Logging
: 프로그램 개발이나 운영 시 발생하는 문제점을 추적하거나, 운영 상태를 모니터링하기 위해 실행 기록을 남기는 것이 중요
Logging 방법
Java에서는 주로
System.out.println()
을 사용Spring에서는 프로그램 성능에 영향을 주지 않는 logging framework를 주로 사용
→ Log를 어떻게 남길지에 대한 설정 파일로, src/main/java에 log4j.xml 생성<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- Appenders 출력 위치 및 형식 --> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.out" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p: %c - %m%n" /> </layout> </appender> <!-- Application Loggers 패키지 단위로 로그 설정--> <logger name="com.mypack.sample"> <level value="info" /> </logger> <!-- 3rdparty Loggers --> <logger name="org.springframework.core"> <level value="info" /> </logger> <logger name="org.springframework.beans"> <level value="info" /> </logger> <logger name="org.springframework.context"> <level value="info" /> </logger> <logger name="org.springframework.web"> <level value="info" /> </logger> <!-- Root Logger 일반적인 로그 정책 설정 --> <root> <priority value="warn" /> <appender-ref ref="console" /> </root> </log4j:configuration>
: webapp/index.jsp 생성 후, hello.jsp로 바로 이동할 수 있도록 아래처럼 추가
<body>
<%
response.sendRedirect("hello");
%>
</body>
→ webapp/WEB-INF/views/hello.jsp 생성
: 실행 시 서버 연결이 안될 경우, apache-tomcat-버전/conf/server.xml에서 포트 수정
→ apache-tomcat-버전/bin에서 startup.bat을 실행했을 때 정상적으로 실행된다면 다시 shutdown.bat으로 종료
→ 메뉴 Window - Show View - Servers
→ create a new server 서버 생성
→ 실행(Run index.jsp)하면 자동으로 http://localhost:8090/spSample1/hello
로 연결됨