[Spring] MVC + Maven project 생성 및 실행1 (Controller, View, 로깅)

sua_ahn·2023년 2월 20일
0

Spring

목록 보기
2/8
post-thumbnail

Apache Maven

: 자바 프로젝트의 빌드를 자동화 해주는 Build Tool

→ Build Tool은 소스코드를 컴파일, 테스트, 분석 등을 실시하여 애플리케이션을 자동 생성하는 프로그램

→ Maven은 xml에 필요 라이브러리를 정의해주기만 하면, repository를 통해 자동으로 라이브러리를 관리해주고, 빌드생명주기를 관리

  • Build
    : 소스코드, 파일 등을 JVM이나 WAS가 인식할 수 있는 구조로 패키징하는 과정

 


프로젝트 생성 및 실행

스프링 프로젝트 생성 시 Spring Legacy Project - Spring MVC Project로 선택하면 쉽게 생성할 수 있지만,

Dynamic Web Project에서 하나씩 직접 설정해보며 Spring MVC + Maven 프로젝트에 대해 알아보자.

 

  1. 텍스트 인코딩서버 설정

  2. 프로젝트 생성
    : Open Perspective - Java EE로 변경

    → File - New - Dynamic Web Project 생성

  3. Maven 프로젝트 설정
    : 프로젝트 마우스 우클릭 - Configure - Convert to Maven Project → [Finish]

 

 


xml 설정

xml 파일은 모두 객체(Bean)를 정의!

1. pom.xml

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

 

→ 그 외 기본 라이브러리 목록

  • spring-beans
  • spring-context
  • spring-context-support
  • spring-core
  • spring-expression
  • spring-test
  • spring-tx
  • spring-web
  • javax.servlet-api
  • jsp-api
  • jstl
  • javax.inject

 

로깅 시스템 사용을 위한 라이브러리 목록

  • log4j
  • slf4j-api
  • slf4j-log4j12
  • jcl-over-slf4j
  • commons-logging

 

→ 태그 작성만으로 라이브러리가 추가됨!

 

 

2. web.xml

: 서버가 구동되면 제일 먼저 인식하여 설정 구성

→ 아래와 같이 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에게 보냄

 

 

3. servlet-context.xml

: 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로 이동

 

 


실행

1. Controller 생성

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

 

 

2. View 생성

: webapp/index.jsp 생성 후, hello.jsp로 바로 이동할 수 있도록 아래처럼 추가

<body> 
	<%
	response.sendRedirect("hello");
	%> 
</body>

→ webapp/WEB-INF/views/hello.jsp 생성

 

 

3. 서버 연결 및 실행

: 실행 시 서버 연결이 안될 경우, 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로 연결됨

profile
해보자구

0개의 댓글