Spring
JAVA ํ๋ซํผ์ ์ํ ์คํ์์ค ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ
- POJO (Plain Old Java Object) ๋ฐฉ์
- ํน์ '๊ธฐ์ '์ ์ข ์๋์ด ๋์ํ๋ ๊ฒ์ด ์๋ ์์ํ ์๋ฐ ๊ฐ์ฒด
- ๊ธฐ์ ๊ณผ ํ๊ฒฝ์ ์ข ์๋์ด ์์กดํ๊ฒ ๋ ์๋ฐ ์ฝ๋๋ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ ธ ์ ์ง๋ณด์์ ์ด๋ ค์์ด ์๊ธด๋ค.
- IoC ์ง์
- ์ปจํธ๋กค์ ์ ์ด๊ถ์ด ์ฌ์ฉ์๊ฐ ์๋๋ผ ํ๋ ์์ํฌ์ ์๋ค.
- ๊ฐ์ฒด์ ์์ฑ๋ถํฐ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ๋ฅผ ์ปจํ ์ด๋๊ฐ ํ๋ค.
- @Autowired
- DI ์ง์
- ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ์ง ์๊ณ ์ธ๋ถ์์ ์์ฑ ํ ์ฃผ์ ํ๋ค.
- ๋ชจ๋๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๊ณ ์ ์ฐ์ฑ์ด ๋์์ง๋ค.
- ๊ณ์ธต์ด๋ ์๋น์ค๋ค๊ฐ์ ์์กด์ฑ์ด ์กด์ฌํ ๊ฒฝ์ฐ ํ๋ ์์ํฌ๊ฐ ์๋ก ์ฐ๊ฒฐ์์ผ์ค๋ค.
- AOP ์ง์
- ๋ก์ง์ ๊ธฐ์ค์ผ๋ก ํต์ฌ ๊ด์ , ๋ถ๊ฐ ๊ด์ ์ผ๋ก ๋๋๊ณ ๊ทธ ๊ด์ ์ ๊ธฐ์ค์ผ๋ก ๊ฐ๊ฐ ๋ชจ๋ํํ๋ค.
- ์ฌ๋ฌ ๋ชจ๋์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ๊ฒฝ์ฐ ๋ถ๋ฆฌํด์ ๊ด๋ฆฌํ ์ ์๋ค.
- @Aspect , @Component
- ์ฌ๋ฌ ์ธํฐํ์ด์ค ์ ๊ณต
- ex) Hibernate , iBatis
์ฅ์
- ๋ณต์กํ ์ฝ๋ ๊ฐ์
- ๋์ ํ์ฅ์ฑ
- ์ ์ฐํ ์ํคํ ์ฒ
- ๋จ์ ํ ์คํ ์ ๋จ์ํ
Spring Boot
์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ๋์ ํ์ํ ์ด๊ธฐ ์ค์ ์ ๊ฐํธํ๊ฒ ํด์ฃผ๋ ํ๋ ์์ํฌ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ ์๋ํ
- ์ค์ ์๋ํ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์๋ ๊ด๋ฆฌ
- ๋ด์ฅ Tomcat
- JAR
Spring Container
์คํ๋ง์์ ์ฌ์ฉํ ๊ฐ์ฒด๋ค์ ๋ด๊ณ ์๋ ๊ฒ
=ApplicationContext
- ์คํ๋ง ๋น์ ์์ฑํ๋ค
- ์์กด๊ด๊ณ๋ฅผ ์ฃผ์ ํ๋ค.
- ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ค.
- ๋ฉ์๋์ @Bean์ ํตํด ๋น์ผ๋ก ๋ฑ๋กํ ์ ์๋ค.
- ๋ฑ๋ก๋ ๋น์ ์ฑ๊ธํด ํจํด์ผ๋ก ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ค.
Spring Bean
์คํ๋ง ์ปจํ ์ด๋์ ์ํด ๊ด๋ฆฌ๋๋ ์๋ฐ ๊ฐ์ฒด(POJO)
๋ฑ๋ก ๋ฐฉ๋ฒ
- @Component ์ปดํฌ๋ํธ ์ค์บ
- Java ์ฝ๋๋ก ๋ฑ๋ก
(ํด๋์ค๋ฅผ ์์ฑํ๊ณ , @Configuration ์ด๋ ธํ ์ด์ ์ ํ์ฉ)
@Bean
- ๊ฐ๋ฐ์๊ฐ ์ปจํธ๋กค์ด ๋ถ๊ฐ๋ฅํ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ Bean์ผ๋ก ๋ฑ๋กํ๊ณ ์ถ์ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ค.
- ๋ฉ์๋ ๋๋ ์ด๋ ธํ ์ด์ ๋จ์์ ๋ถ์ผ ์ ์๋ค.
@Component
- ๊ฐ๋ฐ์๊ฐ ์ง์ ์ปจํธ๋กค์ด ๊ฐ๋ฅํ ํด๋์ค๋ค์ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ค.
- ํด๋์ค ๋๋ ์ธํฐํ์ด์ค ๋จ์์ ๋ถ์ผ ์ ์๋ค.
Bean์ ๋ผ์ดํ ์ฌ์ดํด
์คํ๋ง IoC ์ปจํ ์ด๋ ์์ฑ → ์คํ๋ง ๋น ์์ฑ → ์์กด๊ด๊ณ ์ฃผ์ → ์ด๊ธฐํ ์ฝ๋ฐฑ ๋ฉ์๋ ํธ์ถ
→ ์ฌ์ฉ → ์๋ฉธ ์ ์ฝ๋ฐฑ ๋ฉ์๋ ํธ์ถ → ์คํ๋ง ์ข ๋ฃ
Servlet
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ์๋ฐ ์น ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์
- MVC์์ Controller๋ก ์ด์ฉ๋๋ค.
Servlet Container
- ex) Tomcat
- ์น์๋ฒ์ ํต์ ํ๊ธฐ ์ํด ์น์์ผ์ ํน์ ํฌํธ์ ์์ฑํ๋ ๋ณต์กํ ์ผ์ ์ ํด๋ ๋๊ฒ ํ๋ค.
Dispatcher Servlet
- ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ฅผ ํตํด ๋ฐ๋ ๋ชจ๋ ์์ฒญ์ ์ ์ผ ์์์ ๋ฐ๋ Controller
- ๊ณตํต ์์ ์ ์ฒ๋ฆฌํ ํ , ์ธ๋ถ ์ปจํธ๋กค๋ฌ๋ก ๋๊ธด๋ค.
- ์ธ๋ถ ์ปจํธ๋กค๋ฌ๋ ์ฒ๋ฆฌํ ๋ถ๋ถ์ ์ฒ๋ฆฌํ๊ณ view๋ฅผ Dispatcher Servlet์ ๋๊ธด๋ค.
Spring MVC
์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ํ MVC ๊ธฐ๋ฐ์ ์น ํ๋ ์์ํฌ
Model, View, Controller๋ก ๋ถ๋ฆฌ
๊ตฌ์ฑ
- Dispatcher Servlet
- Handler Mapping
- Controller
- ViewResolver
- View
์ฅ์
- DI๋ฅผ ํตํด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์์ด ๋จ์ ํ ์คํธ์ ์ฉ์ดํ๋ค.
- IoC๋ฅผ ํตํด Bean์ ๋ผ์ดํ์ฌ์ดํด์ ๊ด์ฌํ์ง ์๊ณ ๊ฐ๋ฐํ๋ค.
๋จ์
- XML ๊ธฐ๋ฐ์ ๋ง์ ์๊ฐ์ด ๋ ๋ค.
- WAS๋ฅผ ๋ณ๋๋ก ์ค์นํด ์ฃผ์ด์ผ ํ๋ค.
DAO / DTO
DAO : DB์ ์ ๊ทผํ์ฌ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ํด๋์ค ex) Repository , Mapper
DTO : ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํด๋์ค
VO : ์ค์ ๋ฐ์ดํฐ๋ง์ ์ ์ฅํ๋ ํด๋์ค
Singleton Pattern
1๊ฐ์ ํด๋์ค๋น 1๊ฐ์ ๊ฐ์ฒด๋ง์ ์์ฑํจ์ ๋ณด์ฅํ๋ ํจํด
Spring์์๋ Bean์ ์ฑ๊ธํคํจํด์ผ๋ก ๊ตฌํ
ํน์ง
- ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๋ฒ ์์ฑํ์ง ์๊ธฐ ๋๋ฌธ์ ๋น์ฉ์ด ์ ๋ค.
- ํ๋ฒ ๋ง๋ค์ด์ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉ๋๋ฉด ์์ ์ด ํ๋ค๋ค.
- test๊ฐ ์ด๋ ต๋ค.
SQL Mapper vs ORM
๊ฐ๋ฐ์๊ฐ ์ง์ JDBC Programming์ ํ์ง ์๋๋ก ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํด์ฃผ๋ Persistence Framework ์ข ๋ฅ
SQL Mapper
- Object์ SQL์ ํ๋๋ฅผ ๋งคํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒดํํ๋ ๊ธฐ์
- SQL ์์กด์ ์ธ ๋ฐฉ๋ฒ
- ex) Mybatis
ORM
- ๊ฐ์ฒด(๊ฐ์ฒด์งํฅ)์ RDBMS์ ๋ฐ์ดํฐ(๊ด๊ณ์งํฅ)๋ฅผ ๋งคํํ๋ค
- DBMS์ ์ข ์์ ์ด์ง ์๋ค.
- ๊ฐ๋ฐ์๊ฐ ๋ฐ๋ณต์ ์ธ SQL์ ์ง์ ์์ฑํ ํ์๊ฐ ์๋ค.
- Java ORM ์ธํฐํ์ด์ค ํ์ค : JPA
- ex) Hibernate, EclipseLink
Spring Security
Spring ๊ธฐ๋ฐ์ ์ฑ ๋ณด์์ ๋ด๋นํ๋ ํ์ ํ๋ ์์ํฌ
ํน์ง
- '์ธ์ฆ'๊ณผ '๊ถํ'์ ๋ํ ๋ถ๋ถ์ Filter ํ๋ฆ์ ๋ฐ๋ผ ์ฒ๋ฆฌํ๋ค.
- ๊ฐ๋ฐ์ ์ ์ฅ์์๋ ์ผ์ผ์ด ๋ณด์๊ด๋ จ ๋ก์ง์ ์์ฑํ์ง ์์๋ ๋๋ค๋ ์ฅ์ ์ด ์๋ค.
์ธ์ฆ๊ณผ ์ธ๊ฐ
- ์ธ์ฆ(Authentication): ํด๋น ์ฌ์ฉ์๊ฐ ๋ณธ์ธ์ด ๋ง๋์ง๋ฅผ ํ์ธํ๋ ์ ์ฐจ
- ์ธ๊ฐ(Authorization): ์ธ์ฆ๋ ์ฌ์ฉ์๊ฐ ์์ฒญํ ์์์ ์ ๊ทผ ๊ฐ๋ฅํ์ง๋ฅผ ๊ฒฐ์ ํ๋ ์ ์ฐจ
Spring WebFlux
ํด๋ผ์ด์ธํธ, ์๋ฒ์์ reactive ์คํ์ผ์ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋์์ฃผ๋ Spring 5์์ ์๋กญ๊ฒ ์ถ๊ฐ๋ ๋ชจ๋
- Spring MVC์ ํ๊ณ์ ์ ๊ทน๋ณตํ๊ธฐ ์ํด ๋ฑ์ฅ
- ๊ธฐ์กด์ Spring MVC์์๋ HTTP ์์ฒญ๋ค์ ํ์ ๋ฃ์ด๋๊ณ , ๋ฉํฐ์ฐ๋ ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์
- ์๋ต์ฑ์ด ์๋์ ์ผ๋ก ๋จ์ด์ง
- ๋น๋๊ธฐ์ ์ผ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ฐฉ๋ฒ ํ์
- Java 8 lambda ๋๋ Kotlin๊ณผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฐ๋ณ๊ณ ๊ธฐ๋ฅ์ ์ธ ์น ํ๋ ์ ์ํฌ์ ์ ์ฉ
- ์ ํ๋ฆฌ์ผ์ด์ ์ด JPA, JDBC ๋๋ ๋คํธ์ํน API์ ์์กดํ๋ ๊ฒฝ์ฐ Spring MVC๊ฐ ์ต์ ์ ์ ํ
๋จ์ ํ ์คํธ
๊ฐ๋ฐ์๊ฐ ๊ฐ๋ฐํ ๋ชจ๋๋ค์ด ์ ์์ ์ผ๋ก ๋์ํ๊ณ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด๋ด๋์ง ํ์ธํ๋ ํ ์คํธ
Spring์๋ ๋ํ์ ์ผ๋ก Junit์ด ์๋ค.
ํน์ง
- ์์ฑ๋ ์ฝ๋๋ฅผ ์์ ๋จ์๋ค๋ก ๋๋ ๋ค ํ ์คํธ๊ฐ ํ์ํ ๋จ์๋ค๋ง ๋ฌถ์ด ํ ๋ฒ์ ํ ์คํธ๊ฐ ๊ฐ๋ฅ
- ๋ฌถ์ฌ์ง ๋จ์๋ค์ด ๋ฌธ์ ๊ฐ ์์ ์ ๋ ํฐ ๋จ์๋ก ๋ฌถ์ผ๋ฉฐ ํ ์คํธํ๋ ์ํฅ์ ํ ์คํธ๊ฐ ๊ฐ๋ฅ
- ์์ฑํด๋ ๋จ์ ํ ์คํธ๋ฅผ ํตํด ๋ฆฌํฉํ ๋ง ๋ ์ฝ๋์ ์ ๋ขฐ๋๋ฅผ ๋์
- ๊ฐ๋ฐ ์ฝ๋์ ํ ์คํธ ์ฝ๋๊ฐ ๋ถ๋ฆฌ๋์ด ์์ด ์ฝ๋ ๊ด๋ฆฌ๊ฐ ์ฉ์ด
- ํธ๋์ญ์ ์ฒ๋ฆฌ๊ฐ ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ ธ๋ ๋กค๋ฐฑ๋์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์๋์ง ์๋๋ก ์ค์ ๊ฐ๋ฅ
Spring ๊ธฐ์ ๋ฉด์ ์์ ์ง๋ฌธ
๐ก Spring Framework์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
๐ก Spring Boot์ Spring Framework์ ์ฐจ์ด์ ์ ์ค๋ช ํด์ฃผ์ธ์.
๐ก Spring MVC์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
๐ก MVC๋ ์ด๋ ํ ํ๋ฆ์ผ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ๋์ง ์ค๋ช ํด์ฃผ์ธ์.
๐ก ์ ์ด์ ์ญ์ (IoC)์ ๋ํด ์๋๋๋ก ์ค๋ช ํด์ฃผ์ธ์.
๐ก ์์กด์ฑ ์ฃผ์ (DI, Dependency Injection)์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
๐ก ์คํ๋ง์์ ๋น(Bean)์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋งํด๋ณด์ธ์.
๐ก ์คํ๋ง ๋น์ ๋ผ์ดํ์ฌ์ดํด์ ์ด๋ป๊ฒ ๊ด๋ฆฌ๋๋์ง ์ค๋ช ํด์ฃผ์ธ์.
๐ก Spring์ ์ฑ๊ธํค ํจํด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
๐ก VO์ BO, DAO, DTO์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
๐ก ์๋ธ๋ฆฟ(Servlet)์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
์ ์ ๊ฐ๋ฐ์ ๊ธฐ์ ๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ - ๋ฐฑ์๋
๐ก WAS(Web Application Server)์ WS(Web Servโer)์ ์ฐจ์ด๋ฅผ ์ค๋ช ํด์ฃผ์ธ์. WAS(Web Application Server) ๋น์ฆ๋์ค ๋ก์ง์ ๋ฃ์ ์ ์์ Tomcat, PHP, ASP, .NET ๋ฑ WS(Web Server) ๋น์ฆ๋์ค ๋ก์ง์ ๋ฃ์ ์ ์์ Nginx, Apache ๋ฑ
dev-coco.tistory.com
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring Webflux (0) | 2023.05.06 |
---|---|
Spring WebClient (0) | 2023.04.30 |