๋ค์ด๊ฐ๊ธฐ์ ์์
ํ์ฌ ๊ตญ๋น ์ง์ ํ์์์ ์๋ฐ๋ฅผ ๊ณต๋ถํ๊ณ ์๊ณ , ์ธ๋ฏธ ํ๋ก์ ํธ๋ฅผ ๋ง ๋ง์น ์ํฉ์ด๋ค.
์ด์ ์คํ๋ง ํ๋ ์ ์ํฌ๋ฅผ ๋ฐฐ์ฐ๋ ์ค์ธ๋ฐ, STS ๋ง๊ณ ๋ค๋ฅธ IDE ๋ก๋ ๊ณต๋ถํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ ๋์ ํ๊ฒ ๋์๋ค.
์ฒ์ IntelliJ ๋ฅผ ์ ํ์ ๋ Eclipse ์๋ UI ๋ผ๋์ง ์ฒ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด ๋ด๋ ๊ณผ์ ์ด ๋ฌ๋ผ ๋ง์ด ํค๋งธ๊ณ , ์ฌ๋๋ง๋ค ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ๋ฌ๋ผ ์ ๋ณด ์ ๋ชฉ๋ฏผ ์ํ์ด ์กฐ๊ธ ๊ธธ์ด์ก๋ค.
๊ทธ๋์ ๋ด๊ฐ ์ด๋ป๊ฒ ์คํ๋ง MVC + Maven ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์๋์ง ๊ธฐ๋ก ํ ๊ฒธ, ๋ ๊ฐ์ด ์์ ์ด๋ณด์๊ฐ ์ ๋ณด ์ ๋ชฉ๋ฏผ ์ํ์ ์ฒญ์ฐํ ์ ์๊ฒ ์์ฃผ ์๊ฒ๋๋ง ๋์์ด ๋ ๊ฒธ ํด์ ๊ธ์ ์ ์ด๋ณด๋ ค๊ณ ํ๋ค.
์์ํ๊ธฐ
๋ค๋ค IntelliJ ๋ ์ ์ค์นํ์๊ฑฐ๋ผ๋ ๊ฐ์ ํ์ ์งํํ๋ ค๊ณ ํ๋ค.
์ฒ์์ IntellJ ๋ฅผ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ด ๋์ฌ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ธฐ ์ ์ ํ์ธํ๊ณ ๋์ด๊ฐ์ผ ํ ๊ฒ์ด ์๋ค.
๋๋ ์ฒ์์ Spring MVC ํ๋ฌ๊ทธ์ธ์ด ๋ณด์ด์ง ์์ ์ดํ ์ ๋๋ ๋ณ์ ๋ณ ์ง์ ๋ค ํด๋ดค๋ ๊ฒ ๊ฐ๋ค.
1. ๋ด๊ฐ ์ฌ์ฉํ ํ๋ฌ๊ทธ์ธ์ด ์๋์ง ํ์ธํ๊ธฐ
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํด์ผ ํ ํ๋ฌ๊ทธ์ธ์
1) Spring MVC
2) Maven
์ด๋ค. ์ด ๋ ๊ฐ์ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ ๊ฒ์ด๋ผ๊ณ ์ฒดํฌ๋ฅผ ํ๋์ง ๋จผ์ ํ์ธํด์ผํ๋ค.
- ์์ ํ๋ฉด์์ ์ฐ์ธก ํ๋จ์ Configure ๋ผ๋ ๋ฉ๋ด๋ฅผ ํด๋ฆญํ๋ค.
- Configure ๋ฉ๋ด์์ Plugins ๋ฉ๋ด๋ฅผ ํด๋ฆญํ๋ค.
- ๊ฒ์์ฐฝ์ Spring MVC / Maven ๋ฅผ ๊ฒ์ํ๊ณ ํด๋น ํ๋ฌ๊ทธ์ธ์ด ์ฒดํฌ๊ฐ ๋์ด์๋์ง ํ์ธํ๋ค.
์์ ๋ ์ฌํญ์ ์ฒดํฌ๊ฐ ๋์๋์ง ํ์ธ์ด ๋์๋ค๋ฉด ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ์ฌ์ฉํ ์ค๋น๊ฐ ๋์๋ค๋ ๋ป์ด๋ค.
2. ํ๋ก์ ํธ ์์ฑํ๊ธฐ
- ์ฒ์ ํ๋ฉด์ ํ๋ก์ ํธ ์์ฑ ๋ฉ๋ด๋ฅผ ํด๋ฆฐ๋จ๋ค.
- ์ข์ธก์ ํ๋ฌ๊ทธ์ธ ์ ํ ๋ฉ๋ด์์ Maven ์ ์ ํํ๋ค.
- ์๋จ์์ ์ฌ์ฉํ๊ณ ์ ํ๋ Java ์ JDK ๋ฒ์ ์ ์ ํํ๋ค. (์ ๋ 11๋ก ์ฌ์ฉํ๊ฒ ์ต๋๋ค.)
- Next ๋ฅผ ๋๋ฅธ ํ ํ๋ก์ ํธ๋ช ์ ์ค์ ํ๋ค. (์ฌ๊ธฐ์ ํ๋ก์ ํธ๋ช ์ artifactId ์ ๋์ผํ๊ฒ ์ค์ ๋๋ค.)
- ํ๋ก์ ํธ๋ช
์ค์ ํ์ด์ง์์ Artifact Coordinates ๋ฅผ ํด๋ฆญํ์ฌ GroupId ๋ ์์ ์ด ์ํ๋๋๋ก ์ค์ ํ๋ค.
- GroupId ๋ ๋๋ฉ์ธ์ ์ญ์์ผ๋ก ์์ฑํ๋ค.
์ผ๋จ Maven ๊ธฐ๋ฐ์ ํ๋ก์ ํธ๋ ๋ง๋ค์ด์ก๋ค. ์ด์ ์ฐ๋ฆฌ๋ ์ด ํ๋ก์ ํธ์ Spring MVC ๋ฅผ ๋ฎ์ด ์์ธ ์์ ์ด๋ค.
Spring MVC + TomCat Server ์ถ๊ฐํ๊ธฐ
1. Spring MVC ํ๋ ์์ํฌ ์ถ๊ฐํ๊ธฐ
- ์ข์ธก ์๋จ์ ํด๋น ํ๋ก์ ํธ๋ฅผ ์ค๋ฅธ์ชฝ ํด๋ฆญํ๊ณ (๋งฅ์ ๊ฒฝ์ฐ ctrl + ํธ๋ํจ๋) Add Framework Support... ๋ฅผ ํด๋ฆญํ๋ค.
- ์๋ก์ด ์ฐฝ์ด ๋จ๋ฉด, ์ข์ธก ๋ฉ๋ด์์ Spring > Spring MVC ๋ฅผ ์ ํํ๋ค.
- IntellJ ์์๋ Spring ์ต์ ๋ฒ์ ์ธ 5.2.3 RELEASE ๋ฅผ ์ง์ํ๊ณ ์๊ณ , ์ฐ๋ฆฌ๋ ์ด ๋ฒ์ ์ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
- ์ ํ์ ํ๋ค๋ฉด ํด๋น ํ๋ก์ ํธ์ Spring ์ ๋ค์ด ๋ฐ์ ๊ฒ์ด๋ค.
2. TomCat Server ์ถ๊ฐํ๊ธฐ
- ์๋จ ์ค์์์ ๋ง์น ๋ชจ์ ์์ Add Configuration... ์ ์ ํํ๋ค.
- ์ข์ธก ์๋จ์์ + ์ ํด๋ฆญํ๊ณ TomCat Server > Local ์ ๋๋ธํด๋ฆญํ์ฌ ์ ํํ๋ค.
- Port ๋ฒํธ๋ฅผ 9090 ์ผ๋ก ๋ฐ๊ฟ์ค๋ค.
- ๋งฅ์ ๊ฒฝ์ฐ ๋์ปค์ ํฌํธ๊ฐ ๊ฒน์น๋ ๊ฑธ ์๋ฐฉํ๊ธฐ ์ํด์ ์ด๋ ๊ฒ ์ค์ ํ๋ค.
์ ์ ๊ฒฝ์ฐ์๋ ๋์ปค ๋ฐ์ดํฐ ๋ฒ ์ด์ค ํฌํธ๊ฐ 8080์ด๋ผ ํฐ์บฃ์ 9090์ผ๋ก ์ค์ ํด์คฌ์ต๋๋ค.
- ๋งฅ์ ๊ฒฝ์ฐ ๋์ปค์ ํฌํธ๊ฐ ๊ฒน์น๋ ๊ฑธ ์๋ฐฉํ๊ธฐ ์ํด์ ์ด๋ ๊ฒ ์ค์ ํ๋ค.
- ํ๋จ์ Fix ๋ฅผ ํด๋ฆญํ๊ณ , ๊ฒฝ๋ก๋ฅผ ์์ ์ ํ๋ก์ ํธ๋ช
๊ณผ ๋๊ฐ์ด ์
๋ ฅ ํ 1)Apply 2)Ok ๋ฅผ ๋๋ฌ์ค๋ค.
- ๋ง์ ๊ฒ์๊ธ์์ ๊ฒฝ๋ก๋ฅผ / ๋ก ์ค์ ํด์ฃผ๋ผ๊ณ ํ๋๋ฐ, ์ฃผ์ ์ ๋ ฅํ ๋ ํท๊ฐ๋ฆฌ๊ธฐ๋ ํ๊ณ ๋ฌด์๋ณด๋ค ์ ๋ / ๋ก ํ์ ๋ ์๋ฌด๋ฆฌ ๋ง๋ ์ฃผ์๋ฅผ ์ ๋ ฅํด๋ 404 ์๋ฌ๊ฐ ๋ฐ์ํด์ ํด๋น ํ๋ก์ ํธ ๋ช ์ ์ ๋ ฅํ์ต๋๋ค.
์ด์ ํ๋ ์์ํฌ์ ์๋ฒ ์ค์ ์ ๋๋ฌ๋ค. ๋ค์ ๋จ๊ณ์์๋ pom / web / dispatcher-servlet.xml ๋ฌธ์๋ค์ ์๋ด์ค ์์ ์ด๋ค.
xml ๋ฌธ์๋ค ํผ๋ด์ฃผ๊ธฐ
์์ ๊ณผ์ ๋ค์ด ์ ๋ง๋ฌด๋ฆฌ๊ฐ ๋์๋ค๋ฉด 3๊ฐ์ xml ๋ฌธ์์ ํด๋น ํ๋ก์ ํธ๋ฅผ ์ด๋ป๊ฒ ์ด์ํ ๊ฑด์ง ์ ์ธ(?) ํด์ฃผ๋ ์์ ์ ๊ฑฐ์ณ์ผ ํ๋ค.
1. pom.xml
- ์์ ๊ณผ์ ๋ค์ด ๋๋๋ฉด ์๋์ผ๋ก pom.xml ํ์ผ์ด ์ด๋ ค์์ ๊ฒ์ด๋ค.
- ํด๋น xml ๋ฌธ์์ ์๋์ ์ฝ๋๋ฅผ ๋ณต์ฌํด์ ๋ถํ๋ฃ์. ๊ทธ ์ ์ ๊ฐ์์ ํ๊ฒฝ์ด ๋ค๋ฅด๋ ํ์ธํด์ผ ํ ๊ฒ์ด ์๋ค.
- ์ฌ์ฉํ JDK ๋ฒ์
- ์ฌ์ฉํ Spring ๋ฒ์
- ์ฌ์ฉํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค + ๋ฒ์
- ์์ ์ด ์ด๋ค ๋ฒ์ ๋ค์ ์ฌ์ฉํ ๊ฒ์ธ์ง ํ์ธ ํ์ ์๋์ ์ฝ๋๋ฅผ ๋ณต์ฌํด์ pom.xml์ ๋ณต์ฌ / ๋ถํ๋ฃ๊ธฐ๋ฅผ ํ์.
- ์ด ์ฝ๋์๋ ์ค๋ผํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ OJDBC 8 / DBCP ์ ๋ํ ์ฝ๋๊ฐ ์์ผ๋ ํ์ธํ๊ณ ์ฌ์ฉํด์ผ ํ๋ค.
์์ ์๊ฒ ๋ง๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ JDBC ์ DBCP ๋ฅผ Maven Repository ์์ ์ฐพ์ ์์ ํ๋ ๊ฒ์ด ์ข๋ค. - ๋ถ์ฌ๋ฃ์ ๋ ์ฃผ์์ฌํญ
- pom.xml ๋ฌธ์ ๋ด์ ์ฒ์์ ์์ฑ๋ ์ฝ๋ ๋ค์์ ๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ํด์ผํ๋ค.
- ์๋์ ์ฝ๋๋ฅผ ๋ฃ์ ๋ค์ ๋ฌธ์์์ ๋ํ๋ Maven ์์ด์ฝ์ ํด๋ฆญํ๋ค. ๊ทธ๋ฌ๋ฉด ํด๋น ๋ฌธ์์ ๊ธฐ์ ๋ dependency ๋ฅผ ๋ค์ด๋ฐ์ ์จ๋ค.
<!--
์ด ๋ฌธ์์์ ์ฌ์ฉํ ๋ณ์
--><properties>
<java-version>11</java-version>
<org.springframework-version>5.2.3.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<!-- ์์กด์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ - ํ๋ก์ ํธ์์ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ๋ณด - groupId : ํ์ฌ์ ๋ณด - artifactId : ํ๋ก๊ทธ๋จ์ ๋ณด
- version : ๋ฒ์ ์ ๋ณด -->
<dependencies>
<!-- Spring -->
<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>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
<!-- OJDBC8 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.7.0.0</version>
</dependency>
<!-- ์์กด์ฑ ์ค์ -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- DBCP -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.7.0</version>
</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>${java-version}</source>
<target>${java-version}</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>
2. web.xml
web.xml ์์๋ ์ธ์ฝ๋ฉ ๋ฐฉ์, dispatcher ์๋ธ๋ฆฟ์ ๋ํ ์ค์ ์ ์งํํ๋ค.
- WEB-INF > web.xml ํ์ผ์ ์ฐพ๋๋ค.
- web-app ํ๊ทธ ๋ด์ ์๋ ์ฝ๋๋ค์ ์ง์ฐ๊ณ ์๋์ ์ฝ๋๋ฅผ ๋ณต์ฌ ํ ๋ถ์ฌ๋ฃ๊ธฐ ํ๋ค.
<!-- ์คํ๋ง์์ ์ ๊ณตํด์ฃผ๋ ์ธ์ฝ๋ฉ ํํฐ๋ฅผ ๋ฑ๋ก -org.springframework.web.filter.CharacterEncodingFilter -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<!-- 1. ์ธ์ฝ๋ฉ ๋ฐฉ์์ UTF-8 ๋ฐฉ์์ผ๋ก ์ค์ -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!-- 2. ์ถฉ๋ ์ ๊ฐ์ ์ธ์ฝ๋ฉ ์ค์ -->
<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>
<!-- The definition of the Root Spring Container shared by all Servlets
and Filters -->
<!-- ๋ชจ๋ ์๋ธ๋ฆฟ ๋ฐ ํํฐ๊ฐ ๊ณต์ ํ๋ ๋ฃจํธ ์คํ๋ง ์ปจํ
์ด๋์ ์ ์ (์ต์์ ์ค์ ํ์ผ) -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<!-- ๋ชจ๋ ์๋ธ๋ฆฟ ๋ฐ ํํฐ๊ฐ ๊ณต์ ํ๋ ์คํ๋ง ์ปจํ
์ด๋๋ฅผ ๋ง๋ญ๋๋ค. (์ค์ ์ ์ฐ๊ฒฐํด์ฃผ๋ ๋๊ตฌ๋ฅผ ๋ฑ๋ก) -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- Processes application requests -->
<!-- ์์ฉ ํ๋ก๊ทธ๋จ ์์ฒญ ์ฒ๋ฆฌ (์์ฒญ ์ฒ๋ฆฌ ๋ฉ์ธ ์๋ธ๋ฆฟ ๋ฑ๋ก > DispatcherServlet) -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- ์ถ๊ฐ ์ค์ ์ ๊ดํ ๋ด์ฉ์ ๋ฑ๋ก -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/dispatcher-servlet.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3. dispatcher-servlet.xml
ํด๋น xml ์์๋ pom.xml ์์ ๋ฑ๋กํ๋ JDBC / DBCP ๋ฅผ ๋ฑ๋กํ๋ ๊ณผ์ ์ด๋ค
- WEB-INF > dispatcher-servlet.xml ์ ์ฐพ์ ํ์ผ์ ์ฐ๋ค.
- xml ๋ด์ ๋ชจ๋ ์ฝ๋๋ฅผ ์ง์ฐ๊ณ ์๋์ ์ฝ๋๋ฅผ ๋ณต์ฌ ํ ๋ถ์ฌ ๋ฃ๋๋ค.
- ์๋์์ <context:component-scan base-package="์์ ์ด ์ค์ ํ GroupId.ArtifactId" /> ๋ฅผ ์ฐพ์ ์์ ํ๋ค.
- ํ์ฌ์ ์์ ์ด ์ค์ ํ ๋๋ก ์์ฑํ๋ฉด ๋นจ๊ฐ๊ฒ ๋ณํ ํ ๋ฐ, ์ด ๋ถ๋ถ์ ๋์ค์ ํด๊ฒฐํ ๊ฒ์ด๋ค.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans
xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing
infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving
up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources
in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<!--JDBC ๋ฑ๋ก -->
<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<beans:property name="driverClassName" value="oracle.jdbc.OracleDriver"></beans:property>
<beans:property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"></beans:property>
<beans:property name="username" value="C##DO"></beans:property>
<beans:property name="password" value="C##DO"></beans:property>
</beans:bean>
<!-- DBCP ๋ฑ๋ก -->
<beans:bean id="dbcpSource" class="org.apache.commons.dbcp2.BasicDataSource">
<beans:property name="driverClassName" value="oracle.jdbc.OracleDriver"></beans:property>
<beans:property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"></beans:property>
<beans:property name="username" value="C##DO"></beans:property>
<beans:property name="password" value="C##DO"></beans:property>
<beans:property name="maxTotal" value="20"></beans:property>
<beans:property name="maxIdle" value="10"></beans:property>
<beans:property name="maxWaitMillis" value="3000"></beans:property>
</beans:bean>
<beans:bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- Dependency Injection > ํ์ํ ๋๊ตฌ๋ฅผ ์ฃผ์
ํ๋ค๋ ์๋ฏธ -->
<beans:property name="dataSource" ref="dataSource"></beans:property>
</beans:bean>
<context:component-scan base-package="GroupId.ArtifactId" />
</beans:beans>
xml ์ ๋ํ ๋ถ๋ถ์ ๋ชจ๋ ๋๋ฌ๋ค. ์ถํ์ ์์ ์ด ๋ ํ์ํ๊ฒ ์๋ค๋ฉด ์ ๋ง์ ๋ง๊ฒ ์์ ํ๋ฉด ๋๋ค.
์ด์ ์ค์ ํ xml ์ ํด๋น ํ๋ก์ ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ถ๊ฐํ๋ ์์ ์ด ์๋ค.
xml ์ ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ Artifacts์ ์ถ๊ฐํ๊ธฐ
์์์ ์ค์ ํ ๋ชจ๋ ๊ฒ๋ค์ ํด๋น ํ๋ก์ ํธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ถ๊ฐํ๋ ์์ ์ด ํ์ํ๋ค.
- command + ; ํน์ ์ฐ์ธก ์๋จ์ ์์ด์ฝ์ ๋๋ฌ Project Structure ์ฐฝ์ ์ฐ๋ค.
- ์ข์ธก ๋ฉ๋ด์์ Artifacts ๋ฉ๋ด ํด๋ฆญํ๋ค.
- ํ๋ฉด์ ์ฐ์ธก(Available Elements)์์ ์์ ์ ํ๋ก์ ํธ๋ฅผ ๋๋ธ ํด๋ฆญํ๋ฉด ์์ ์ ํ๋ก์ ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฃ์ด์ผ ํ ๋ชฉ๋ก์ด ๋ฌ๋ค.
- ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋๋ธํด๋ฆญํ์ฌ WEB-INF > lib ์ ๋ฃ์ด์ฃผ๋๋ก ํ์.
- ๋ค ๋ฃ์ด์ค ํ, 1) apply 2)ok ์์ผ๋ก ํด๋ฆญํ๋ค.
์ด์ ๋๋ถ๋ถ์ ์ค์ ์ ๊ฑฐ์ ๋์ด ๋ฌ๋ค.
์์ผ๋ก main > java ํด๋์ ํจํค์ง๋ฅผ ๋ง๋ค๊ณ Servlet + JSP ๋ฅผ ๋ง๋ค์ด ์ ์์ ์ผ๋ก ์คํ์ด ๋๋์ง ํ ์คํธ ํ ๊ฒ์ด๋ค.
Package + Servlet + JSP ๋ง๋ค๊ธฐ
1. package + servlet ๋ง๋ค๊ธฐ
์์์ ์งํํ dispatcher-servlet.xml ์์ <context:component-scan base-package="์์ ์ด ์ค์ ํ GroupId.ArtifactId" /> ํ๊ทธ๊ฐ ์ค๋ฅ๊ฐ ๋ ๊ฒ์ ํ์ธํ ์ ์๋๋ฐ, java ํด๋ ๋ด์ ์์ ๊ฒฝ๋ก๋๋ก package ๋ฅผ ๋ง๋ค๋ฉด ํด๊ฒฐ์ด ๋๋ค.
- src > main > java ํด๋์ ์์ ์์ฑํ ๊ฒฝ๋ก๋๋ก package ์์ฑํ๋ค.
- ํ ์คํธ๋ฅผ ์ํด ๋ง์ง๋ง package ์ TestController ๋ฅผ ๋ง๋ ๋ค.
- TestController.java ์ ํด๋น ์ฝ๋๋ฅผ ์์ฑํ๋ค.
- ๋ถ์ฌ๋ฃ์ง ๋ง์๊ณ ์ง์ ์์ฑํด์ ๋ฃ์ด๋ณด์ธ์.
2. WEB-INF > views > test.jsp ๋ง๋ค๊ธฐ
ํ์ฌ ์ฐ๋ฆฌ์ ํ๋ก์ ํธ๋ dispatcher-servlet.xml ์์ view ์ ๋ํ ๋ถ๋ถ์ WEB-INF.views ๋ถํฐ ์ ์ฉํด๋จ๋ค.
์ด ๋ถ๋ถ์ ์์ ์ ์ ๋ง์ ๋ฐ๋ผ ๋ณ๊ฒฝ๊ฐ๋ฅํ์ง๋ง, ์ฐ๋ฆฌ๋ STS ์์ ์๋์ผ๋ก ๋ง๋ค์ด์ง ํ๊ทธ ๊ทธ๋๋ก ๊ฐ์ ธ๋ค ์ด ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ผ๋จ์ ํ ์คํธ ์ฉ์ผ๋ก ์งํํด๋ณด๋๋ก ํ์.
- WEB-INF ํด๋ ์์ views ํด๋๋ฅผ ๋ง๋ ๋ค.
- views ํด๋ ์์ ์์ ์ด ์์์ ๋ฆฌํดํ๊ณ ์ ํ๋ ๋ฌธ์์ด์ jsp ํ์ผ์ ๋ง๋ ๋ค. (๋๋ test ๋ฅผ ๋ฆฌํดํ๋๊น test.jsp ๋ฅผ ๋ง๋ค ๊ฒ์ด๋ค.)
์ด์ ๋ชจ๋ ์ค์ ์ ๋์ด ๋ฌ๋ค.
๋ง๋ฌด๋ฆฌ๋ก๋ ์ฐ๋ฆฌ๊ฐ ์ค์ ํ ๊ฒ์ด ์ ๊ตฌ๋์ด ๋๋์ง ํ ์คํธ ํด๋ณด๋ ๊ฒ์ด๋ค.
ํ ์คํธ ํด๋ณด๊ธฐ
์ด์ ์ฐ๋ฆฌ์ ๊ณผ์ ์ด ์ ์ ์ฉ์ด ๋์๋์ง ํ ์คํธ ํด๋ณผ ์ผ๋ง ๋จ์๋ค. ๊ธด์ฅ์ด ๋๋ ์๊ฐ์ด๋ค.
์ฐ๋ฆฌ๋ ํ ์คํธ์์ jsp ํ์ผ์ ์ง์ ๊ตฌ๋์ํค๋๊ฒ ์๋๋ผ tomcat ์ ๊ตฌ๋์ํฌ ๊ฒ์ด๋ค.
- ๋งฅ > ctrl + option + r ๋จ์ถํค๋ฅผ ๋๋ฌ TomCat > Run
- ๋ธ๋ผ์ฐ์ ๊ฐ ์คํ๋๋ฉด index.jsp ํ์ผ์ด ์ด๋ฆด ๊ฒ์ด๋ค.
- ์ฃผ์์ฐฝ์ ์์ ์ด ์ค์ ํ ์ปจํธ๋กค๋ฌ ์ฃผ์(RequestMapping) + GetMapping ์ ์ง์ ํ ์ฃผ์๋ฅผ ๋ฃ๊ณ ์ด๋ํ๋ค.
- ์ ์ ๋๊ฐ์ด ํ์ จ๋ค๋ฉด ์๋์ ์ฃผ์๋ก ์ด๋ํ์๋ฉด ๋ฉ๋๋ค.
- http://localhost:9090/testspring/test/go
- ์ด๋ ํ, ์์ ์ด ๋ฆฌํดํ๊ณ ์ ํ๋ jsp๊ฐ ์ ๋๋ก ์ด๋ฆฌ๋ฉด ์ฑ๊ณต์ด๋ค.
๋ง์น๋ฉฐ
๋๋ Spring MVC + Maven ํ๋ก์ ํธ๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ํ์์์ ์๋์ฐ๋ก ๋ฐฐ์ ๋ค.
๊ทธ๋์ ์๋์ฐ์์ ํด๋น ํ๋ก์ ํธ๋ ์ด์ ํผ์์๋ ๋๋ฌด ์ ๋ง๋ ๋ค.
ํ์ง๋ง IntelliJ ์์ ํ๋ก์ ํธ๋ฅผ ๋ง๋๋ ๊ณผ์ ์ด STS ์ ์ ๋ง ๋ง์ด ๋ฌ๋๊ณ , ๋ง์ ๋ธ๋ก๊ทธ์์ ๋งํ๋ ๋ฐฉ๋ฒ๋ค์ด (xml ์ด๋ผ๋์ง) ์ ๊ฐ๊ฐ์ด๋ผ ์ด๋ค๊ฒ ๋ง๋๊ฑด์ง ์ ์๊ฐ ์์๋ค. ๊ทธ๋์ ๊ฒฐ๊ตญ ๋ธ๋ก๊ทธ๋ฅผ ๋ฐ๋ผํ๊ธฐ ๋ณด๋จ ๋ง์ ๊ธ๋ค์ด ๋งํ๋ ๋ถ๋ถ๋ง์ ์ ์ธํ๊ณ ํ์์์ ๋ฐฐ์ด๋๋ก ํด๋ณด๋ ค๊ณ ํ๋ ํ๋ ๊ณผ์ ์ ์ดํดํ๋ฉด์ ๋์๊ฐ๋ ๊ฒฐ๊ตญ์ ์ฑ๊ณตํ๋ค.
์ด ๊ณผ์ ์์ ๋๋ ์คํ๋ง์ ๋ฐฐ์ด ์ฒซ ๋ ๋ถํฐ ์ง๊ธ๊น์ง ๋ฐค๋ฎ ์์ด ๊ณ์ ๋์ ํด์๋๋ฐ, ๋ด๊ฐ ๊ทธ๋ ๊ฒ ๊ณ ์ํ ์ ๋ฐ์ ์์๋ ์ด์ ๋!
ํ๋ก์ ํธ๊ฐ ๋ง๋ค์ด์ง๋ ๊ณผ์ ์ ์ ํ ์ดํดํ์ง ๋ชปํ๊ณ ๊ทธ์ ๋ธ๋ก๊ทธ์์ ํ๋ผ๋๋๋ก ๋ฐ๋ผํ๊ธฐ ๊ธ๊ธํ๊ธฐ ๋๋ฌธ์ ๊ทผ๋ณธ์ ๋ํ ์ดํด์์ด ๋ง๋ค๋ ค๊ณ ํ๋ค๋ณด๋ ๊ณ์ ์คํจํ๋ ๊ฒ ๊ฐ๋ค.
ํ์ ๋๊ธฐ๋ค์๊ฒ๋ ํญ์ '๊ฐ์ฌ๋ ์ฝ๋ ๋ฌด์กฐ๊ฑด ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ ํ์ง ๋ง๋ผ' ๊ณ ๋งํ๋ ๋ด๊ฐ ๊ทธ๋ ๊ฒ ํ๋ํ๋ค๋ ๋ด ์์ ์๊ฒ ์ฐธ ๋ถ๋๋ฝ๋ค.
์ด ๊ธ์ ์ฝ๋ ๋ง์ ๋ถ๋ค์ ๋์ฒ๋ผ ๋ฌด์์ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ๋ ํ์ง ์์์ผ๋ฉด ์ข๊ฒ ๋ค.
์ดํด๋์ง ์๊ณ ํ๋ ๊ฒ๊ณผ ๋ฏธ์ธํ๊ฒ๋๋ง ์ดํดํ๊ณ ํ๋ ๊ฒ์ ์์ ํ๋๊ณผ ๋ ์ฐจ์ด๋ผ๊ณ ์๊ฐํ๋ค. ์์ผ๋ก ๋์๊ฐ๋ ์ ๋๋ ํ์ฐํ ์ฐจ์ด๊ฐ ๋๊ณ .
๋์๋ ์๊ณ ์์ธํ์ง๋ ์์ ๊ธ์ ์ฝ์ด์ฃผ์ ๋ชจ๋ ๋ถ๋ค๊ป ๊ฐ์ฌํ๊ณ , ์ด๋ฒ ์ฌ๊ฑด(?) ์ ๊ณ๊ธฐ๋ก ์ฐจ๊ทผ์ฐจ๊ทผ ๋์๊ฐ๋ ค๊ณ ๋ ธ๋ ฅํด์ผ๊ฒ ๋ค.
'Programming > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[QueryDSL] NoSuchMethodError Trouble Shooting (0) | 2023.02.22 |
---|---|
Criteria API (0) | 2023.01.28 |
Spring Bean / IoC Container / DI (1) | 2023.01.21 |
JPA / Persistence Context / Transactional (2) | 2023.01.14 |
Spring | Spring Framework ? (0) | 2020.08.02 |