Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rosieoh/springframework_study
๐์ฒ์ฌ๊ต์ก ํ์คํ JAVA ๊ณผ์ 2๊ธฐ Spring Framework ๐
https://github.com/rosieoh/springframework_study
aop hibernate java jpa spring
Last synced: 10 days ago
JSON representation
๐์ฒ์ฌ๊ต์ก ํ์คํ JAVA ๊ณผ์ 2๊ธฐ Spring Framework ๐
- Host: GitHub
- URL: https://github.com/rosieoh/springframework_study
- Owner: RosieOh
- License: mit
- Created: 2023-09-25T05:17:16.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2023-10-06T18:00:11.000Z (about 1 year ago)
- Last Synced: 2023-10-07T16:57:49.464Z (about 1 year ago)
- Topics: aop, hibernate, java, jpa, spring
- Language: Java
- Homepage:
- Size: 5.69 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# 01. Spring Framework ๊ฐ์
## 01-01. Spring ์ญ์ฌ
- EJB๋ฅผ ์ฃผ ํ๋ ์์ํฌ๋ก ์ฌ์ฉํ ๋ ๋ถํธํ๋ ์ ๋ค(๋ฌด๊ฑฐ์, ๋ฐ๋ผ์ผ ํ ์คํ๋ค์ด ๋ณต์กํจ)์ ํด์ํ๊ธฐ ์ํด ํ์ํจ
- 2002๋ ๋ก๋์กด์จ์ด ์ถํํ ๋์ Expert One-on-One J2EE Design and Development์ ์ ๋ณด์ธ ์ฝ๋๊ฐ ํ์ฌ Spring์ ๊ทผ๊ฐ์ด ๋จ
- ์ด ๋์๋ฅผ ์ฝ์ ๊ฐ๋ฐ์๋ค์ด '์ฝ๋๊ฐ ์ฑ ์ผ๋ก๋ง ์กด์ฌํ๊ธฐ์๋ ๋๋ฌด ์๊น๋ค'๋ผ๋ฉฐ ๋ก๋ ์กด์จ์ ํ๊ฐ๋ฅผ ๋ฐ์ ๋ค ํ๋ ์์ํฌ๋ก ๋ฐ์ ์ํด
- 2003๋ 6์ Apache 2.0 License๋ก ๊ณต๊ฐ๋จ
- 2004๋ ์ 1.0v์ด ๋ฐฐํฌ๋จ
## 01-02. Spring Framework๋?
- ์๋ฐ, ์ํฐํ๋ผ์ด์ฆ ๊ฐ๋ฐ, ์คํ์์ค, light-weigth "์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ"์ด๋ค.
- ํน์ ๊ณ์ธต์ด๋ ๊ธฐ์ , ์ ๋ฌด ๋ถ์ผ์ ๊ตญํ๋์ง ์๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์์ญ์ ํฌ๊ดํ๋ ๋ฒ์ฉ์ ์ธ ํ๋ ์์ํฌ๋ฅผ ๋งํจ.
- ๊ต์ฅํ ๋ฒ์ฉ์ ์ด๊ณ ๋ค์ํ ๋ถ์ผ์์ ํ์ฉํ๊ณ ์์ง๋ง, ๋ชจ๋ ๋ค ์์์ผ ํ์ฉํ ์ ์๋ ๊ฒ์ ์๋ ๋งํผ ๊ธฐ๋ณธ์ ์ถฉ์คํด์ ํ์ตํด์ผ ํฉ๋๋ค.### 1) ๊ฒฝ๋๊ธ ํ๋ ์์ํฌ
- ๋จ์ํ ์น ์ปจํ ์ด๋์์๋ ์ํฐํ๋ผ์ด์ฆ ๊ฐ๋ฐ์ ๊ณ ๊ธ๊ธฐ์ ์ ๋๋ถ๋ถ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- EJB์ ๋นํด ๊ฒฝ๋๊ธ์ ๋๋ค. ๋ํ ์ผ๋ฐ ์๋ฐ ๊ฐ์ฒด๋ง์ ์ฌ์ฉํ์ฌ ์ํฐํ๋ผ์ด์ฆ๊ธ์ ๊ณ ๊ธ ๊ธฐ์ ์ ๊ตฌํํ ์ ์์ต๋๋ค.### 2) ์ํฐํ๋ผ์ด์ฆ ๊ฐ๋ฐ ์ฉ์ด
- ๊ฐ๋ฐ์๊ฐ ๋ณต์กํ๊ณ ์ค์ํ๊ธฐ ์ฌ์ด Low Level์ ๋ง์ด ์ ๊ฒฝ ์ฐ์ง ์์ผ๋ฉด์ Business Logic ๊ฐ๋ฐ์ ์ ๋ ํ ์ ์๋๋ก ํด์ค๋๋ค.### 3) ์คํ์์ค
- Spring์ OpenSource ๋ก์ ๋๊ตฌ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค๋ง, ์๋ฌด๋ ์ ํ๋ ๊ฒ์ ์๋๋ฉฐ, ๋ฌด๋ฃ ํ๋ ์์ํฌ์ ๋จ์ ์ ๊ทน๋ณตํ๊ณ , ์ฅ์ ์ ๊ทน๋ํํ์ฌ ์ฌ์ฉํ์ฌํ์ฌ ํฉ๋๋ค.
## 01-03. Spring Framework ํน์ง
### 1) ์ปจํ ์ด๋ ์ ๊ณต
- Spring ์ปจํ ์ด๋(Container)๋ Java ๊ฐ์ฒด์ Life Cycle์ ๊ด๋ฆฌํ๋ฉฐ, Spring ์ปจํ ์ด๋(Container)๋ก๋ถํฐ ํ์ํ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.### 2) DI(Dependency Injection) ์ง์
- Spring์ ์ค์ ํ์ผ์ด๋ ์ด๋ ธํ ์ด์ (Annotation)์ ํตํด์ ๊ฐ์ฒด ๊ฐ์ ์์กด๊ด๊ณ๋ฅผ ์ค์ ํ ์ ์๋๋ก ํ๊ณ ์์ต๋๋ค.### 3) AOP(Aspect Oriented Programming) ์ง์
- Spring์ ํธ๋์ญ์ (Transaction)์ด๋ ๋ก๊น (Logging), ๋ณด์(Security)๊ณผ ๊ฐ์ด ๊ณตํต์ ์ผ๋ก ํ์๋ก ํ๋ ๋ชจ๋๋ค์ ์ค์ ํต์ฌ ๋ชจ๋์์ ๋ถ๋ฆฌํด์ ์ ์ฉํ ์ ์์ต๋๋ค.### 4) POJO(Plain Old Java Object) ์ง์
- Sring ์ปจํ ์ด๋(Container)์ ์ ์ฅ๋๋ Java๊ฐ์ฒด๋ ํน์ ํ ์ธํฐํ์ด์ค(Interface)๋ฅผ ๊ตฌํํ๊ฑฐ๋, ํน์ ํด๋์ค(Class)๋ฅผ ์์๋ฐ์ง ์์๋ ๋ฉ๋๋ค.### 5) ํธ๋์ญ์ (Transaction) ์ฒ๋ฆฌ๋ฅผ ์ํ ์ผ๊ด๋ ๋ฐฉ๋ฒ์ ์ง์
- JDBC(Java DataBase Connectivity), JTA(Java Transaction API) ๋ฑ ์ด๋ค ํธ๋์ญ์ ์ ์ฌ์ฉํ๋๋ผ๋ ์ค์ (Configuration)์ ํตํด ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ฏ๋ก ํธ๋์ญ์ ๊ตฌํ์ ์๊ด์์ด ๋์ผํ ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.### 6) ์์์ฑ(Persistence)๊ณผ ๊ด๋ จ๋ ๋ค์ํ API ์ง์
- Spring์ Mybatis, Hibernate ๋ฑ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฒ๋ฆฌ๋ฅผ ์ํ ORM(Object Relational Mapping) ํ๋ ์์ํฌ๋ค๊ณผ์ ์ฐ๋ ์ง์ํฉ๋๋ค.
## 01-04. Spring Framework ์ฃผ์ ๋ชจ๋ ๊ตฌ์ฑ
![Spring Framework ์ฃผ์ ๋ชจ๋ ๊ตฌ์ฑ](./springframework001.png)
### 1) Data Access/Integration(๋ฐ์ดํฐ ์ ๊ทผ ๋ฐ ํตํฉ)
JDBC(Java DataBase Connectivity) : Java ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ ๋ฐ ์ ๋ฐ์ดํธํ๊ฑฐ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ Java์์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ์๋ฐ API์ ๋๋ค.
ORM(Object Relational Mpping) : ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋งคํ(์ฐ๊ฒฐ)ํด์ฃผ๋ ๊ฒ์ ๋งํฉ๋๋ค.
OXM(Object-XML Mapping) : XML๊ณผ ์๋ฐ(Java) ์ค๋ธ์ ํธ๋ฅผ ๋งคํํด์ ์ํธ ๋ณํํด์ฃผ๋ ๊ธฐ์ ์ ๋๋ค.
JMS(Java Message Service) : ์ฌ๋์ด ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑ ์์๊ฐ ์๋นํ๋ ์์ฒญ, ๋ณด๊ณ ์, ์ด๋ฒคํธ๋ก ๋ฉ์์ง๋ฅผ ์์ฑ, ์ ์ก ์์ ๋ฐ ์ฝ์ ์ ์๋ ๋ฉ์์ง ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
Transactions : ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ๋ฌ ์์ฒญ์ด ํ ๊บผ๋ฒ์ ์ฒ๋ฆฌ๊ฐ ๋์ด์ผ ํ๋ ํธ๋์ญ์ (Transaction)์ด ์ ์๋๊ณ , ๊ตฌํ๋ ์ ์๋๋ก ์ด๋ ธํ ์ด์ ์ผ๋ก ์ ๊ณตํฉ๋๋ค.
### 2) Web
- Websocket : HTTP ํต์ ์ ๋จ์ ์ธ ๋จ๋ฐฉํฅ ํต์ ์ ๊ฐ์ ํ๊ธฐ ์ํ์ฌ ์น ์์ผ์ ํ์ฉํ์ฌ ๋ฐ ์๊ตฌ์ ์ธ ์๋ฐฉํฅ ํต์ ์ ์ ๊ณตํฉ๋๋ค.
- Servlet : MVC ์ฒ๋ฆฌ ํจํด์์ Controller์ ํด๋นํ๋ ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ ์์ ์ด ์งํ๋๋๋ก ํฉ๋๋ค.
- Web : JSP(Java Server Page)์ ์ํ๋ Expression, Directive, Declaration, Expression Language, Java Standard Tag Library ๋ฑ์ ํ์ฉํ ์ ์๋ ์น ๋ชจ๋์ ์ ๊ณตํฉ๋๋ค.
- Portlet : ํฌํธ ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๋ ์น ์ปดํฌ๋ํธ(Web Component)๋ฅผ ์ ๊ณตํ๋ฉฐ, ๋ํ, MVC ์ฒ๋ฆฌ ํจํด์์ View ์ํ๋ ๊ณณ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ฌ ๋ณด๋ด ์ง ์ ์๋ ์ญํ ์ ์ํํฉ๋๋ค.
### 3) Core Container
- ์ฃผ์ํ ๊ฐ์ฒด๋ค(Bean)์ ๊ด๋ฆฌํด์ฃผ๋ ์์ฃผ ์ค์ํ ๋ชจ๋
- Beans : ์คํ๋ง ์ปจํ ์ด๋์ ์ํด ๊ด๋ฆฌ๋๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ํํธ์จ์ด ์ปดํฌ๋ํธ๋ก์ ํ๋์ ํด๋์ค๋ก ๋ถํฐ ์ป์ด์ง ๊ฐ์ฒด์ด๋ฉฐ, ์ฃผ์ (Inject)์ ๋์์ ๋๋ค. XML์ bean ํ๊ทธ๋ @Configuration ์ด๋ ธํ ์ด์ ์ผ๋ก ์ค์ ๋๋ ์ฃผ์ ์ค์ ํด๋์ค์์ @Bean ์ด๋ ธํ ์ด์ ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
- Core : ์คํ๋ง ํ๋ ์์ํฌ์ ๊ทผ๊ฐ์ด ๋๋ ์์๋ก IoC(Invert Of Control) ๋๋ DI(Dependency Injection)๊ธฐ๋ฅ์ ์ง์ํ๋ ์์์ ๋๋ค.
- Context : ์ฌ๋ฌ Bean์ ๊ด๋ จ์๋ ์์๋ก ๊ฐ ๊ฐ ๋ถ๋ฆฌํ์ฌ ํ๋์ XML ํ์ผ๋ก ๊ตฌ์ฑ๋ ์ ์๋๋ก ํ๋ ์์์ ๋๋ค.
- SpEL : Spring Expresion Language์ ์ฝ์๋ก ๋ฐํ์(์คํ) ์ ๊ฐ์ฒด ๊ทธ๋ํ ์ฟผ๋ฆฌ ๋ฐ ์กฐ์์ ์ง์ํ๋ ํํ ์ธ์ด๋ก์ #{ํํ์} ์ด๋ ${ํํ์} ์ผ๋ก๋ ํ๋ผ๋ฏธํฐ๋ ์ฐ์ฐ์, ๋น๊ต์ ๋ฑ์ ๊ตฌํํ ์ ์๋๋ก ๋์ต๋๋ค.### 4) Test
- JUnit ๋ฐ Spring Test ๋ฅผ ์ง์ํฉ๋๋ค.
- JUnit์ @Test, @Ignore, @Before, @After, @BeforeClass, @AfterClass ๋ฑ์ ์ด๋ ธํ ์ด์ ์ ํ์ฉํ assert ๋ฉ์๋๋ก ๋จ์ ํ ์คํธ ํ๋ ์์ ๊ตฌ์ฑ์ ์ง์ํฉ๋๋ค.
- Spring Test๋ @RunWith, @ContextConfiguration, @Autowired ์ด๋ ธํ ์ด์ ์ ํ์ฉํ์ฌ ๋ณ๋์ ์ปจํ ์คํธ ์์ด๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.### 5) Spring Object
- AOP(Aspect-Oriented Programming) : ๊ณตํต์ ์ผ๋ก ์ ์ฉ์ด ๋์ด์ผ ํ๋ ๋ถ๋ถ์ด ์ฌ๋ฌ ๊ตฐ๋ฐ์ ํฉ์ด์ ธ ์์ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ธฐ(Jointpoint)๊ฐ ๋์์ ๊ฒฝ์ฐ ๋๋นํด ์ฌ๋ฌ ์ฌ์ฉ์๊ธฐ(Jointpoint)๋ฅผ ์ ๊ท ํํ์์ธ ํฌ์ธํธ์ปท(Pointcut)์ผ๋ก ๋ง๋ค์ด ๊ฐ ๊ฐ์ ๋์ ํด๋์ค์ ์๋ ์ฝ๋๋ฅผ ์ฐ๊ฒฐํ์ฌ ํ๋์ ๊ฐ์ฒด๋ก ๋ง๋๋๋ฐ ์ด๋ฅผ ์๋น(Weaving)์ด๋ผ ํ๊ณ , ์๋น(Weaving) ๋ ๊ฒ์ ๋์๋๋๋ก ํฉ๋๋ค. ์ด ๋ ์๋น(Weaving)๋ ๋์์ ์ด๋๋ฐ์ด์ค(Advice)๋ผ๊ณ ํฉ๋๋ค.
- Aspects : ๋ณดํต AspectJ์ ์ํ ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์๋ฏธํ๋ฉฐ, Spring AOP๋ ๊ณตํต์ ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ๋จํ ๊ตฌํํ๊ณ , Spring Container์ ์ํด ๊ด๋ฆฌ๋๋ Bean์๋ง ์ ์ฉํ์ง๋ง, Aspects๋ Spring AOP๋ณด๋ค ๊ฐ๋ ฅํ๊ณ , ์์ ์ฒด๋ฅผ ๋ณ๋๋ก ๊ตฌ์ฑํ์ฌ ์งํํ๊ธฐ ๋๋ฌธ์ ๋ง์ด ๋ณต์กํด์ง๋๋ค.
- Instrumentation : ๋น์ ์๋ช ์ฃผ๊ธฐ์ ์ค์ ๊ทธ๋ฆฌ๊ณ ์ฒ๋ฆฌ๋ฐฉ๋ฒ์ ๊ด๋ฆฌํ๋ ์คํ๋ง ์ปจํ ์ด๋์ ๋๋ค.
- Messaging : ์์คํ ์ ๊ตฌ์ฑ ์์ ๊ฐ์ ๋ฉ์์ง์ ์ง์ํ๊ณ ๊ด๋ฆฌํ๋ ์์์ ๋๋ค.
## 01-05. Spring Framework ์ ๊ฐ๋ฐํ๊ฒฝ ์ค์
### 1) Open JDK ์ค์น
https://www.azul.com/downloads/?package=jdk#zulu
์ ์ฌ์ดํธ์ ์ ์ํ์ฌ Open JDK 17 ๋ฒ์ ์ Windows
x86 64-bit์ฉ์ผ๋ก ๋ค์ด๋ก๋ ๋ฐ์ ํ ์ค์นํฉ๋๋ค.![OpenJDK 17 ์ค์น](./capture/setting00_01.png)
### 2) ์ธํ ๋ฆฌ์ ์ด ์ค์น
https://www.jetbrains.com/ko-kr/idea/download/?section=windows
์ ์ฌ์ดํธ์ ์ ์ํ์ฌ ์ธํ ๋ฆฌ ์ ์ด๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์ ์ค์นํฉ๋๋ค.
![์ธํ ๋ฆฌ์ ์ด ์ค์น](./capture/setting00_02.png)
### 3) ์ธํ ๋ฆฌ์ ์ด ํ๋ก์ ํธ ์์ฑ
#### 3-1) ์๋ก์ด ํ๋ก์ ํธ ์์ฑ
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์์ฑ](./capture/setting01.png)
#### 3-2) ์๋ก์ด ํ๋ก์ ํธ ์ค์
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์์ฑ ๋ฐ ์ค์ ](./capture/setting02.png)
#### 3-3) ์๋ก์ด ํ๋ก์ ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ก๋ฉ ์ค์
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์์ฑ](./capture/setting03.png)
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์ค์ ](./capture/setting04.png)
#### 3-4) D:\kim\springStudy\study1\pom.xml ๊ธฐ๋ณธ ์ค์
```xml
4.0.0
kr.co.study
study
war
1.0-SNAPSHOT
study Maven Webapp
http://maven.apache.org
17
5.3.20
1.9.0
2.0.0
org.springframework
spring-context
${org.springframework-version}
commons-logging
commons-logging
org.springframework
spring-webmvc
${org.springframework-version}
org.aspectj
aspectjrt
1.9.0
study1
maven-eclipse-plugin
2.9
org.springframework.ide.eclipse.core.springnature
org.springframework.ide.eclipse.core.springbuilder
true
true
org.apache.maven.plugins
maven-compiler-plugin
2.5.1
17
17
-Xlint:all
true
true
org.codehaus.mojo
exec-maven-plugin
1.2.1
org.test.int1.Main
```
#### 3-5) ํฐ์บฃ ์๋ฒ ๋ค์ด๋ก๋
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์ค์ ](./capture/setting05.png)
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์ค์ ](./capture/setting06.png)
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์ค์ ](./capture/setting07.png)
#### 3-5) ํฐ์บฃ ์๋ฒ ์ค์ ๋ฐ ์คํ
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์ค์ ](./capture/setting08.png)
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์ค์ ](./capture/setting08_1.png)
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์ค์ ](./capture/setting08_2.png)
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์ค์ ](./capture/setting08_3.png)
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์ค์ ](./capture/setting08_4.png)
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์ค์ ](./capture/setting08_5.png)
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์ค์ ](./capture/setting08_6.png)
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์ค์ ](./capture/setting08_7.png)
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์ค์ ](./capture/setting08_8.png)
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์ค์ ](./capture/setting08_9.png)
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์ค์ ](./capture/setting08_10.png)
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์ค์ ](./capture/setting08_11.png)
![์ธํ ๋ฆฌ์ ์ด ์๋ก์ด ํ๋ก์ ํธ ์ค์ ](./capture/setting08_12.png)
# 02. Spring Framework ์ค์
## 02-1. ์์กด์ฑ ์ค์
D:\kim\springStudy\study2\pom.xml ์ค์
```xml
4.0.0
org.study2
study2
war
1.0-SNAPSHOT
study2 Maven Webapp
http://maven.apache.org
17
5.3.20
2.0.0
org.springframework
spring-context
${org.springframework-version}
commons-logging
commons-logging
org.springframework
spring-webmvc
${org.springframework-version}
org.aspectj
aspectjrt
1.9.0
org.slf4j
slf4j-api
${org.slf4j-version}
org.slf4j
jcl-over-slf4j
${org.slf4j-version}
runtime
org.slf4j
slf4j-log4j12
${org.slf4j-version}
runtime
log4j
log4j
1.2.15
javax.mail
javax.jms
jms
com.sun.jdmk
jmxtools
com.sun.jmx
jmxri
runtime
javax.inject
javax.inject
1
javax.servlet
servlet-api
2.5
provided
javax.servlet.jsp
jsp-api
2.1
provided
javax.servlet
jstl
1.2
junit
junit
4.13
test
org.springframework
spring-test
${org.springframework-version}
org.apache.maven.plugins
maven-archetype-plugin
3.2.1
org.projectlombok
lombok
1.18.22
org.bgee.log4jdbc-log4j2
log4jdbc-log4j2
1.16
org.springframework
spring-jdbc
${org.springframework-version}
commons-dbcp
commons-dbcp
1.4
org.mariadb.jdbc
mariadb-java-client
3.1.4
org.springframework
spring-tx
${org.springframework-version}
org.mybatis
mybatis
3.4.0
org.mybatis
mybatis-spring
1.3.2
com.google.code.gson
gson
2.7
org.jsoup
jsoup
1.12.1
org.json
json
20200518
org.apache.clerezza.ext
org.json.simple
0.4
com.fasterxml.jackson.core
jackson-databind
2.9.4
org.codehaus.jackson
jackson-mapper-asl
1.9.13
org.springframework.security
spring-security-core
5.4.0
org.springframework.security
spring-security-web
5.4.0
org.springframework.security
spring-security-config
5.4.0
commons-fileupload
commons-fileupload
1.3.2
commons-io
commons-io
2.4
org.imgscalr
imgscalr-lib
4.0
javax.mail
javax.mail-api
1.4.7
org.springframework
spring-context-support
${org.springframework-version}
javax.validation
validation-api
2.0.1.Final
org.hibernate
hibernate-annotations
3.5.6-Final
org.hibernate.validator
hibernate-validator
6.0.8.Final
javax.xml.bind
jaxb-api
2.3.0
org.junit.jupiter
junit-jupiter
RELEASE
compile
javax.annotation
javax.annotation-api
1.3.2
com.ibm.icu
icu4j
4.0.1
study2
maven-eclipse-plugin
2.9
org.springframework.ide.eclipse.core.springnature
org.springframework.ide.eclipse.core.springbuilder
true
true
org.apache.maven.plugins
maven-compiler-plugin
2.5.1
17
17
-Xlint:all
true
true
org.codehaus.mojo
exec-maven-plugin
1.2.1
org.test.int1.Main
```
## 02-2. ์น ์ค์
D:\kim\springStudy\study2\src\main\webapp\WEB-INF\web.xml ์ ์ค์
```xml
Study2 Web Application
contextConfigLocation
/WEB-INF/applicationContext.xml
org.springframework.web.context.ContextLoaderListener
appServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/dispatcher-servlet.xml
/WEB-INF/spring-security.xml
1
appServlet
/
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
encodingFilter
/*
```
## 02-3. ์ ํ๋ฆฌ์ผ์ด์ ๋น ๋ฑ๋ก ๋ฐ ์ค์
D:\kim\springStudy\study2\src\main\webapp\WEB-INF\applicationContext.xml
### 1) applicationContext.xml ์์ฑ
- D:\kim\springStudy\study2\src\main\webapp\WEB-INF ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[File] ์ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ applicationContext.xml์ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
![applicationContext.xml ํ์ผ ์ถ๊ฐ](./capture/setting09.png)
![applicationContext.xml ํ์ผ ์ถ๊ฐ](./capture/setting09_1.png)
### 2) applicationContext.xml ์์ฑ
```xml
```
## 02-4. ๋งตํผ ๋ฑ๋ก ๋ฐ ์ค์
### 1) mybatis-config.xml ํ์ผ ์์ฑ
D:\kim\springStudy\study2\src\main\resources ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[File] ์ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ mybatis-config.xml์ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
![mybatis-config.xml ํ์ผ ์ถ๊ฐ](./capture/setting09_2.png)
![mybatis-config.xml ํ์ผ ์์ฑ](./capture/setting09_3.png)
### 2) mybatis-config.xml ํ์ผ ์์ฑ
```xml
```
### 3) mappers ๋๋ ํ ๋ฆฌ ์์ฑ ๋ฐ ํ์ผ ์์ฑ
- D:\kim\springStudy\study2\src\main\resources ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[Directory] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ mappers์ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
![mappers ๋๋ ํ ๋ฆฌ ์์ฑ](./capture/setting09_4.png)
![mappers ๋๋ ํ ๋ฆฌ ์์ฑ](./capture/setting09_5.png)
- D:\kim\springStudy\study2\src\main\resources\mappers ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[File] ์ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ testMapper.xml์ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
![testMapper.xml ํ์ผ ์์ฑ](./capture/setting09_51.png)
![testMapper.xml ํ์ผ ์์ฑ](./capture/setting09_6.png)
```xml
select * from test
```
## 02-5. ์๋ธ๋ฆฟ ๋ฑ๋ก ๋ฐ ์ค์
### 1) ์๋ธ๋ฆฟ ๋์คํจ์ฒ ์์ฑ - dispatcher-servlet.xml ์์ฑ
- D:\kim\springStudy\study2\src\main\webapp\WEB-INF ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[File] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ dispatcher-servlet.xml์ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
![dispatcher-servlet.xml ํ์ผ ์์ฑ](./capture/setting10.png)
![dispatcher-servlet.xml ํ์ผ ์์ฑ](./capture/setting10_1.png)
```xml
```
### 2) ์๋ธ๋ฆฟ ํผ์คํจ์ฒ์์ ์ค์ ํ ์ ๊ทผ ์์์ ๋ํ ๋๋ ํ ๋ฆฌ ์์ฑ
- 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 ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
![dispatcher-servlet.xml ํ์ผ ์์ฑ](./capture/setting10_2.png)
## 02-6. ๋ก๊ทธ ์ถ๋ ฅ ๋ฐ ๋ฐฑ์ ์ค์
### 1) log4j.xml ์์ฑ ๋ฐ ์์ฑ
- D:\kim\springStudy\study2\src\main\resources ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[File] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ log4j.xml์ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
![log4j.xml ์์ฑ](./capture/setting11.png)
![log4j.xml ์์ฑ](./capture/setting11_1.png)
```xml
```
### 2) ๊ด๋ จ ํจํค์ง ์์ฑ
- D:\kim\springStudy\study2\src\main ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[Directory] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ java๋ฅผ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
- D:\kim\springStudy\study2\src\main\java ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[Package] ๋ฅผ ์ ํํ์ฌ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด log4j.xml์์ ์ง์ ํ ํจํค์ง๋ฅผ ์์ฑํฉ๋๋ค.
![๊ด๋ จ ํจํค์ง ์์ฑ](./capture/setting11_2.png)
### 3) ๋ก๊ทธ ๋ฐฑ์ ํ์ผ ์์ฑ - logback.xml ์์ฑ
- D:\kim\springStudy\study2\src\main\resources ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[File] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ logback.xml์ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
![logback.xml ์์ฑ](./capture/setting12.png)
![logback.xml ์์ฑ](./capture/setting12_1.png)
```xml
%d{HH:mm:ss.SSS} [%thread] %-4level [%logger.%method:%line]-
%msg%n
/WEB-INF/logback.log
logback.%d{yyyy-MM-dd}.log
30
%d{yyyy-MM-dd HH:mm:ss.SSS} %-4level [%logger.%method:%line]
- %msg %n
```
### 4) ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ก๊ทธ ํ์ผ ์์ฑ - log4jdbc.log4j2.properties ์์ฑ
- D:\kim\springStudy\study2\src\main\resources ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[File] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ log4jdbc.log4j2.properties๋ฅผ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
![log4jdbc.log4j2.properties ์์ฑ](./capture/setting13.png)
![log4jdbc.log4j2.properties ์์ฑ](./capture/setting13_1.png)
```properties
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
```
## 02-7. ์ํธํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐ๊ฒฐ - spring-security.xml ํ์ผ ์์ฑ
- D:\kim\springStudy\study2\src\main\webapp\WEB-INF ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[File] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ spring-security.xml์ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
![spring-security.xml ํ์ผ ์์ฑ](./capture/setting14.png)
![spring-security.xml ํ์ผ ์์ฑ](./capture/setting14_1.png)
## 02-8. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์
- ๋ง๋ฆฌ์DB ์ GUI ๋๊ตฌ์ธ HeidiSQL์ ์คํํ๊ณ , ์ ์ํ ํ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํ๊ณ , ํ ์คํธ์ฉ ํ ์ด๋ธ์ ์์ฑํ ํ ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
```sql
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;
```
## 02-9. ๋๋ฉ์ธ(dto) ์์ฑ
- D:\kim\springStudy\study2\src\main\java\kr\ed\haebeop\domain ํจํค์ง ๋๋ ํ ๋ฆฌ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฅด๊ณ ๋์ค๋ ๋ฉ๋ด์์ [New]-[Java Class] ๋ฅผ ์ ํํ๊ณ , ์ ๋ ฅ ๋์ Test๋ฅผ ์ ๋ ฅํ๊ณ , Enter๋ฅผ ์นฉ๋๋ค.
![Test ํด๋์ค ์์ฑ](./capture/setting15.png)
![Test ํด๋์ค ์์ฑ](./capture/setting15_1.png)
```java
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;
}
```
# 03. Spring Framework MVC ํจํด ๊ตฌํ๊ณผ DI ๋ฐ IoC ๊ตฌํ
## 03-1. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ ๋ง๋ค๊ธฐ
### 1) ๋ง๋ฆฌ์DB ๋ค์ด๋ก๋ ๋ฐ ์ค์น
https://mariadb.org/download/?t=mariadb&p=mariadb&r=11.0.3&os=windows&cpu=x86_64&pkg=msi&m=blendbyte![๋ง๋ฆฌ์DB ๋ค์ด๋ก๋](./capture/spring030102.png)
### 2) HeidiSQL ๋ค์ด๋ก๋ ๋ฐ ์ค์น
https://www.heidisql.com/download.php![Test ํด๋์ค ์์ฑ](./capture/spring030101.png)
## 03-2. Spring Framework MVC Domain ์์ฑ
### 1) domain ํจํค์ง ์์ฑ
### 2) TestVO.java (ํด๋์ค) ์์ฑ
```java
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;
}
```
## 03-3. Spring Framework MVC Mapper ์์ฑ
### 1) testMapper.xml์ ์๋ก์ด ๋ฌธ์ฅ ๋ฑ๋ก
## 03-4. Spring Framework MVC Repository ๊ตฌํ
### 1) repository ํจํค์ง ์์ฑ
### 2) TestRepository.java (์ธํฐํ์ด์ค) ์ถ์์ฒด ์์ฑ
```java
package kr.ed.haebeop.repository;import kr.ed.haebeop.domain.TestVO;
import java.util.List;
public interface TestRepository {
public List testList() throws Exception;
}
```### 3) TestRepositoryImpl.java (ํด๋์ค) ๊ตฌํ์ฒด ์์ฑ
```java
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 testList() throws Exception {
return sqlSession.selectList("test.testList");
}
}
```
## 03-5. Spring Framework MVC Service ๊ตฌํ
### 1) service ํจํค์ง ์์ฑ
### 2) TestService.java (์ธํฐํ์ด์ค) ์ถ์์ฒด ์์ฑ
```java
package kr.ed.haebeop.service;
import kr.ed.haebeop.domain.TestVO;
import java.util.List;public interface TestService {
public List testList() throws Exception;
}
```### 3) TestServiceImpl.java (ํด๋์ค) ๊ตฌํ์ฒด ์์ฑ
```java
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 testList() throws Exception {
return testRepository2.testList();
}
}
```
## 03-6. Spring Framework MVC Bean ์ค์ ๋ฐ ์ถ๊ฐ
### 1) ApplicationConfig.java์ TestVO์ ๋ํ Repository ๋ฐ Service ๋น(Bean) ์ฃผ์
```java
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(); }
}
```
## 03-7. Spring Framework MVC View(jsp) ๊ตฌํ
### 1) testLisp.jsp ์์ฑ
```jsp
<%@ 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"%>
Title
${test.num}
${test.title}
```
## 03-8. applicationContext.xml์ Bean์ ๋ฑ๋กํ๊ณ , ์ฃผ์ ๋ฐ ๊ตฌํํ๊ธฐ
```xml
... ์ค๋ต ...
... ์ค๋ต ...
```
## 03-9. ๋ณ๋์ GenericXmlApplicationContext.xml์ Bean์ ๋ฑ๋กํ๊ณ , ์ฃผ์ ๋ฐ ๊ตฌํํ๊ธฐ
## 03-10. @Configuration ์ด๋ ธํ ์ด์ ์ ํ์ฉํ ์๋ฐ Confirurer๋ฅผ ํ์ฉํ์ฌ ์ฃผ์ ๋ฐ ๊ตฌํํ๊ธฐ
## 03-11. ์ฃผ์ ๊ณผ ๊ด๋ จํ ์ด๋ ธํ ์ด์
# 04. Spring Framework ์ AOP(๊ด์ ์งํฅํ) ๊ตฌํ
## 04-1. Spring Framework ์์์ ๊ด์ ์งํฅํ์ ๊ตฌํํ๊ธฐ ์ํ ์๋ฐ ๋์์ธ ํจํด
## 04-2. Spring Framework AOP๋ฅผ ํ์ฉํ ๊ด์ ์งํฅํ ๊ตฌํ
## 04-3. ํธ๋์ญ์ ๊ณ ๋ฆฝ์ฑ ๋ ๋ฒจ์ Sql ์ค์ต
## 04-4. Service ๋ฐ Repository์์ ํธ๋์ญ์ ์ ๊ตฌํ ์ค์ต
# 05. json๊ณผ Api
## 05-1. ๋ฐ์ดํฐ ์ฃผ๊ณ ๋ฐ๋ ์ฌ๋ฌ ์ด๋ ธํ ์ด์
## 05-2. ํผ ๋ฐ์ดํฐ ๊ฒ์ฆ
## 05-3. json ๊ตฌํ
## 05-4. ajax ๊ตฌํ
## 05-5. api ๊ตฌํ
# 06. Spring Security ์ํธํ
# 07. ์ธํฐ์ ํฐ์ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ
# 08. Multipart์ FileUpload ๊ธฐ๋ฅ ๊ตฌํ
# 09. ์ฌ๋ฌ ๋ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ