For Programmer

Part1 - 개발을 위한 준비(4-7) 본문

Spring/스프링 프로젝트

Part1 - 개발을 위한 준비(4-7)

유지광이 2020. 8. 17. 23:01
728x90

1. JDK 1.8 버젼 설치

2.STS(Eclipse) 설치 및 프로젝트 생성

3.Tomcat 설치 및 연동

4.오라클 데이터베이스 / SQL Developer 설치 및 설정

5.스프링 프로젝트 생성 및 라이브러리 추가

6.MyBatis / mybatis-spring 설치

7.스프링 MVC개발 설정

 

4. Oracle Database 설치(https://www.oracle.com/database/technologies/xe-prior-releases.html)

Oracle Database Express Edition (XE) Release 11.2.0.2.0 (11gR2) 버젼을 설치한다.

설치 하다 보면 중간에 패스워드 입력하라고 나오는데 oracle 입력해준다.

 

 

그 후 CMD 관리권한으로 실행 후 scott 계정을 생성해준다. 

-> 패스워드는 초기에 설치 할때 입력했던 oracle 을 입력해준다.

-> scott 계정이름을 가진 tiger라는 패스워드를 가진 user생성

-> scott 계정에 권한 주기

-> 계정 확인

SQL Developer 설치 (https://www.oracle.com/tools/downloads/sqldev-downloads.html)

* 참고로 오라클 뿐만아니라 톰캣 또한 8080 포트를 사용하기 때문에 이클립스에서 서버설정에서 포트를 8090으로 바꿔주어야한다.

5. 스프링 프로젝트 생성

이클립스에서 스프링 프로젝트를 생성하는 방식은 1) 처음부터 스프링 프로젝트를 지정하고 생성하는 방식 , 2) Maven이나 Gradle 프로젝트를 생성한 후 프레임워크를 추가하는 방식, 3)직접 프레임워크 라이브러리를 추가하는 방식이 있습니다.

New - Spring Legacy Project - Spring MVC project 선택한다.

5. 스프링 프로젝트 폴더 구조

해당 Spring MVC 프로젝트를 생성하게 될 경우 3.1.1으로 생성되므로, 예제는 5.0.7 버전으로 수정을 해야한다. 그러기 위해서는 Pom.xml의 일부를 수정해야한다.

<properties>
		<java-version>1.8</java-version>
		<org.springframework-version>5.0.7.RELEASE</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
	</properties>

또한 자바 버젼도 javaSE-1.6버젼으로 생성이 된다. 그러나 스프링 5.x 버젼을 사용하고 싶다면 JDK 1.8을 사용하는 것이 가장 좋습니다. 

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.5.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<compilerArgument>-Xlint:all</compilerArgument>
					<showWarnings>true</showWarnings>
					<showDeprecation>true</showDeprecation>
				</configuration>
			</plugin>

Tomcat을 이용한 프로젝트 실행

프로젝트 왼쪽 클릭 - Run As - Run on Server 클릭

단! 톰캣 서버의 포트번호도 8080 이기때문에 8090으로 변경 후 실행해준다.

 

Lombok 라이브러리 설치(https://projectlombok.org/download)

이클립스와 스프링 플러그인 만으로도 스프링 개발은 가능하지만, Lombok을 이용하면 Java 개발 시 자주 사용하는 getter/setter, toString(),생성자 등을 자동으로 생성해주므로 약간의 코드만으로도 필요한 클래스를 설계할 때 유용합니다. Lombok은 다른 jar파일들과 달리 프로젝트의 코드에서만 사용되는 것이 아니라 Eclipse 에디터 내에서도 사용되어야 하기 때문에 별도로 설치하여야 합니다.

설치 후 CMD창에서 cd 다운로드 폴더로 이동 후 java - jar lombok.jar 로 실행 가능합니다.

그 후 Specify location 을 선택한 후 이클립스가 설치되어있는 폴더선택 후 install/update 선택하면 설치가능합니다.

 

*위는 XML 기반으로 스프링 관련 설정을 하였는데 스프링3버젼 이후에는 Java Configuration을 사용하여 설정할 경우 pom.xml을 다음과 같이 수정해주어야한다.

1.web.xml 파일 삭제 및 스프링 관련 파일 삭제

2.pom.xml의 수정 및 스프링 버젼 변경

3.Java설정 관련 패키지 생성

1.XML 파일 삭제 - web.xml 파일 + servlet-context.xml + root-context.xml 3가지 파일을 삭제해야 한다.단, web.xml 파일을 삭제 할 경우 pom.xml에서 에러가 발생 하는데 이는 web.xml사용하는 것을 기본으로 하였기 때문에 이를 해결하기 위해서는 pom.xml의 하단부에 <plugins>내에 아래의 설정을 추가해주어야 한다.

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>3.2.0</version>
				<configuration>
					<failOnMissingWebXml>false</failOnMissingWebXml>
				</configuration>
			</plugin>

또한 xml설정처럼 스프링 버젼을 5.0.7.RELEASE로 변경해주고 자바버젼또한 1.8로 변경해준다.

Java설정 관련 패키지를 생성하여야한다.

RootConfig.java 와 WebConfig.java 두가지 파일을 org.spring.config 패키지 안에 생성해준다. 여기서 WebConfig 클래스 파일은 web.xml을 대신하는 클래스이다.

 

WebConfig 클래스

package org.zerock.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {

	//프로젝트에서 사용할 Bean들을 정의하기 위한 클래스를 지정한다.
	@Override
	protected Class<?>[] getRootConfigClasses() {

		return new Class[] { RootConfig.class };
	}
	
	//Spring MVC 프로젝트 설정을 위한 클래스를 지정한다.
	@Override
	protected Class<?>[] getServletConfigClasses() {
		// TODO 자동 생성된 메소드 스텁
		return null;
	}
	
	//DispatcherServlet에 매핑할 요청 주소를 셋팅한다.
	@Override
	protected String[] getServletMappings() {
		return new String[] { "/" };
	}

}

RootConfig 클래스

package org.zerock.config;

@Configuration
public class RootConfig {

}

6.JDBC 설정 및 커넥션 풀 설정

Oracle 데이터베이스의 JDBC Driver는 11g까지 공식적으로 Maven으로는 지원되지 않기 때문에 예제는 직접 jar파일을 프로젝트에 추가시켜 줘야 한다. (C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib) 폴더내부에 ojdbc6 라는 jar파일을 톰캣서버가 설치외어 있는 폴더 내부에 있는 lib 폴더에 넣어준다. 또는 수동으로 각각의 프로젝트에 직접 ojdbc6.jar 파일을 추가해 줄 수있는데 프로젝트 우클릭후 Preferences 클릭 후 외부 JAR 추가 후 ojdbc6 jar파일을 선택해주면 된다.

그 후 일반적으로 여러 명의 사용자를 동시에 처리해야 하는 웹 애플리케이션의 경우 데이터베이스 연결을 이용할 때는 커넥션 풀을 이용하므로, 아예 스프링에 커넥션 풀을 등록해서 사용하는 것이 좋습니다. Java에서는 DataSource라는 인터페이스를 통해서 커넥션 풀을 사용합니다. DataSource를 통해 매번 데이터베이스와 연결하는 방식이 아닌, 미리 연결을 맺어주고 반환하는 구조를 이용하여 성능 향상을 꾀합니다. 커넥션 풀은 여러종류가 있지만 HikariCP를 이용하겠습니다. 

pom.xml에 HikariCP를 추가하기

<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
		<dependency>
			<groupId>com.zaxxer</groupId>
			<artifactId>HikariCP</artifactId>
			<version>2.7.4</version>
		</dependency>

root-context.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"
	xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
	xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

	<!-- Root Context: defines shared resources visible to all other web components -->

	<!-- 스캔할 bean들이 모여있는 패키지를 지정한다. -->
	<context:component-scan base-package="org.zerock.sample"></context:component-scan>

	<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
		<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe"></property> 

		<property name="username" value="scott"></property>
		<property name="password" value="tiger"></property>
	</bean>

	<!-- HikariCP configuration -->
	<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
		<constructor-arg ref="hikariConfig" />
	</bean>
	
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
	<mybatis-spring:scan base-package="org.zerock.mapper" />

</beans>

*Java설정을 이용하는경우(RootConfig.java)

package org.zerock.config;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

@Configuration
@ComponentScan(basePackages = "org.zerock.sample")
@MapperScan(basePackages = "org.zerock.mapper")
public class RootConfig {

	@Bean
	public DataSource dataSource() {
		HikariConfig hikariConfig = new HikariConfig();
		hikariConfig.setDriverClassName("oracle.jdbc.driver.OracleDriver");
		hikariConfig.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:XE");

		hikariConfig.setUsername("scott");
		hikariConfig.setPassword("tiger");

		HikariDataSource dataSource = new HikariDataSource(hikariConfig);

		return dataSource;
	}

	@Bean
	public SqlSessionFactory sqlSessionFactory() throws Exception {
		SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
		sqlSessionFactory.setDataSource(dataSource());
		return sqlSessionFactory.getObject();
	}

}

7. MyBatis와 스프링 연동

MyBtis의 장점은 자동으로 Connection close() 기능 , MyBatis 내부적으로 PreparedStatement처리, #{Prop}와 같이 속성을 지정하면 내부적으로 자동처리, 리턴 타입을 지정하는 경우 자동으로 객체생성 및 ResultSet 처리 등의 장점이 있다.

Mybatis를 사용하기 위해서는 4가지 추가적인 라이브러리가 필요하다.spring-jdbc/spring-tx : 스프링에서 데이터베이스 처리와 트랜잭션 처리mybatis/mybatis-spring:MyBatis와 스프링 연동용 라이브러리

pom.xml

<!-- MyBatis -->
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.6</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

root-context.xml

<!-- HikariCP configuration -->
	<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
		<constructor-arg ref="hikariConfig" />
	</bean>
	
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
	</bean>

*Java설정을 이용하는 경우(RootConfig 클래스)

	@Bean
	public SqlSessionFactory sqlSessionFactory() throws Exception {
		SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
		sqlSessionFactory.setDataSource(dataSource());
		return sqlSessionFactory.getObject();
	}

Mapper인터페이스

SQLSessionFactory를 이용해서 코드를 작성해도 직접 Connection을 얻어서 JDBC코딩이 가능하지만, 좀 더 편하게 작업하기 위해서는 SQL을 어떻게 처리할 것인지를 별도의 설정을 분리해주고, 자동으로 처리되는 방식을 이용하는 것이 좋습니다. 이를 위해서는 MyBatis의 Mapper라는 존재를 작성해 줘야 합니다. Mapper는 쉽게 말해서 SQL과 그에 대한 처리를 지정하는 역할을 합니다. MyBatis-Spring을 이용하는 경우에는 Mapper를 XML과 인터페이스 + 어노테이션의 형태로 작성 할 수 있습니다.

우선 org.spring.mapper 라는 패키지를 만들고 해당 패키지를 root-context.xml에 등록해줍니다.

root-context.xml

<mybatis-spring:scan base-package="org.zerock.mapper" />

*Java설정을 이용하는 경우 RootConfig 클래스의 일부

package org.zerock.config;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

@Configuration
@ComponentScan(basePackages = "org.zerock.sample")
@MapperScan(basePackages = "org.zerock.mapper")
public class RootConfig {

	@Bean
	public DataSource dataSource() {
		HikariConfig hikariConfig = new HikariConfig();
		hikariConfig.setDriverClassName("oracle.jdbc.driver.OracleDriver");
		hikariConfig.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:XE");
        ...이하 생략
        

 

 

XML 설정의 root-context.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"
	xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
	xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

	<!-- Root Context: defines shared resources visible to all other web components -->

	<!-- 스캔할 bean들이 모여있는 패키지를 지정한다. -->
	<context:component-scan base-package="org.zerock.sample"></context:component-scan>

	<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
		<!-- <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
		<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe"></property> -->

		<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property> 
		<property name="jdbcUrl" value="jdbc:log4jdbc:oracle:thin:@localhost:1521:xe"></property>
		<property name="username" value="scott"></property>
		<property name="password" value="tiger"></property>
	</bean>

	<!-- HikariCP configuration -->
	<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
		<constructor-arg ref="hikariConfig" />
	</bean>
	
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
	<mybatis-spring:scan base-package="org.zerock.mapper" />

</beans>

 자바설정에서 RootConfig 클래스

package org.zerock.config;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

@Configuration
@ComponentScan(basePackages = "org.zerock.sample")
@MapperScan(basePackages = "org.zerock.mapper")
public class RootConfig {

	@Bean
	public DataSource dataSource() {
		HikariConfig hikariConfig = new HikariConfig();
		hikariConfig.setDriverClassName("oracle.jdbc.driver.OracleDriver");
		hikariConfig.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:XE");

		hikariConfig.setUsername("scott");
		hikariConfig.setPassword("tiger");

		HikariDataSource dataSource = new HikariDataSource(hikariConfig);

		return dataSource;
	}

	@Bean
	public SqlSessionFactory sqlSessionFactory() throws Exception {
		SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
		sqlSessionFactory.setDataSource(dataSource());
		return sqlSessionFactory.getObject();
	}

}

 

 


다음은 pom.xml(버전설정) 과 web.xml(한글 인코딩) 처리를 위한 코드 설명이다. 

 

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
	
    <!--POM model의 버전-->
    <modelVersion>4.0.0</modelVersion>
	
    <!--프로젝트를 생성하는 조직의 고유 아이디를 결정한다. 일반적으로 도메인의 이름을 거꾸로 적는다.-->
    <groupId>kopo.exam</groupId>
    
	<!-- 프로젝트 빌드 시 파일의 대표이름이다. groupId내에서 유일해야 한다. 
    Maven을 이용하여 빌드 시 다음과 같은 파일이 생성된다. -->
    <artifactId>hello</artifactId>
    
    <!--프로젝트 이름-->
	<name>hello</name>
    
    <!--패키징 유형(jar, war, ear 등)-->
	<packaging>war</packaging>
    
    <!--프로젝트의 현재 버전, 프로젝트 개발 중일 때는 SNAPSHOT을 접미사로 사용-->
	<version>1.0.0-BUILD-SNAPSHOT</version>
    
    <!-- 버전관리시 용이 하다. ex) properties에서 자바 버전을 선언 하고 dependencies에서 
    다음과 같이 활용 가능 하다. <version>${java.version}</version>  -->
	<properties>
		<java-version>1.8</java-version>
		<org.springframework-version>5.0.7.RELEASE</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
	</properties>
    
    <!--dependencies태그 안에는 프로젝트와 의존 관계에 있는 라이브러리들을 관리 한다.-->
	<dependencies>
		<!-- Spring -->
		<dependency>
		    <groupId>org.apache.maven.plugins</groupId>
		    <artifactId>maven-resources-plugin</artifactId>
		    <version>2.4.3</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework-version}</version>
			<exclusions>
				<!-- Exclude Commons Logging in favor of SLF4j -->
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				 </exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
				
		<!-- AspectJ -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>	
		
		<!-- Logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j-version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.15</version>
			<exclusions>
				<exclusion>
					<groupId>javax.mail</groupId>
					<artifactId>mail</artifactId>
				</exclusion>
				<exclusion>
					<groupId>javax.jms</groupId>
					<artifactId>jms</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jdmk</groupId>
					<artifactId>jmxtools</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jmx</groupId>
					<artifactId>jmxri</artifactId>
				</exclusion>
			</exclusions>
			<scope>runtime</scope>
		</dependency>

		<!-- @Inject -->
		<dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>1</version>
		</dependency>
				
		<!-- Servlet -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
	
		<!-- Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.7</version>
			<scope>test</scope>
		</dependency>        
	</dependencies>
    
    <!--빌드에 사용할 플러그인 목록-->
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>org.test.int1.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

<web.xml> -- 한글 인코딩

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
    <!-- 여기에 등록된 설정 파일에 따라 등록된 Bean들은 모두 공유가 가능하다. -->
    <!-- root-context.xml을 정의 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>
	
    <!-- ContextLoaderListener --> 
    <!-- 리스너로써 root-context.xml에 정의 되어있는 것들을 모든 서블릿과 필터가 공유할 수 있게 해준다고 함. -->
    <!-- Controller가 공유하는 Bean들을 포함하는 Spring Container를 생성한다 -->
    <!-- 공유하는 Bean: Dao, DataSource, Service --> 
    <!-- DispatcherServlet에 의해 생성된 Bean은 ContextLoaderListener에 의해 
    생성된 Bean을 참조할 수 있다.--> 
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

    <!-- Processes application requests -->
    <!-- DisparcherServlet -->
    <!-- 1. Spring Container를 생성한다. (Spring Container: Controller의 lifecycle 관리) -->
    <!-- 2. 클라이언트의 요청을 처음으로 받는 클래스 (Spring에서 제공) -->
    <!-- 3. 클라이언트의 요청을 Handler(Controller)에 보낸다. -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- contextLoader가 해당 위치의 설정 파일을 읽어, 해당 파일을 dispatcher servlet으로 만든다. -->
        <init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
    
	<!-- /로 시작하는(/뒤에 공백) url 요청을 받아 appServlet에서 처리한다. -->
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	<!-- 한글처리 : 인코딩을 UTF-8로 설정하여 필터링하겠다는 설정이다. -->
    <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>
     
</web-app>
728x90

'Spring > 스프링 프로젝트' 카테고리의 다른 글

Part2 - 스프링 MVC 의 Controller(2)  (0) 2020.08.22
Part2 - 스프링 MVC 의 Controller(1)  (0) 2020.08.20
Part2 - 스프링 MVC설정  (0) 2020.08.19
Part1 - 개발을 위한 준비(1-3)  (0) 2020.08.17
스프링 프로젝트  (0) 2020.08.17
Comments