- EJB๋ฅผ ์ฃผ ํ๋ ์์ํฌ๋ก ์ฌ์ฉํ ๋ ๋ถํธํ๋ ์ ๋ค(๋ฌด๊ฑฐ์, ๋ฐ๋ผ์ผ ํ ์คํ๋ค์ด ๋ณต์กํจ)์ ํด์ํ๊ธฐ ์ํด ํ์ํจ
- 2002๋ ๋ก๋์กด์จ์ด ์ถํํ ๋์ Expert One-on-One J2EE Design and Development์ ์ ๋ณด์ธ ์ฝ๋๊ฐ ํ์ฌ Spring์ ๊ทผ๊ฐ์ด ๋จ
- ์ด ๋์๋ฅผ ์ฝ์ ๊ฐ๋ฐ์๋ค์ด '์ฝ๋๊ฐ ์ฑ ์ผ๋ก๋ง ์กด์ฌํ๊ธฐ์๋ ๋๋ฌด ์๊น๋ค'๋ผ๋ฉฐ ๋ก๋ ์กด์จ์ ํ๊ฐ๋ฅผ ๋ฐ์ ๋ค ํ๋ ์์ํฌ๋ก ๋ฐ์ ์ํด
- 2003๋ 6์ Apache 2.0 License๋ก ๊ณต๊ฐ๋จ
- 2004๋ ์ 1.0v์ด ๋ฐฐํฌ๋จ
- ์๋ฐ, ์ํฐํ๋ผ์ด์ฆ ๊ฐ๋ฐ, ์คํ์์ค, light-weigth "์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ"์ด๋ค.
- ํน์ ๊ณ์ธต์ด๋ ๊ธฐ์ , ์ ๋ฌด ๋ถ์ผ์ ๊ตญํ๋์ง ์๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์์ญ์ ํฌ๊ดํ๋ ๋ฒ์ฉ์ ์ธ ํ๋ ์์ํฌ๋ฅผ ๋งํจ.
- ๊ต์ฅํ ๋ฒ์ฉ์ ์ด๊ณ ๋ค์ํ ๋ถ์ผ์์ ํ์ฉํ๊ณ ์์ง๋ง, ๋ชจ๋ ๋ค ์์์ผ ํ์ฉํ ์ ์๋ ๊ฒ์ ์๋ ๋งํผ ๊ธฐ๋ณธ์ ์ถฉ์คํด์ ํ์ตํด์ผ ํฉ๋๋ค.
- ๋จ์ํ ์น ์ปจํ ์ด๋์์๋ ์ํฐํ๋ผ์ด์ฆ ๊ฐ๋ฐ์ ๊ณ ๊ธ๊ธฐ์ ์ ๋๋ถ๋ถ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- EJB์ ๋นํด ๊ฒฝ๋๊ธ์ ๋๋ค. ๋ํ ์ผ๋ฐ ์๋ฐ ๊ฐ์ฒด๋ง์ ์ฌ์ฉํ์ฌ ์ํฐํ๋ผ์ด์ฆ๊ธ์ ๊ณ ๊ธ ๊ธฐ์ ์ ๊ตฌํํ ์ ์์ต๋๋ค.
- ๊ฐ๋ฐ์๊ฐ ๋ณต์กํ๊ณ ์ค์ํ๊ธฐ ์ฌ์ด Low Level์ ๋ง์ด ์ ๊ฒฝ ์ฐ์ง ์์ผ๋ฉด์ Business Logic ๊ฐ๋ฐ์ ์ ๋ ํ ์ ์๋๋ก ํด์ค๋๋ค.
- Spring์ OpenSource ๋ก์ ๋๊ตฌ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค๋ง, ์๋ฌด๋ ์ ํ๋ ๊ฒ์ ์๋๋ฉฐ, ๋ฌด๋ฃ ํ๋ ์์ํฌ์ ๋จ์ ์ ๊ทน๋ณตํ๊ณ , ์ฅ์ ์ ๊ทน๋ํํ์ฌ ์ฌ์ฉํ์ฌํ์ฌ ํฉ๋๋ค.
- Spring ์ปจํ ์ด๋(Container)๋ Java ๊ฐ์ฒด์ Life Cycle์ ๊ด๋ฆฌํ๋ฉฐ, Spring ์ปจํ ์ด๋(Container)๋ก๋ถํฐ ํ์ํ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Spring์ ์ค์ ํ์ผ์ด๋ ์ด๋ ธํ ์ด์ (Annotation)์ ํตํด์ ๊ฐ์ฒด ๊ฐ์ ์์กด๊ด๊ณ๋ฅผ ์ค์ ํ ์ ์๋๋ก ํ๊ณ ์์ต๋๋ค.
- Spring์ ํธ๋์ญ์ (Transaction)์ด๋ ๋ก๊น (Logging), ๋ณด์(Security)๊ณผ ๊ฐ์ด ๊ณตํต์ ์ผ๋ก ํ์๋ก ํ๋ ๋ชจ๋๋ค์ ์ค์ ํต์ฌ ๋ชจ๋์์ ๋ถ๋ฆฌํด์ ์ ์ฉํ ์ ์์ต๋๋ค.
- Sring ์ปจํ ์ด๋(Container)์ ์ ์ฅ๋๋ Java๊ฐ์ฒด๋ ํน์ ํ ์ธํฐํ์ด์ค(Interface)๋ฅผ ๊ตฌํํ๊ฑฐ๋, ํน์ ํด๋์ค(Class)๋ฅผ ์์๋ฐ์ง ์์๋ ๋ฉ๋๋ค.
- JDBC(Java DataBase Connectivity), JTA(Java Transaction API) ๋ฑ ์ด๋ค ํธ๋์ญ์ ์ ์ฌ์ฉํ๋๋ผ๋ ์ค์ (Configuration)์ ํตํด ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ฏ๋ก ํธ๋์ญ์ ๊ตฌํ์ ์๊ด์์ด ๋์ผํ ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Spring์ Mybatis, Hibernate ๋ฑ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฒ๋ฆฌ๋ฅผ ์ํ ORM(Object Relational Mapping) ํ๋ ์์ํฌ๋ค๊ณผ์ ์ฐ๋ ์ง์ํฉ๋๋ค.
JDBC(Java DataBase Connectivity) : Java ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ ๋ฐ ์ ๋ฐ์ดํธํ๊ฑฐ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ Java์์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ์๋ฐ API์ ๋๋ค.
ORM(Object Relational Mpping) : ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋งคํ(์ฐ๊ฒฐ)ํด์ฃผ๋ ๊ฒ์ ๋งํฉ๋๋ค.
OXM(Object-XML Mapping) : XML๊ณผ ์๋ฐ(Java) ์ค๋ธ์ ํธ๋ฅผ ๋งคํํด์ ์ํธ ๋ณํํด์ฃผ๋ ๊ธฐ์ ์ ๋๋ค.
JMS(Java Message Service) : ์ฌ๋์ด ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑ ์์๊ฐ ์๋นํ๋ ์์ฒญ, ๋ณด๊ณ ์, ์ด๋ฒคํธ๋ก ๋ฉ์์ง๋ฅผ ์์ฑ, ์ ์ก ์์ ๋ฐ ์ฝ์ ์ ์๋ ๋ฉ์์ง ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
Transactions : ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ๋ฌ ์์ฒญ์ด ํ ๊บผ๋ฒ์ ์ฒ๋ฆฌ๊ฐ ๋์ด์ผ ํ๋ ํธ๋์ญ์ (Transaction)์ด ์ ์๋๊ณ , ๊ตฌํ๋ ์ ์๋๋ก ์ด๋ ธํ ์ด์ ์ผ๋ก ์ ๊ณตํฉ๋๋ค.
- Websocket : HTTP ํต์ ์ ๋จ์ ์ธ ๋จ๋ฐฉํฅ ํต์ ์ ๊ฐ์ ํ๊ธฐ ์ํ์ฌ ์น ์์ผ์ ํ์ฉํ์ฌ ๋ฐ ์๊ตฌ์ ์ธ ์๋ฐฉํฅ ํต์ ์ ์ ๊ณตํฉ๋๋ค.
- Servlet : MVC ์ฒ๋ฆฌ ํจํด์์ Controller์ ํด๋นํ๋ ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ ์์ ์ด ์งํ๋๋๋ก ํฉ๋๋ค.
- Web : JSP(Java Server Page)์ ์ํ๋ Expression, Directive, Declaration, Expression Language, Java Standard Tag Library ๋ฑ์ ํ์ฉํ ์ ์๋ ์น ๋ชจ๋์ ์ ๊ณตํฉ๋๋ค.
- Portlet : ํฌํธ ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๋ ์น ์ปดํฌ๋ํธ(Web Component)๋ฅผ ์ ๊ณตํ๋ฉฐ, ๋ํ, MVC ์ฒ๋ฆฌ ํจํด์์ View ์ํ๋ ๊ณณ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ฌ ๋ณด๋ด ์ง ์ ์๋ ์ญํ ์ ์ํํฉ๋๋ค.
- ์ฃผ์ํ ๊ฐ์ฒด๋ค(Bean)์ ๊ด๋ฆฌํด์ฃผ๋ ์์ฃผ ์ค์ํ ๋ชจ๋
- Beans : ์คํ๋ง ์ปจํ ์ด๋์ ์ํด ๊ด๋ฆฌ๋๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ํํธ์จ์ด ์ปดํฌ๋ํธ๋ก์ ํ๋์ ํด๋์ค๋ก ๋ถํฐ ์ป์ด์ง ๊ฐ์ฒด์ด๋ฉฐ, ์ฃผ์ (Inject)์ ๋์์ ๋๋ค. XML์ bean ํ๊ทธ๋ @Configuration ์ด๋ ธํ ์ด์ ์ผ๋ก ์ค์ ๋๋ ์ฃผ์ ์ค์ ํด๋์ค์์ @Bean ์ด๋ ธํ ์ด์ ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
- Core : ์คํ๋ง ํ๋ ์์ํฌ์ ๊ทผ๊ฐ์ด ๋๋ ์์๋ก IoC(Invert Of Control) ๋๋ DI(Dependency Injection)๊ธฐ๋ฅ์ ์ง์ํ๋ ์์์ ๋๋ค.
- Context : ์ฌ๋ฌ Bean์ ๊ด๋ จ์๋ ์์๋ก ๊ฐ ๊ฐ ๋ถ๋ฆฌํ์ฌ ํ๋์ XML ํ์ผ๋ก ๊ตฌ์ฑ๋ ์ ์๋๋ก ํ๋ ์์์ ๋๋ค.
- SpEL : Spring Expresion Language์ ์ฝ์๋ก ๋ฐํ์(์คํ) ์ ๊ฐ์ฒด ๊ทธ๋ํ ์ฟผ๋ฆฌ ๋ฐ ์กฐ์์ ์ง์ํ๋ ํํ ์ธ์ด๋ก์ #{ํํ์} ์ด๋ ${ํํ์} ์ผ๋ก๋ ํ๋ผ๋ฏธํฐ๋ ์ฐ์ฐ์, ๋น๊ต์ ๋ฑ์ ๊ตฌํํ ์ ์๋๋ก ๋์ต๋๋ค.
- JUnit ๋ฐ Spring Test ๋ฅผ ์ง์ํฉ๋๋ค.
- JUnit์ @Test, @Ignore, @Before, @After, @BeforeClass, @AfterClass ๋ฑ์ ์ด๋ ธํ ์ด์ ์ ํ์ฉํ assert ๋ฉ์๋๋ก ๋จ์ ํ ์คํธ ํ๋ ์์ ๊ตฌ์ฑ์ ์ง์ํฉ๋๋ค.
- Spring Test๋ @RunWith, @ContextConfiguration, @Autowired ์ด๋ ธํ ์ด์ ์ ํ์ฉํ์ฌ ๋ณ๋์ ์ปจํ ์คํธ ์์ด๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
- AOP(Aspect-Oriented Programming) : ๊ณตํต์ ์ผ๋ก ์ ์ฉ์ด ๋์ด์ผ ํ๋ ๋ถ๋ถ์ด ์ฌ๋ฌ ๊ตฐ๋ฐ์ ํฉ์ด์ ธ ์์ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ธฐ(Jointpoint)๊ฐ ๋์์ ๊ฒฝ์ฐ ๋๋นํด ์ฌ๋ฌ ์ฌ์ฉ์๊ธฐ(Jointpoint)๋ฅผ ์ ๊ท ํํ์์ธ ํฌ์ธํธ์ปท(Pointcut)์ผ๋ก ๋ง๋ค์ด ๊ฐ ๊ฐ์ ๋์ ํด๋์ค์ ์๋ ์ฝ๋๋ฅผ ์ฐ๊ฒฐํ์ฌ ํ๋์ ๊ฐ์ฒด๋ก ๋ง๋๋๋ฐ ์ด๋ฅผ ์๋น(Weaving)์ด๋ผ ํ๊ณ , ์๋น(Weaving) ๋ ๊ฒ์ ๋์๋๋๋ก ํฉ๋๋ค. ์ด ๋ ์๋น(Weaving)๋ ๋์์ ์ด๋๋ฐ์ด์ค(Advice)๋ผ๊ณ ํฉ๋๋ค.
- Aspects : ๋ณดํต AspectJ์ ์ํ ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์๋ฏธํ๋ฉฐ, Spring AOP๋ ๊ณตํต์ ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ๋จํ ๊ตฌํํ๊ณ , Spring Container์ ์ํด ๊ด๋ฆฌ๋๋ Bean์๋ง ์ ์ฉํ์ง๋ง, Aspects๋ Spring AOP๋ณด๋ค ๊ฐ๋ ฅํ๊ณ , ์์ ์ฒด๋ฅผ ๋ณ๋๋ก ๊ตฌ์ฑํ์ฌ ์งํํ๊ธฐ ๋๋ฌธ์ ๋ง์ด ๋ณต์กํด์ง๋๋ค.
- Instrumentation : ๋น์ ์๋ช ์ฃผ๊ธฐ์ ์ค์ ๊ทธ๋ฆฌ๊ณ ์ฒ๋ฆฌ๋ฐฉ๋ฒ์ ๊ด๋ฆฌํ๋ ์คํ๋ง ์ปจํ ์ด๋์ ๋๋ค.
- Messaging : ์์คํ ์ ๊ตฌ์ฑ ์์ ๊ฐ์ ๋ฉ์์ง์ ์ง์ํ๊ณ ๊ด๋ฆฌํ๋ ์์์ ๋๋ค.
https://www.azul.com/downloads/?package=jdk#zulu
์ ์ฌ์ดํธ์ ์ ์ํ์ฌ Open JDK 17 ๋ฒ์ ์ Windows x86 64-bit์ฉ์ผ๋ก ๋ค์ด๋ก๋ ๋ฐ์ ํ ์ค์นํฉ๋๋ค.
https://www.jetbrains.com/ko-kr/idea/download/?section=windows
์ ์ฌ์ดํธ์ ์ ์ํ์ฌ ์ธํ ๋ฆฌ ์ ์ด๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์ ์ค์นํฉ๋๋ค.
<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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>kr.co.study</groupId>
<artifactId>study</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>study Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<java-version>17</java-version>
<org.springframework-version>5.3.20</org.springframework-version>
<org.aspectj-version>1.9.0</org.aspectj-version>
<org.slf4j-version>2.0.0</org.slf4j-version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<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>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.9.0</version>
</dependency>
</dependencies>
<build>
<finalName>study1</finalName>
<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>17</source>
<target>17</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>
D:\kim\springStudy\study2\pom.xml ์ค์
<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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.study2</groupId>
<artifactId>study2</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>study2 Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<java-version>17</java-version>
<org.springframework-version>5.3.20</org.springframework-version>
<org.slf4j-version>2.0.0</org.slf4j-version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<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>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.9.0</version>
</dependency>
<!-- slf4j and log4j -->
<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-api 2.5, jsp-api 2.1, jstl 1.2) -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</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>
<!-- ํ
์คํธ ๋๊ตฌ(junit 4.13, spring-test 5.3.20) -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- maven build tool(3.2.1) -->
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-archetype-plugin</artifactId>
<version>3.2.1</version>
</dependency>
<!-- lombok(1.18.22)-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<!-- DB ๋ก๊ทธ(log4jdbc-log4j2 1.16) -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2</artifactId>
<version>1.16</version>
</dependency>
<!-- ์คํ๋ง jdbc(5.3.20)-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- DBMS Common Library(1.4) -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- ๋ง๋ฆฌ์DB ์ฐ๊ฒฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(3.1.4) -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>3.1.4</version>
</dependency>
<!-- ์คํ๋ง ํธ๋์ญ์
๋๊ตฌ(5.3.20) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- mybatis ๋ผ์ด๋ธ๋ฌ๋ฆฌ - mybatis 3.4.0 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.0</version>
</dependency>
<!-- mybatis-spring 1.3.2 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- ๊ตฌ๊ธ JSON : gson 2.7 -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.7</version>
</dependency>
<!-- ์น ํฌ๋กค๋ง ๋๊ตฌ jsoup 1.12.1 -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.12.1</version>
</dependency>
<!-- ๋ฒ์ฉ json(20200518) -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20200518</version>
</dependency>
<!-- ์ฌํ json(0.4) -->
<dependency>
<groupId>org.apache.clerezza.ext</groupId>
<artifactId>org.json.simple</artifactId>
<version>0.4</version>
</dependency>
<!-- jackson library(json to xml) 2.9.4-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
</dependency>
<!-- jackson mapper(1.9.13) -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<!-- ์คํ๋ง ์ํธํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.4.0</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.4.0</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.4.0</version>
</dependency>
<!-- ํ์ผ ์ฒจ๋ถ ๋ฐ ์
๋ก๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ commons-fileupload 1.3.2, commons-io 2.4 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<!-- ์ด๋ฏธ์ง ํธ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ imgscalr-lib 4.0 -->
<dependency>
<groupId>org.imgscalr</groupId>
<artifactId>imgscalr-lib</artifactId>
<version>4.0</version>
</dependency>
<!-- ์๋ฐ ์ด๋ฉ์ผ ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ javax.mail-api 1.4.7 -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.4.7</version>
</dependency>
<!-- ์ด๋ฉ์ผ ๋ฐ ์์์ ๋ํ ์ธ๋ถ ์ก์ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ spring-context-support ์คํ๋งmvc ๋ฒ์ ๊ณผ ๋์ผ -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- java์ validation ๋ผ์ด๋ธ๋ฌ๋ฆฌ validation-api 2.0.1.Final -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!-- ํผ ๊ฒ์ฆ์ ์ ๋
ธํ
์ด์
์ผ๋ก ๊ฒ์ฆํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ hibernate-annotations 3.5.6-Final -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.5.6-Final</version>
</dependency>
<!-- hibernate Validator ๋ผ์ด๋ธ๋ฌ๋ฆฌ hibernate-validator 6.0.8.Final, jaxb-api 2.3.0 -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.8.Final</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<!-- ์ ๋
ธํ
์ด์
์ค์ api ์ถ๊ฐ -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
<!-- ์๋ ฅ ๋ฌ๋ ฅ -->
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>4.0.1</version>
</dependency>
</dependencies>
<build>
<finalName>study2</finalName>
<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>17</source>
<target>17</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>
D:\kim\springStudy\study2\src\main\webapp\WEB-INF\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">
<display-name>Study2 Web Application</display-name>
<!-- ๋น ์ค์ ํ์ผ ๋ฑ๋ก : applicationContext.xml ์ง์ -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!-- ๋ชจ๋ ์๋ธ๋ฆฟ๊ณผ ํํฐ๊ฐ ๊ณต์ ํ๋ Context Spring ์ปจํ
์ด๋ ์์ฑ -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- ๋ด๋ถ ์น ๊ด๋ จ ์ฒ๋ฆฌ ์์
์ค์ ํ์ผ ๋ฑ๋ก : dispatcher-servlet.xml ์ง์ -->
<!-- ์ํธํ ์ฒ๋ฆฌ ์ค์ ํ์ผ ๋ฑ๋ก : spring-security.xml ์ง์ -->
<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
/WEB-INF/spring-security.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>
<!-- ํ๊ธ ๊นจ์ง ๋ฐฉ์ง -->
<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>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
D:\kim\springStudy\study2\src\main\webapp\WEB-INF\applicationContext.xml
- D:\kim\springStudy\study2\src\main\webapp\WEB-INF ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[File] ์ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ applicationContext.xml์ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
<?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:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
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
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<!-- applicationContext : ๋น์ ์ค์ ํ๋ ํ์ผ๋ก ์ธ๋ถ ์์๊ณผ ์ฐ๋ํ๋ ๋ถ๋ถ์ ์ค์ -->
<!-- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ -->
<!-- spring-jdbc-5.3.20.jar ์์ ๋๋ผ์ด๋ฒ๋งค๋์ ์ฐ๊ฒฐ -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="org.mariadb.jdbc.Driver"/>
<property name="url" value="jdbc:mariadb://localhost:3306/haebeop"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</bean>
<!-- sql์ ๋์ ํ my-batis ์ค์ : mybatis-spring-1.3.2.jar์ ์ธ์
ํฉํ ๋ฆฌ๋นํด๋์ค ์ฐ๊ฒฐ -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:/mybatis-config.xml"/>
<property name="mapperLocations" value="classpath*:/mappers/**/*Mapper.xml"/>
</bean>
<!-- SqlSession ๊ฐ์ฒด ์ฃผ์
-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
<!-- ํธ๋์ญ์
๋ฐ DB ํจํค์ง ๋ฐฉ์ ๋ฐ ๊ฐ ์ข
๋ก๊น
๊ณผ ๋ณด์ ์ค์ -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<context:annotation-config/>
<!-- @Transactional ์ด๋
ธํ
์ด์
์ฒ๋ฆฌ -->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
D:\kim\springStudy\study2\src\main\resources ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[File] ์ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ mybatis-config.xml์ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC
"-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package name="kr.ed.haebeop" />
</typeAliases>
</configuration>
- D:\kim\springStudy\study2\src\main\resources ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[Directory] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ mappers์ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
- D:\kim\springStudy\study2\src\main\resources\mappers ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[File] ์ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ testMapper.xml์ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
<select id="testSelectList" resultType="kr.ed.haebeop.domain.test">
select * from test
</select>
</mapper>
- D:\kim\springStudy\study2\src\main\webapp\WEB-INF ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[File] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ dispatcher-servlet.xml์ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
<?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">
<!-- dispatcher-servlet.xml : ๋ด๋ถ ์น ์ ๊ทผ ๋ฐ ์ฒ๋ฆฌ ์์
์ค์ ํ์ผ -->
<!-- ์ ๊ทผ ์์์ ๋ํ ๊ถํ ์ค์ -->
<resources mapping="/resources/**" location="/resources/" />
<resources mapping="/data/**" location="/data/" />
<resources mapping="/admin/**" location="/WEB-INF/views/admin" />
<resources mapping="/board/**" location="/WEB-INF/views/board" />
<resources mapping="/check/**" location="/WEB-INF/views/check" />
<resources mapping="/guestbook/**" location="/WEB-INF/views/guestbook" />
<resources mapping="/free/**" location="/WEB-INF/views/free" />
<resources mapping="/include/**" location="/WEB-INF/views/include" />
<resources mapping="/member/**" location="/WEB-INF/views/member" />
<resources mapping="/notice/**" location="/WEB-INF/views/notice" />
<resources mapping="/qna/**" location="/WEB-INF/views/qna" />
<resources mapping="/reservation/**" location="/WEB-INF/views/reservation" />
<resources mapping="/util/**" location="/WEB-INF/views/util" />
<resources mapping="/sample/**" location="/WEB-INF/views/sample" />
<resources mapping="/sample2/**" location="/WEB-INF/views/sample2" />
<resources mapping="/test/**" location="/WEB-INF/views/test" />
<resources mapping="/error/**" location="/WEB-INF/views/error" />
<!-- ์ปจํธ๋กค๋ฌ์์ ๋์ง URL : /notice/noticeList -->
<!-- ์ค์ ์กด์ฌํ๋ URL : /WEB-INF/views/notice/noticeList.jsp -->
<!-- ์(prefix)์ /WEB-INF/views, ๋ค(suffix)์ .jsp -->
<!-- ๋ฆฌ์กธ๋ฒ์ ๋ํ ์ ๋์ฌ์ ์ ๋ฏธ์ฌ ์ค์ -->
<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>
<!-- ๋ฉํฐํํธ ๋ฆฌ์กธ๋ฒ ์ค์ -->
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<beans:property name="defaultEncoding" value="UTF-8"/> <!-- ๊ธฐ๋ณธ ์ธ์ฝ๋ฉ -->
<beans:property name="maxUploadSize" value="52428800"/> <!-- ํ์ผ ์ฌ์ด์ฆ : 50MB -->
<beans:property name="maxInMemorySize" value="1048576"/> <!-- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ฆ : 1MB -->
</beans:bean>
<!-- ๋ฉํฐํํธ ์
๋ก๋ ๋๋ ํ ๋ฆฌ ์ง์ -->
<beans:bean id="uploadPath" class="java.lang.String">
<beans:constructor-arg value="D:\kim\springStudy\study2\src\main\webapp\resources\upload" />
</beans:bean>
<!-- ๊ธฐ๋ณธ ๋ฉ์ธ ํจํค์ง ๋ฐ ์ปจํธ๋กค๋ฌ ํจํค์ง ์ค์ -->
<context:component-scan base-package="kr.ed.haebeop.controller" />
<annotation-driven />
<!-- ์ธํฐ์
ํฐ : ๊ธ์ฐ๊ธฐ์ ๊ฐ์ ํ์๊ถํ์ ๊ฐ์ง ๊ฒฝ์ฐ๋ ๋ฐ๋์ ๋ก๊ทธ์ธ ํ์ด์ง๋ฅผ ๊ฑฐ์ณ์ ์๋ํ ๊ฒ -->
<!-- <beans:bean id="sampleIntercepter" class="kr.co.teaspoon.util.SampleInterceptor" />
<beans:bean id="adminIntercepter" class="kr.co.teaspoon.util.AdminInterceptor" />
<interceptors>
<interceptor>
<mapping path="/free/**"/>
<beans:ref bean="sampleIntercepter" />
</interceptor>
<interceptor>
<mapping path="/admin/**"/>
<beans:ref bean="adminIntercepter" />
</interceptor>
</interceptors> -->
<!-- free ๋๋ ํ ๋ฆฌ์ view(.jsp)๋ฅผ ์ ๊ทผํ๋ ค๋ฉด SampleInterceptor ํด๋์ค์
์ ์ํ ์กฐ๊ฑด์ด ๋ง์ผ๋ฉด ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ํ ์ ์๋๋ก ํจ -->
<!-- admin ๋๋ ํ ๋ฆฌ์ view(.jsp)๋ฅผ ์ ๊ทผํ๋ ค๋ฉด AdminInterceptor ํด๋์ค์
์ ์ํ ์กฐ๊ฑด์ด ๋ง์ผ๋ฉด ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ํ ์ ์๋๋ก ํจ -->
</beans:beans>
-
D:\kim\springStudy\study2\src\main\webapp\WEB-INF ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[Directory] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ views๋ฅผ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
-
D:\kim\springStudy\study2\src\main\webapp\WEB-INF\views ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[Directory] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ admin๋ฅผ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
-
์์ ๊ฐ์ด views ๋๋ ํ ๋ฆฌ ์์ board, check, guestbook, free, qna, include, member, notice, reservation, util, test, error ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
-
D:\kim\springStudy\study2\src\main\webapp ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[Directory] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ resource๋ฅผ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
-
์์ ๊ฐ์ด webapp ๋๋ ํ ๋ฆฌ ์์ data ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
- D:\kim\springStudy\study2\src\main\resources ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[File] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ log4j.xml์ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration>
<!-- 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>
<logger name="kr.ed.haebeop.controller">
<level value="info" />
</logger>
<logger name="kr.ed.haebeop.domain">
<level value="info" />
</logger>
<logger name="kr.ed.haebeop.persistence">
<level value="info" />
</logger>
<logger name="kr.ed.haebeop.repository">
<level value="info" />
</logger>
<logger name="kr.ed.haebeop.service">
<level value="info" />
</logger>
<logger name="kr.ed.haebeop.util">
<level value="info" />
</logger>
<logger name="kr.ed.haebeop.test">
<level value="info" />
</logger>
<logger name="kr.ed.haebeop">
<level value="info" />
</logger>
<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>
<priority value="warn"/>
<appender-ref ref="console"/>
</root>
</log4j:configuration>
-
D:\kim\springStudy\study2\src\main ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[Directory] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ java๋ฅผ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
-
D:\kim\springStudy\study2\src\main\java ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[Package] ๋ฅผ ์ ํํ์ฌ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด log4j.xml์์ ์ง์ ํ ํจํค์ง๋ฅผ ์์ฑํฉ๋๋ค.
- D:\kim\springStudy\study2\src\main\resources ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[File] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ logback.xml์ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<logger name="jdbc.sqlonly" level="DEBUG" />
<logger name="jdbc.sqltiming" level="INFO" />
<logger name="jdbc.audit" level="WARN" />
<logger name="jdbc.resultset" level="ERROR" />
<logger name="jdbc.resultsettable" level="ERROR" />
<logger name="jdbc.connection" level="INFO" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{HH:mm:ss.SSS} [%thread] %-4level [%logger.%method:%line]-
%msg%n</pattern>
</layout>
</appender>
<appender name="LOGFILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/WEB-INF/logback.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logback.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 30์ผ ์ง๋ ํ์ผ์ ์ญ์ ํ๋ค. -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4level [%logger.%method:%line]
- %msg %n</pattern>
</encoder>
</appender>
<!-- ๋ก๊ทธ์ ๋ ๋ฒจ( ์ง์ ๋ ๋ก๊ทธ ๋ ๋ฒจ ์ด์๋ง ์์ง ) : DEBUG < INFO < WARN < ERROR < FATAL -->
<logger name="myweb" additivity="false">
<level value="INFO" />
<appender-ref ref="LOGFILE" />
<appender-ref ref="CONSOLE" />
</logger>
<root>
<level value="INFO" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>
- D:\kim\springStudy\study2\src\main\resources ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[File] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ log4jdbc.log4j2.properties๋ฅผ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
- D:\kim\springStudy\study2\src\main\webapp\WEB-INF ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[File] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ spring-security.xml์ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
- ๋ง๋ฆฌ์DB ์ GUI ๋๊ตฌ์ธ HeidiSQL์ ์คํํ๊ณ , ์ ์ํ ํ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํ๊ณ , ํ ์คํธ์ฉ ํ ์ด๋ธ์ ์์ฑํ ํ ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
CREATE DATABASE haebeop;
USE haebeop;
CREATE TABLE test(num INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100) NOT NULL);
INSERT INTO test VALUES (DEFAULT, 'ํ
์คํธ์ ๋ชฉ1');
INSERT INTO test VALUES (DEFAULT, 'ํ
์คํธ์ ๋ชฉ2');
INSERT INTO test VALUES (DEFAULT, 'ํ
์คํธ์ ๋ชฉ3');
INSERT INTO test VALUES (DEFAULT, 'ํ
์คํธ์ ๋ชฉ4');
INSERT INTO test VALUES (DEFAULT, 'ํ
์คํธ์ ๋ชฉ5');
SELECT * from test;
- D:\kim\springStudy\study2\src\main\java\kr\ed\haebeop\domain ํจํค์ง ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[Java Class] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ Test๋ฅผ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
package kr.ed.heabeop.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Test {
private int num;
private String title;
}
https://mariadb.org/download/?t=mariadb&p=mariadb&r=11.0.3&os=windows&cpu=x86_64&pkg=msi&m=blendbyte
https://www.heidisql.com/download.php
package kr.ed.haebeop.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TestVO {
private int num;
private String title;
}
package kr.ed.haebeop.repository;
import kr.ed.haebeop.domain.TestVO;
import java.util.List;
public interface TestRepository {
public List<TestVO> testList() throws Exception;
}
package kr.ed.haebeop.repository;
import kr.ed.haebeop.domain.TestVO;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class TestRepositoryImpl implements TestRepository {
@Autowired
private SqlSession sqlSession;
@Override
public List<TestVO> testList() throws Exception {
return sqlSession.selectList("test.testList");
}
}
package kr.ed.haebeop.service;
import kr.ed.haebeop.domain.TestVO;
import java.util.List;
public interface TestService {
public List<TestVO> testList() throws Exception;
}
package kr.ed.haebeop.service;
import kr.ed.haebeop.domain.TestVO;
import kr.ed.haebeop.repository.TestRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class TestServiceImpl implements TestService {
@Autowired
private TestRepository testRepository2;
@Override
public List<TestVO> testList() throws Exception {
return testRepository2.testList();
}
}
package kr.ed.haebeop.config;
import kr.ed.haebeop.repository.TestRepository;
import kr.ed.haebeop.repository.TestRepositoryImpl;
import kr.ed.haebeop.service.TestService;
import kr.ed.haebeop.service.TestServiceImpl;
import kr.ed.haebeop.test.transaction.TransactionRepository;
import kr.ed.haebeop.test.transaction.TransactionService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
@Configuration
@ComponentScan(basePackages = "kr.ed.haebeop")
public class ApplicationConfig {
@Bean
public TestService testService3(){
return new TestServiceImpl();
}
@Bean
public TestRepository testRepository3(){
return new TestRepositoryImpl();
}
@Bean
public TransactionRepository tranRepository() { return new TransactionRepository(); }
@Bean
public TransactionService tranService() { return new TransactionService(); }
}
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri = "http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Title</title>
</head>
<body>
<c:forEach var="test" items="${testList}">
<p>${test.num}</p>
<p>${test.title}</p>
<hr>
</c:forEach>
</body>
</html>
... ์ค๋ต ...
<!-- ํธ๋์ญ์
๋ฐ DB ํจํค์ง ๋ฐฉ์ ๋ฐ ๊ฐ ์ข
๋ก๊น
๊ณผ ๋ณด์ ์ค์ -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<context:annotation-config/>
<bean id="testService" class="kr.ed.haebeop.service.TestServiceImpl" />
<bean id="testRepository" class="kr.ed.haebeop.repository.TestRepositoryImpl" />
<!-- @Transactional ์ด๋
ธํ
์ด์
์ฒ๋ฆฌ -->
<tx:annotation-driven transaction-manager="transactionManager"/>
... ์ค๋ต ...