์ง๊ธ๊น์ง ๋ฌ๋ ค์ค๋ฉด์ ๊น์ํ๋์ ์คํ๋ง ๊ฐ์์ ํ๋ก๊ทธ๋๋จธ์ค ๋ฐ๋ธ์ฝ์ค์์ ์คํ๋ง์ ๋ง์ด ๋ค๋ค๋ดค๊ณ ์ฌ์ฉํด๋ณด์๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ "๊ธฐ๋ณธ์ด ์๋ค๋ฉด ๋ฏธ๋๋ฅผ ๊ตฌ์ถํ ์ ์๋ค"๋ ๋ง์ฒ๋ผ, ๊ธฐ๋ณธ๋ถํฐ ๋ค์ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ณต์ตํ๋ฉฐ ๋ฏธ๋๋ฅผ ์ํ ๊ธฐ์ด๋ฅผ ํํํ ๋ค์ ธ๋ณด๋ ค๊ณ ํ๋ค. ์์ธํ๊ฒ๋ ์ ๋ฆฌ๋ ์ํ ๊ฑฐ๊ณ ๊ฐ๋จํ๊ฒ ์ ๋ง๋ค! ์ด๋ฐ๊ฑฐ์์ง! ์ ๋๋ง ์ ์๋ ค๊ณ ํ๋ค.
์คํ๋ง์ ๋ํด ์๋ ค๋ฉด ์ผ๋จ ํ๋ ์์ํฌ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฐจ์ด๋ฅผ ์ ๋ฆฌํด์ผํ๋ค.
ํ๋ ์์ํฌ: ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ์ ํ๊ธฐ ์ํ ํ์ด๋ ๊ตฌ์กฐ๋ฅผ ์ ๊ณต๋ผ์ด๋ธ๋ฌ๋ฆฌ: ๋จ์ ํ์ฉ ๊ฐ๋ฅํ ๋๊ตฌ๋ค์ ์งํฉโ๏ธ ์ฐจ์ด์ ์ ๊ฐ๋จํ๊ฒ ์ค๋ช ํ๋ฉด ํ๋ฆ์ ๋๊ฐ ๊ฐ์ง๊ณ ์๋์ ๋ฌ๋ ค์๋ค.
ํ๋ ์์ํฌ ๋ ์ ์ฒด์ ์ธ ํ๋ฆ์ ์์ฒด์ ์ผ๋ก ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ ๊ทธ ์์์ ํ์ํ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
๋ฐ๋ฉด์, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฐ๋ฐ์๊ฐ ์ ์ฒด์ ์ธ ํ๋ฆ์ ๊ฐ์ง๊ณ ์์ด ์์ ์ด ์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์ ํ ๋, ๊ฐ์ ธ๋ค ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๊ฐ๋จํ๊ฒ ์๊ฐํ๋ฉด ํ๋ ์์ํฌ๋ ์ฃผ๋๊ถ์ด ํ๋ ์์ํฌ์๊ฒ ์๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฃผ๋๊ถ์ด ๊ฐ๋ฐ์ํํ ์๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์ฌ์ค ๊ฐ์ธ์ ์ผ๋ก ์ฌ์ฐ๋ฉด์๋ ์ค๋ช ํ๊ธฐ์๋ ์ด๋ ค์ด ๊ฐ๋ ์ด๋ผ๊ณ ์๊ฐํ๋ค. ์์กด์ฑ ์ฃผ์ ์ ์คํ๋ง์ ๋ค๋ฃฌ๋ค๋ฉด ์ด๋ ๊ฐ๋ ์ง ๋์ค๋ ๊ฐ๋ ์ด๋ค.
IoC (Inversion of Control)๋ฅผ ์ดํดํ๋ฉด DI๊ฐ ์ ํ์ํ์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ๋์ํ๋์ง ๋ ๋ช ํํ ์ ์ ์๋ค.
IoC๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์์กด์ฑ์ ์ค์ ํ๋ ์ฑ ์์ ๊ฐ๋ฐ์๊ฐ ์๋, ์ธ๋ถ ์ปจํ ์ด๋(์คํ๋ง ์ปจํ ์ด๋ ๋ฑ)์ ๋งก๊ธฐ๋ ๋ฐฉ์์ด๋ค.
DI๋ ๋ฐ๋ก ์ด IoC๋ฅผ ์ค์ ๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ ์ค ํ๋์ธ๋ฐ, ์์กด์ฑ์ ์ฃผ์ ๋ฐ๋ ๋ฐฉ์์๋ ์์ฑ์ ์ฃผ์ , ์ธํฐ(Setter) ์ฃผ์ , ํ๋ ์ฃผ์ ๋ฑ์ด ์๋ค. ์ด ์ค์์ ์คํ๋ง์์๋ ์์ฑ์ ์ฃผ์ ์ ์ ํธํ๋ ์ถ์ธ์ธ๋ฐ, ๊ทธ ์ด์ ๋ ์ฃผ์ ๋ ์์กด์ฑ์ด ๋ถ๋ณ์ฑ์ ๋ณด์ฅํ๊ณ , ๋ ๋ช ํํ๊ฒ ์์กด์ฑ์ ๊ด๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์๋ก ํ๋ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ถ์์ ๋ฐ๋๊ฒ
์์ฑ์ ์ฃผ์
public class YuhanService {
private final YuhanRepository yuhanRepository;
// ์์ฑ์ ์ฃผ์
public YuhanService(YuhanRepository yuhanRepository) {
this.yuhanRepository = yuhanRepository;
}
}
์ธํฐ(Setter) ์ฃผ์
public class YuhanService {
private YuhanRepository yuhanRepository;
// ์ธํฐ ์ฃผ์
public void setYuhanRepository(YuhanRepository yuhanRepository) {
this.yuhanRepository = yuhanRepository;
}
}
ํ๋ ์ฃผ์
public class YuhanService {
@Autowired
private YuhanRepository yuhanRepository;
}
๋กฌ๋ณต(Lombok)์ ์ฌ์ฉํ๋ค๋ฉด ์์ฑ์ ์ฃผ์ ์ ์ข ๋ ์ฝ๊ณ ๊ฐ๋ ์ฑ์๊ฒ ๊ด๋ฆฌ ๊ฐ๋ฅํ๋ค.
@RequiredArgsConstructor
public class YuhanService {
private final YuhanRepository yuhanRepository;
}
์คํ๋ง ์ปจํ ์ด๋(Spring Container) ๋ ์คํ๋ง์ ํต์ฌ ์ปดํฌ๋ํธ๋ค. ์๋ฐ ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ์์ฑ๋ ์๋ฐ ๊ฐ์ฒด๋ค์๊ฒ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ญํ ์ ํ๋ค.
๊ฐ๋จํ๊ฒ ๋งํ์๋ฉด ์คํ๋ง ์ปจํ ์ด๋๋ ๋น์ ์์ฑํ๊ณ ๊ด๋ฆฌ
์ฌ๊ธฐ์ ์คํ๋ง์์๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ ๋น(Bean) ์ด๋ผ๊ณ ํ๋ค.

์คํ๋ง ์ปจํ ์ด๋๋ BeanFactory , ApplicationContext ๋ ๊ฐ์ง ์ธํฐํ์ด์ค๋ก ๊ตฌํ๋์ด ์๋ค.
BeanFactory๋ ์คํ๋ง ์ปจํ ์ด๋์ ์ต์์ ์ธํฐํ์ด์ค๊ณ ๋น์ ๋ฑ๋ก, ์์ฑ, ์กฐํ ๋ฑ์ ๋น์ ๊ด๋ฆฌํ๋ ์ญํ ์ ํ๋ฉฐ, getBean() ๋ฉ์๋๋ฅผ ํตํด ๋น์ ์ธ์คํด์คํ ํ ์ ์๋ค. ํ์ง๋ง ApplicationContext๋ฅผ ์ง์ ์ฌ์ฉํ์ง BeanFactory๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๋ณ๋ก ์๋ค.
์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ(ApplicationContext)๋ BeanFactory์ ๊ธฐ๋ฅ์ ์์๋ฐ์ ์ ๊ณตํ๋ค.
๋ฐ๋ผ์, ๋น์ ๊ด๋ฆฌํ๊ณ ๊ฒ์ํ๋ ๊ธฐ๋ฅ์ BeanFactory๊ฐ ์ ๊ณตํ๊ณ , ๊ทธ ์ธ์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๐ค ๊ตณ์ด ์คํ๋ง ์ปจํ ์ด๋๊ฐ ํ์ํ ๊น? ๊ทธ๋ฅ new ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ทธ๋ฌ๋ฉด ์๋๋?
- ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ new ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด ๊ฐ ์์กด์ฑ์ด ๋์์ง๊ณ , ์ด๋ ๋ฎ์ ๊ฒฐํฉ๋์ ๋์ ์บก์ํ๋ฅผ ์ถ๊ตฌํ๋ ๊ฐ์ฒด์งํฅ์ ์์น์ ๋ง์ง ์๋๋ค. ์คํ๋ง ์ปจํ ์ด๋๋ ๊ฐ์ฒด ๊ฐ ์์กด์ฑ์ ๋ฎ์ถ๊ณ , ๋์จํ ๊ฒฐํฉ์ ํตํด ์บก์ํ๋ฅผ ๊ฐํํ๋ค. ๋ํ, ๊ธฐ์กด ๋ฐฉ์์์๋ ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ ์ ์์์ ์ผ๋ก ์์ ํด์ผ ํ์ง๋ง, ์คํ๋ง ์ปจํ ์ด๋๋ ์์กด์ฑ์ ์ธํฐํ์ด์ค์๋ง ์์กดํ๋๋ก ์ค๊ณํ์ฌ ์ฝ๋ ๋ณ๊ฒฝ์ ์ต์ํํ ์ ์๋ค.
์คํ๋ง์ ๋น ์์ฑ์ ๋ํดํธ๋ก ์ฑ๊ธํค
์ปจํ
์ด๋๋ฅผ ํตํด ์ง์ ์ฑ๊ธํค ๊ฐ์ฒด ์์ฑ ๊ด๋ฆฌ
์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ๋งค๋ฒ ๊ฐ์ฒด ์์ฑ X -> ์ด๋ฏธ ๋ง๋ ๊ฐ์ฒด ์ฌ์ฉ ํจ์จ์ฑ ์ฆ๊ฐ
@Component, @Service, @Repository, @Controller ๋ฑ์ ์ด๋
ธํ
์ด์
์ผ๋ก ํ์์คํ๋ง ์ปจํ ์ด๋๊ฐ ์์ฑํ ๊ฐ์ฒด
์คํ๋ง ์ปจํ ์ด๋ ์์ฑ -> Bean ์์ฑ -> ์์กด์ฑ ์ฃผ์ -> ์ด๊ธฐํ ์ฝ๋ฐฑ -> Bean ์ฌ์ฉ -> ์๋ฉธ ์ ์ฝ๋ฐฑ -> ์คํ๋ง ์ข ๋ฃ
์คํ๋ง๋ถํธ๋ ์คํ๋ง์ ๋ณด๋ค ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํด์ฃผ๋ ํ์ฅํ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์คํ๋ง ํ๋ ์์ํฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์น ์๋ฒ(ํฐ์บฃ)๋ฅผ ๋ด์ฅํ์ง ์์ง๋ง ์คํ๋ง๋ถํธ (Spring Boot) ๋ด์ฅ ํฐ์บฃ์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ์ฌ, ๋ณ๋์ ์ธ๋ถ ์๋ฒ ์ค์ ์์ด ๋ฐ๋ก ์คํ ๊ฐ๋ฅํ๋ค.
์คํ๋ง ํ๋ ์์ํฌ๋ ์์กด์ฑ์ ์ถ๊ฐํ๊ธฐ ์ํด์๋ ๊ต์ฅํ ๋ณต์กํ๋ค. ๋ฐ์๋ฅผ ๋ณด๋ฉด ํ์คํ ์ฐจ์ด๊ฐ ๋๊ปด์ง ๊ฒ์ด๋ค. ๋ํ configuration ์ค์ ๋ ์คํ๋ง๋ถํธ๋ AutoConfiguration ์ ์ ๊ณตํ๋ฏ๋ก ๋ ํธ๋ฆฌํ๋ค.
์คํ๋ง
<dependencies>
<!-- Spring Web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
</dependency>
<!-- Spring Data JPA -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>2.5.4</version>
</dependency>
</dependencies>
์คํ๋ง๋ถํธ(Gradle)
dependencies {
// Spring Boot Web
implementation 'org.springframework.boot:spring-boot-starter-web'
// Spring Boot Data JPA
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
HTTP ํ๋กํ ์ฝ๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ๊ฐ์ฅ ๋จผ์ ๋ฐ์ ์ ํฉํ ์ปจํธ๋กค๋ฌ์ ์์ํด์ฃผ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ(Front Controller)


ํด๋ผ์ด์ธํธ ์์ฒญ ์์
ํด๋ผ์ด์ธํธ๊ฐ ์น ์์ฒญ(HttpServletRequest)์ ํตํด ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๊ทผํ๋ฉด, ์ด ์์ฒญ์ด DispatcherServlet์ผ๋ก ์ ๋ฌ
HandlerMapping์ ํตํ Controller ๋งคํ
DispatcherServlet์ ์์ฒญ URL๊ณผ ๊ธฐํ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก, ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์ ํ Controller(Handler)๋ฅผ ์ฐพ๊ธฐ ์ํด HandlerMapping์ ์์ฒญ์ ์์
HandlerAdapter ์ ํ
์ฐพ์ Controller๋ฅผ ์คํํ ์ ์๋๋ก, DispatcherServlet์ ํด๋น Controller๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ HandlerAdapter๋ฅผ ๊ฒฐ์
๋น์ฆ๋์ค ๋ก์ง ์คํ ์์ฒญ
DispatcherServlet์ ์ ํ๋ HandlerAdapter์๊ฒ Controller์ ๋น์ฆ๋์ค ๋ก์ง์ ์คํํ๋๋ก ์์ฒญ
Controller ์คํ ๋ฐ ๊ฒฐ๊ณผ ๋ฐํ
HandlerAdapter๋ Controller์ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์ํController๋ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ Model ๊ฐ์ฒด์ ๋ด๊ณ , ์ด๋ค View๋ฅผ ์ฌ์ฉํ ์ง ๋
ผ๋ฆฌ์ ์ธ ์ด๋ฆ์ ํจ๊ป ๋ฐํ
ViewResolver๋ฅผ ํตํ View ๊ฒฐ์
DispatcherServlet์ ๋ฐํ๋ฐ์ View ์ด๋ฆ์ ๊ธฐ๋ฐ์ผ๋ก ViewResolver์๊ฒ ์ค์ View ๊ฐ์ฒด๋ฅผ ๊ฒฐ์ ํ๋๋ก ์์ฒญ
์ต์ข
View ๊ฐ์ฒด์ Model ์ ๋ฌ
ViewResolver๊ฐ ๋ฐํํ View ๊ฐ์ฒด์ Model ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ์ ๋ฌํ๋ฉด์, DispatcherServlet์ ์ต์ข
ํ๋ฉด ๋ ๋๋ง์ ์๋ขฐ
๋ ๋๋ง ๋ฐ ์๋ต ๋ฐํ
์ต์ข
View๋ ์ ๋ฌ๋ฐ์ Model ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ํ๋ฉด์ ๋ ๋๋งํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ผ๋ก ๋ฐํ
HandlerMapping
- ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ค์ด์จ HTTP ์์ฒญ์ URL, HTTP ๋ฉ์๋(GET, POST ๋ฑ), ํค๋ ๋ฑ์ ๊ธฐ๋ฐ์ผ๋ก ํด๋นํ๋ Hander(controller)๋ฅผ ์ฐพ๋ ์ญํ
RequestMappingHandlerMapping: ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ(@RequestMapping) ์ปจํธ๋กค๋ฌ๋ฅผ ์ฒ๋ฆฌBeanNameUrlHandlerMapping: ์คํ๋ง ๋น ์ด๋ฆ๊ณผ URL์ ๋งคํSimpleUrlHandlerMapping: XML ๋๋ Java ์ค์ ํ์ผ์ ๋ช ์์ ์ผ๋ก ์ ์๋ URL ํจํด๊ณผ ํธ๋ค๋ฌ๋ฅผ ๋งคํ
HandlerAdapter
- ์ค์ ๋ก
Handler๋ฅผ ์คํํAdapter๋ฅผ ์ฐพ์์Controller๋ก์ง์ ํธ์ถํ๋ ์ญํRequestMappingHandlerAdapter: ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ ์ปจํธ๋กค๋ฌ(@RequestMapping)๋ฅผ ์ฒ๋ฆฌHttpRequestHandlerAdapter:HttpRequestHandler์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํธ๋ค๋ฌ๋ฅผ ์ฒ๋ฆฌSimpleControllerHandlerAdapter: ๊ฑฐ ์คํ์ผ์ ์ปจํธ๋กค๋ฌ(Controller ์ธํฐํ์ด์ค ๊ตฌํ)๋ฅผ ์ฒ๋ฆฌSimpleServletHandlerAdapter: ํ์ค ์๋ธ๋ฆฟ ์ธํฐํ์ด์ค(javax.servlet.Servlet)๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ์ปจํธ๋กค๋ฌ๋ก ์ฌ์ฉํ ๋ ์ฌ์ฉ
ViewResolver
- ์คํํ
View๋ฅผ ์ฐพ๋ ์ญํController์ ๋ฐํ ๊ฐ์View์ ์ด๋ฆ,ViewResolver๊ฐ ์๋ฒ๋ด์ ์ ์ ํ ๋ทฐ ํ์ผ ์ฐพ์ ์ฒ๋ฆฌ@RestController๋ ๋ฐํ ๊ฐ์ HTTP ์๋ต ๋ณธ๋ฌธ(Response Body)์ ์ง์ ์์ฑํ๋ฉฐ, ๋ฐํ ๊ฐ์ ์ผ๋ฐ์ ์ผ๋ก JSON ํ์์ผ๋ก ์ฒ๋ฆฌ.Spring MVC๋ ์ด๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํดHttpMessageConverter๋ฅผ ์ฌ์ฉ
VO vs DTO
VO๋ ๋ณํ์ง ์๋ ๊ฐ์ฒด, ์ค์ง read๋ง ๊ฐ๋ฅ
DTO๋ ์ฝ๊ณ ์ฐ๋ ๊ฒ ๊ฐ๋ฅ(๊ฐ๋ณ์ฑ)
์ํฐํฐ(Entity)
์ํฐํฐ(Entity)๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ๊ณผ 1:1๋ก ๋งคํ๋๋ฉฐ, ๊ณ ์ ์๋ณ์๋ฅผ ๊ฐ์ง ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ก, ์ฃผ๋ก CRUD ์์ ์ ์ฌ์ฉ
DTO ์ฌ์ฉ ์ด์
- ์ํ ์ฐธ์กฐ ์๋ฐฉ
- ์ํฐํฐ ๋ด๋ถ ๊ตฌํ ์บก์ํ
- ์ญํ ๋ถ๋ฆฌ
๊ฐ ๋ ์ด์ด๊ฐ ๊ธฐ๋ฅ์ ๊ตฌ๋ถํ๊ธฐ ์ํ ๋์์ธ ํจํด
Model, View, Controller
์ฆ์ ๋ก๋ฉ(EAGER): ์กฐํ์, ์ฐ๊ด๋ ์ํฐํฐ๋ ํจ๊ป ์กฐํ
์ง์ฐ ๋ก๋ฉ(LAZY): ์ฐ๊ด๋ ์ํฐํฐ๊ฐ ์ค์ ์ฌ์ฉ ๋ ๋ ์กฐํ
๋ณดํต ORM์ ์ฌ์ฉํ ๋, ์ฐ๊ด๋ ์ํฐํฐ๋ฅผ ์กฐํํ๋ ๋ฌธ์ ๋ก ์๋ฅผ ๋ค์ด, ๊ฒ์๊ธ ๋ชฉ๋ก์ ์กฐํํ ๋, ๊ฐ ๊ฒ์๊ธ์ ์์ฑ์ ์ ๋ณด๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์กฐํํ๋ ๊ฒฝ์ฐ, ์ด๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์
EAGER ๋ฐฉ๋ฒ ์ฌ์ฉ -> JPA๋ฅผ ์๋ฅผ ๋ค๋ฉด Join Fetch๋ฅผ ์ฌ์ฉํด์ ์ฐ๊ด ์ํฐํฐ๋ฅผ ํ๋ฒ์ ์ฟผ๋ฆฌ๋ก ํจ๊ป ์กฐํํ๋ ๋ฐฉ๋ฒ
๋ฐฐ์น ์ฌ์ด์ฆ ์ค์ -> EAGER๊ฐ ๋ถ๋ด์ค๋ฌ์ฐ๋ฉด ๋ฐฐ์น์ฌ์ด์ฆ๋ฅผ ์ค์ ํด์ ์กฐํ๋ ๋ฐฉ์
์ฐ๊ด๊ด๊ณ์์ ๋ฐ์ํ๋ ์ด์, ํ๋์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ธ์ ๋, N ๋งํผ ์ฐ๊ด๋ ์ฟผ๋ฆฌ ์ถ๊ฐ ์คํ
ํธ์ถ๋๋ ์์ ์ ๋ฐ๋ผ ๋์ ๊ตฌ๋ถ ํ ์์๋ค. ์คํ๋ง ํํฐ (Spring Filter)๋ ๋์คํจ์ฒ ์๋ธ๋ฆฟ(DispatcherServlet)์ผ๋ก ์์ฒญ์ด ๊ฐ๊ธฐ์ ์ ์คํ๋์ง๋ง
์คํ๋ง ์ธํฐ์ ํฐ(Spring intercepter)๋ Controller๋ก ์์ฒญ์ด ๊ฐ๊ธฐ์ ์ ์คํ๋๋ค.
@Requestbody : ํด๋ผ์ด์ธํธ๊ฐ ์ ์กํ๋ JSON ํํ์ HTTP Body ๋ด์ฉ์ MessageConveter๋ฅผ ํตํด ์๋ฐ ๊ฐ์ฒด๋ก ๋ณํ์์ผ์ฃผ๋ ์ญํ , Getter , Setter ์์ด๋ ์ ์์ ์ผ๋ก ํ ๋น
@RequestParam :1๊ฐ์ HTTP ์์ฒญ ํ๋ผ๋ฏธํฐ ๋ฐ๊ธฐ์ํด ์ฌ์ฉ, ๋ํดํธ๊ฐ true(ํ์)
@ModealAttribute: ํด๋ผ์ด์ธํธ๊ฐ ์ ์กํ๋ ํผ(form) ํํ์ HTTP Body์ ์์ฒญ ํ๋ผ๋ฏธํฐ๋ค์ ์์ฑ์๋ Setter๋ก ๋ฐ์ธ๋ฉํ๊ธฐ ์ํด ์ฌ์ฉ
JPA ๊ตฌํ์ฒด
Hibernate, EclipseLink
@Transactional ์ด๋ ธํ ์ด์ ๋ฐ EntityManager๋ฅผ ํตํด ์ง์ ํธ๋์ญ์ ์์, ์ปค๋ฐ , ๋กค๋ฐฑ ๊ฐ๋ฅ
์ฐธ๊ณ