week 3 jonghun - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
Java8์ heap ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํด์ฃผ์ธ์ ๊ทธ๋ฆฌ๊ณ ํ์์ญ๊ณผ ์คํ์์ญ์ ๋ํด์ ์ค๋ช ํ์์ค
์๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
- stack, method( c๋ก ์น๋ฉด data + static ), heap
- method์์ญ์ ์คํ์์ ์ ์์ค์ฝ๋๋ static๋ณ์๋ค์ด ํ ๋น
- heap์์ญ์ ๋ฐํ์์ ์์ฑ๋ ์ธ์คํด์ค ๋ณ์๋ค์ด ํ ๋น
- stack์์ญ์ ํจ์๊ฐ ํธ์ถ๋ ๋ ์ง์ญ๋ณ์๋ ๋งค๊ฐ๋ณ์๋ค์ด ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น
๋๋ค์์ ์ฌ์ฉํ๋ ์ด์ ๋ 1ํ์ฉ ์ต๋ช
๋ฉ์๋๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ > ํ์ง๋ง ์๋ฐ๋ ๋
๋ฆฝ์ ์ธ ๋ฉ์๋๋ง์ ์์ฑํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ต๋ช
๊ฐ์ฒด๋ฅผ ์ด์ฉํด์ ๋ง๋ ๋ค.
๋ฉ์๋๋ฅผ ํ๋์ ์(expression)์ผ๋ก ํํํ ๊ฒ
๋ฉ์๋๋ฅผ ๋๋ค์์ผ๋ก ํํํ๋ฉด ๋ฉ์๋์ ์ด๋ฆ๊ณผ ๋ฐํ๊ฐ์ด ์์ด์ง๋ฏ๋ก ๋๋ค์์ ์ต๋ช
ํจ์(anonymous function)๋ผ๊ณ ๋ ํ๋ค.
๋๋ค์ ๋ง๋๋ ๋ฐฉ๋ฒ
๋ฉ์๋์์ ์ด๋ฆ๊ณผ ๋ฐํํ์
์ ๊ฑฐ
๋งค๊ฐ๋ณ์ ์ ์ธ๋ถ์ ๋ชธํต{} ์ฌ์ด์ -> ์ถ๊ฐ
//๊ธฐ์กด
๋ฐํํ์
๋ฉ์๋์ด๋ฆ (๋งค๊ฐ๋ณ์ ์ ์ธ) {
...
}
//๋๋ค์ (๋งค๊ฐ๋ณ์ ์ ์ธ) -> { ... } ๋ฐํ๊ฐ์ด ์๋ ๋ฉ์๋๋ return ๋์ ์(expression)์ผ๋ก ๋์ ํ ์ ์๋ค.(์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ์๋์ผ๋ก ๋ฐํ๊ฐ์ด ๋๊ณ ; ์๋ต) ๋งค๊ฐ๋ณ์์ ํ์ ์ ์ถ๋ก ๊ฐ๋ฅํ๋ฉด ์๋ต ๊ฐ๋ฅ (๋๋ถ๋ถ ์๋ต ๊ฐ๋ฅ) ๋ ๋งค๊ฐ๋ณ์ ์ค ํ๋์ ํ์ ๋ง ์๋ตํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅ ๋งค๊ฐ๋ณ์๊ฐ ํ๋๋ฟ์ด๋ฉด ๊ดํธ() ์๋ต ๊ฐ๋ฅ ์ค๊ดํธ{} ์์ ๋ฌธ์ฅ์ด ํ๋์ผ ๋๋ ์ค๊ดํธ{} ์๋ต ๊ฐ๋ฅ (๋ฌธ์ฅ ๋์ ; ์๋ต) ์ค๊ดํธ{} ์์ ๋ฌธ์ฅ์ด return๋ฌธ์ผ๊ฒฝ์ฐ ์ค๊ดํธ{} ์๋ต ๋ถ๊ฐ๋ฅ //๊ธฐ์กด int max(int a, int b) { return a > b ? a : b; }
//๋๋ค์ (int a, int b) -> { return a > b ? a : b; }
//return๋ฌธ ๋์ expression ์ฌ์ฉ (int a, int b) -> a > b ? a: b
//๋งค๊ฐ๋ณ์ ํ์ ์๋ต (a, b) -> a > b ? a : b
//๋งค๊ฐ๋ณ์ 1๊ฐ์ผ ๊ฒฝ์ฐ ๊ดํธ ์๋ต a -> aa //OK int a -> aa //์๋ฌ
//๋ณธ๋ฌธ ๋ฌธ์ฅ 1๊ฐ์ผ ๊ฒฝ์ฐ ์ค๊ดํธ ์๋ต (String name, int i) -> System.out.println(name+"="+i)
Exception์ฒ๋ฆฌ์ฝ๋ ์ฌ๋ถ๋ฅผ compiler๊ฐ check
- ์์ผ๋ฉด ์ปดํ์ผ ์๋ฌ!!
=> ํ๋ก๊ทธ๋จ ์คํ ํ๋ฆ์ ์์ธ ๋ฐ์ ๊ฐ๋ฅ์ฑ์๋ ์ํฉ์ ํํ.(๋ก์ง์ ๋์ฌ ์ ์๋ ์ํฉ)
=> Code์์ ๋ฌธ์ ๊ฐ ์๋๋ผ, ์คํ์ํฉ์ ๋ฐ๋ผ ๋ฐ์๊ฐ๋ฅ์ฑ ์๋ ์์ธ.
=> ํ๋ก๊ทธ๋จ ๊ตฌํ ํ๋ฆ์ ๋ฐ์ํ ์ ์๋ ์์ธ.
๋จผ์ , RuntimeException์ ์ดํด๋ณด์.
RuntimeException์ ๋ค์๋งํ๋ฉด, Unchecked Exception์ด๋ผ๊ณ ๋งํ ์ ์๋๋ฐ, ๋ฐ์ํ ๊ฒ ๊ฐ์ ์์ธ๋ฅผ ์ฒดํฌํด์ฃผ์ง ์์์
(์ฆ, ํ๋ก๊ทธ๋๋จธ์ ์ค์๋ก์ธํด์) ๋ฐ์ํ๋ ์ค์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
=> Code๋ฅผ ์๋ชป ๋ง๋ค์ด์ ์๊ธฐ๋ ๋ฌธ์ .
=> ์ ๋ฌด์ ํ๋ฆ๋ณด๋ค๋ core(๊ธฐ๋ณธ)์ ์ธ ๋ถ๋ถ์ ์๋ฌ.
=> ์ปดํ์ผ ํ๋๋ฐ๋ ๋ฌธ์ ๊ฐ ์๋ค. ์คํํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํจ.
@Component๋ ์คํ๋ง์ด ๊ด๋ฆฌํ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ํ๋ด๋ ์ผ๋ฐ์ ์ธ ์คํ
๋ ์ค ํ์
์ด๋ค.
๋ํ Spring(IOC) Container์ Bean์ ๋ฑ๋กํ๋๋ก ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์
ํ๋ ์ด๋
ธํ
์ด์
์ด๋ค.
์ค์ ํด๋์ค์ @ComponentScan์ ๋ถ์ฌ์ฃผ๋ฉด @Component๊ฐ ๋ถ์ ํด๋์ค๋ค์ ํ์ํด ๋น์ผ๋ก ๋ฑ๋ก์ ํด์ค๋ค.
scan-auto-detection๊ณผ dependency injection์ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ ๊ฐ์ฅ ๊ธฐ๋ณธ ์ด๋
ธํ
์ด์
์ด๋ค.
์ข๋ ์ธ๋ถ์ ์ธ ์ ์ค ์ผ์ด๋ค์ ์ํ์ฌ @Component์ ๊ตฌ์ฒดํ๋ ํํ๋ก @Repository, @Service, @Controller๋ค์ด ์๋ค.
context:component-scan๋ @Component ๋ง ๊ฒ์ํ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก
@Controller, @Service, @Repository๋ฅผ ์ฐพ์ง ์๋๋ค.
ํ์ง๋ง @Component๋ก ์ฃผ์์ด ๋ถ์ด ์๊ธฐ ๋๋ฌธ์ ์ค์บ๋๋ค!!!
ex)
@Component
public @interface Service {
โฆ.
}
@Controller : Presentation Layer(ํด๋ผ์ด์ธํธ์์ ์ ์ ์ด๋ฉฐ ๋ฐ์ดํฐ์ ์
์ถ๋ ฅ์ด ์ผ์ด๋จ)์์ Contoller๋ฅผ ๋ช
์ํ๊ธฐ ์ํด์ ์ฌ์ฉ
=> @RequestMapping ์ด๋
ธํ
์ด์
์ ํด๋น ์ด๋
ธํ
์ด์
๋ฐ์์๋ง ์ฌ์ฉํ ์ ์๋ค.
@Repository : Persistence Layer(DB์ ์ง์ ์ ์ผ๋ก ์ ๊ทผํ๋ ๊ณ์ธต)์์ DAO๋ฅผ ๋ช
์ํ๊ธฐ ์ํด์ ์ฌ์ฉ
=> ํ๋ซํผ ๋ณ ์์ธ๋ฅผ ์ก์์ Spring์ ํตํฉ ๊ฒ์ฌ๋์ง ์์ ์์ธ ์ค ํ๋๋ก ๋ค์ ๋์ง๋ค.
@Service : Business Layer(์ปจํธ๋กค๋ฌ์ ๋ทฐ๋ฅผ ์ฐ๊ฒฐ)์์ Service๋ฅผ ๋ช ์ํ๊ธฐ ์ํด์ ์ฌ์ฉ => @Component์ ๋ณ ์ฐจ์ด๊ฐ ์์ง๋ง ์ถํ์ ์คํ๋ง์์ ์ถ๊ฐ ์์ธ์ฒ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธํ ์ ์๊ธฐ ๋๋ฌธ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ์ฌ์ค๋ค.
@Component : ๊ทธ ์ธ์ ์๋์ผ๋ก ์ค์บํด์ ๋ฑ๋กํ๊ณ ์ถ์ ๊ฒ๋ค์ ์ํด ์ฌ์ฉ
์ปดํฌ๋ํธ ํด๋์ค๋ค์ @Component๋ฅผ ๋ถ์ผ ์๋ ์์ง๋ง,
@Repository, @Service, @Controller๋ฅผ ๋ถ์ธ๋ค๋ฉด ๋๊ตฌ๋ค์ด ํด๋์ค๋ค์ ์ฒ๋ฆฌํ๋๋ฐ ๋ ์ ํฉํ๋๋ก ํ ์ ์๊ณ
๊ตฌ์ฒด์ ์ผ๋ก ์ฌ์ฉํ๋ฉด ์ด๋ค ๋ถ๋ถ์ ์ฐ์ด๋์ง ์๊ฐ์ ์ผ๋ก ํ๋จํ๊ธฐ ํธํ๋ค.
๋ํ, ๊ด์ (aspects)์ ๋ ์ฐ๊ด์ฑ์ ๋ถ์ฌํ ์ ์๋ค. - AOP๋ฅผ ํตํ ์ฒ๋ฆฌ๊ฐ ์ฝ๊ฒ ๊ฐ๋ฅํ๋ค.
์คํ๋ง MVC์ ์ฃผ์ ๊ตฌ์ฑ ์์
- DispatcherServlet : ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ ๋ฌ ๋ฐ๋๋ค. ์ปจํธ๋กค๋ฌ์๊ฒ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ ๋ฌํ๊ณ , ์ปจํธ๋กค๋ฌ๊ฐ ๋ฆฌํดํ ๊ฒฐ๊ณผ ๊ฐ์
View์ ์ ๋ฌํ์ฌ ์๋ง์ ์๋ต์ ์์ฑํ๋๋ก ํจ(์คํ๋ง ์ ๊ณต) - HandlerMapping : ํด๋ผ์ด์ธํธ์ ์์ฒญ URL์ ์ด๋ค ์ปจํธ๋กค๋ฌ๊ฐ ์ฒ๋ฆฌํ ์ง๋ฅผ ๊ฒฐ์ (์คํ๋ง ์ ๊ณต)
- Controller : ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ ๋ค, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ DispatcherServlet์ ์๋ ค ์ค๋ค.(์ค์ ๋ก์ง์ ๋ด๋น)
- ModelAndView : ์ปจํธ๋กค๋ฌ๊ฐ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ ์ ๋ณด ๋ฐ ๋ทฐ ์ ํ์ ํ์ํ ์ ๋ณด๋ฅผ ๋ด๋๋ค.
- ViewResolver : ์ปจํธ๋กค๋ฌ์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ ๋ทฐ๋ฅผ ๊ฒฐ์ (์คํ๋ง ์ ๊ณต)
- View : ์ปจํธ๋กค๋ฌ์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ํ๋ฉด์ ์์ฑ
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด DispatcherServlet์ ์ ๋ฌ
- DispatcherServlet์ HandlerMapping์ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด๋ฅผ ๊ตฌํจ
- DispatcherServlet์ ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด์ handleRequest() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌ
- ์ปจํธ๋กค๋ฌ์ handlerRequest() ๋ฉ์๋๋ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ์ ๋ณด๋ฅผ ๋ด์ ModelAndView ๊ฐ์ฒด๋ฅผ ๋ฆฌํด
- DispatcherServlet์ ViewResolver๋ก๋ถํฐ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ ๋ทฐ ๊ฐ์ฒด๋ฅผ ๊ตฌํจ
- ๋ทฐ๋ ํด๋ผ์ด์ธํธ์ ์ ์กํ ์๋ต์ ์์ฑ
์คํ๋ง MVC์์ ๋ชจ๋ ์์ฒญ์ ํ๋ฆ์ ๊ด๋ฆฌํ๋๊ฑด DispatcherServlet
** DispatcherServlet์ ์ ๋ฌ๋ฐ์ ์ค์ ํ์ผ์ ์ด์ฉํด์ ์คํ๋ง ์ปจํ
์ด๋๋ฅผ ์์ฑํ๋ค.
1 ๋จ๊ณ : DispatcherServlet ์ค์ ๋ฐ ์คํ๋ง ์ปจํ ์คํธ ์ค์
์๋ฐ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ค์ ํ์ผ์ธ web.xml์ ๋ค์์ ์ ๋ณด๋ฅผ ์ถ๊ฐ
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ ๋ฌ๋ฐ์ DispatcherServlet ์ค์
- ๊ณตํต์ผ๋ก ์ฌ์ฉํ ์ดํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ ์ค์ DispatcherServlet์ ์ค์ ์ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ /WEB-INF/web.xmlํ์ผ์ ์ถ๊ฐํ๋ฉด ๋จ.
2 ๋จ๊ณ : ์ค์ ํ์ผ์ HandlerMapping ์ค์ ์ถ๊ฐ HandlerMapping์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ด๋ค Controller๊ฐ ์ฒ๋ฆฌํ ์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณต
3 ๋จ๊ณ : Controller ๊ตฌํ ๋ฐ ์ค์ ์คํ๋ง์์ ์ ๊ณตํ๋ Controller ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ฉด ๋จ(๋ค์ํ Controller ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณต)
4 ๋จ๊ณ : ์ค์ ํ์ผ์ ViewResolver ์ค์ ์ถ๊ฐ Controller๊ฐ ๋ฆฌํดํ๋ ModelAndView๋ ๋ทฐ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์.
5 ๋จ๊ณ : ๋ทฐ ์ฝ๋ ๊ตฌํ JSP์ ๊ฐ์ ์น ์ดํ๋ฆฌ์ผ์ด์ ์์์ ์ด์ฉํ์ฌ ๋ทฐ๋ฅผ ์์ฑ
@Retention(RetentionPolicy.RUNTIME)
@Import(DelegatingWebMvcConfiguration.class)
@Target(ElementType.TYPE)
public @interface EnableWebMvc {
}
์ด๋
ธํ
์ด์
๊ธฐ๋ฐ Spring MVC๋ฅผ ์ฌ์ฉํ ๋ ํธ๋ฆฌํ ์น MVC ๊ธฐ๋ณธ ์ค์ ๋ฐฉ๋ฒ
@Enable๋ก ์์ํ๋ ์ด๋
ธํ
์ด์
์ ์๋ฐ ์ค์ ์์ ํธ์๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด์ ๋์
๋์๋ค.
@EnableWebMvc ์ด๋
ธํ
์ด์
์ ์ ์ฉ์ํค๋ฉด ๋๋ถ๋ถ Spring Web์ ํ์ํ ๋น๋ค์ ์๋์ผ๋ก ์ค์ ํด์ค๋ค.
WebMvcConfigurationSupport ์์ ๊ตฌ์ฑํ ์คํ๋ง MVC๊ตฌ์ฑ์ ๋ถ๋ฌ์จ๋ค.
=> WebMvcConfigurationSupport
MVC ์๋ฐ ์ค์ ์์ ๊ธฐ๋ณธ ์ค์ ์ ์ ๊ณตํ๋ ๋ฉ์ธ ํด๋์ค์ด๋ค. ์ฃผ๋ก @EnableWebMvc๋ฅผ ํตํด์ ์ํฌํธ๋๋ค.
(๋ ์ ํํ ๋งํ๋ฉด ์ด ํด๋์ค๋ฅผ ์์ํ DelegatingWebMvcConfiguration๊ฐ ์ํฌํธ๋๋ค.)
์ปค์คํฐ๋ง์ด์ง์ด ํ์ํ๋ค๋ฉด WebMvcConfigurationSupport ํด๋์ค๋ฅผ ์์ํด์ ํ์ํ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํด๋๋๋ค.
DispatcherServlet๊ฐ ์คํ๋ง ์ปจํ
์ด๋๋ฅผ ์์ฑํ๊ธฐ ์ํด์ ์
๋ ฅ์ผ๋ก ๋ฐ๋ ์ค์ ํด๋์ค์๋
HandlerMapping ๋น๊ณผ HandlerAdapter ๋น์ด ๋ฑ๋ก๋์ด์์ด์ผ ํ๋ค.
ํ์ง๋ง ์ค์ ํด๋์ค์ @EnableWebMvc ์ ๋
ธํ
์ด์
์ ์ถ๊ฐํด์ฃผ๋ฉด ํด๋น ๋น์ ์๋์ผ๋ก ์ถ๊ฐ ํด์ค๋ค.
๋ฐ์ ๋ ํด๋์ค๋ฅผ ํฌํจํ๊ธฐ ๋๋ฌธ์ด๋ค!!
o.s.w.servlet.mvc.method.annotation.RequestMappingHandlerMapping.
o.s.w.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.
Spring Java Config ์ค์
Spring MVC ์ค์
๋ฌด์์ ์ค์ ํ๋๊ฐ? => MVC์ ๊ด๋ จ๋ ์ค์ ๋ค.
1.HandlerMapping
2.HandlerAdapter
3.ViewResolver์ ๊ด๋ จ๋ ์ค์ ์ ์งํํ๋ค.
๋ง์ ์ค์ ์ ํด์ผํ์ง๋ง @EnableWebMvc ์ด๋
ธํ
์ด์
์ ์ ์ฉ์ํค๋ฉด ๋๋ถ๋ถ Spring Web์ ํ์ํ ๋น๋ค์ ์๋์ผ๋ก ์ค์ ํด์ค๋ค.
๋๋จธ์ง, ์ถ๊ฐ์ ์ธ ์ค์ ์ ํด์ผํ๋ค๋ฉด spring 5 ๋ฒ์ ๋ถํฐ WebMvcConfigurer ๊ฐ์ ๊ฐ์ฒด ์์์์ผ ์ค๋ฒ๋ผ์ด๋ฉ ํ์ฌ ๊ณ ์ณ๋๊ฐ๋ฉด ๋๋ค.
==> WebMvcConfigurer
WebMvcConfigurer ์ธํฐํ์ด์ค๋ MVC ๋ค์์คํ์ด์ค๋ฅผ ์ด์ฉํ ์ค์ ๊ณผ ๋์ผํ ์ค์ ์ ํ๋๋ฐ ํ์ํ ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ ์๋ค.
Spring MVC๋ฅผ ์๋ฐ ๊ธฐ๋ฐ์ผ๋ก ์ค์ ํ ๋ ์ฌ์ฉํ๋ค.
ex) HttpMessageConverter๋ฅผ ์ถ๊ฐํ ๋ WebMvcConfigurer ์ธํฐํ์ด์ค๋ฅผ ์์ํ
@Configuration ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , configureMessageConverters ๋ฉ์๋๋ฅผ ๊ตฌํํด์ฃผ๋ฉด ๋๋ค.
if) ์คํ๋ง MVC๋ฅผ ์๋ฒฝํ๊ฒ ์ ์ดํ๊ณ ์ถ๋ค๋ฉด -> @Configuration + @EnableWebMvc
HeapDump๋ Memory ๋์๋ฅผ ์ง๋จํ๋๋ฐ ์ค์ํ ์ญํ ์ ํ๋ TroubleShooting ๋ฐฉ๋ฒ์
๋๋ค.
ThreadDump์์ ํ์ธํ Application์ ์์ธ Stack์ ํ์ธํ ์ ์๋ ์ฅ์ ์ง๋จ์ ๋งค์ฐ ์ค์ํ ๋ถ๋ถ์ด๋ผ ๋ณผ์ ์์ต๋๋ค.
Heap์ด๋ Java์์ ์ฌ์ฉํ๋ object๋ค์ ์ ์ฅํ๋ ๊ณต๊ฐ์ ๋๋ค.
Heap์๋ java object ์ ๋ณด๋ง ์ ์ฅ๋๋ ๊ฒ์ด ์๋๊ณ ๋ฉํ ์ ๋ณด ๋ฐ ๊ฐ object๋ค์ ๋ํ ์ฐธ์กฐ ์ ๋ณด๋ ๋ด๊ฒจ ์์ต๋๋ค. Heap ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๋ ๋ชจ๋ object๋ Root ๋ ธ๋๋ถํฐ ์์ํด์ parent/child ํ์์ tree ๊ตฌ์กฐ๋ฅผ ํ์ฑํ๊ณ ์์ต๋๋ค. ์ด๋ฌํ tree ๊ตฌ์กฐ๋ ๊ฐ object๋ค์ ์ฐธ์กฐ ์ ๋ณด๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋๋ค. tree ๊ตฌ์กฐ๊ฐ ๊ผญ ์ ํํ๋ top/down ๋ฐฉ์์ ๊ตฌ์กฐ๋ก๋ง ์ด๋ฃจ์ด์ง์ง ์๊ณ ๊ฐํน ์ญ ์ฐธ์กฐ์ ์ํด ์ํธ ์ฐธ์กฐ๊ฐ ๋ฐ์ํ๊ธฐ๋ ํฉ๋๋ค.
Heap์ ์ ๋ณด๋ฅผ ๋ถ์ํ๋ ๊ฒ์ java์์์ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ (๊ฐ์ข OutOfMemoryError ๋ฌธ์ ๋ค)๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ค์ํ ์์ ์ ๋๋ค.
Heap dump ์์ฑ ๋ฐฉ๋ฒ
1.HPROF ์ต์
๊ณผ ํจ๊ป JVM์ ๊ธฐ๋ํ ๊ฒฝ์ฐ
2.HeapDumpOnOutOfMemoryError ์ต์
๊ณผ ํจ๊ป JVM์ ๊ธฐ๋ํ ๊ฒฝ์ฐ
3.HeapDumpOnCtrlBreak ์ต์
๊ณผ ํจ๊ป JVM์ ๊ธฐ๋ํ ๊ฒฝ์ฐ
===> heap dump ํ๋?? ==> heap dump ๋ jvm ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํ ๋ฐฉ๋ฒ??
๋ ๋์ค(Redis)๋ Remote Dictionary Server์ ์ฝ์๋ก์ โํค-๊ฐโ ๊ตฌ์กฐ์ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ NoSQL์ ์ผ์ข ์ด๋ค.
-
์ ํ๋ฆฌ์ผ์ด์ ์ด ํธ์ถํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ๊ฒฐ๊ด๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋จ์์ ์ธ๋ฉ๋ชจ๋ฆฌ ์บ์
-
Pub/Sub ๊ตฌ์กฐ์ ๋ฉ์์ง ๋ธ๋ก์ปค ํน์ ๋ฆฌ์คํธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ๋ฉ์์ง ํ, ๋๊ธฐ์ด
-
์ฌ์ฉ์ ์ธ์ฆ ํ ํฐ, ์ธ์ ์ํ ๋ฑ ์ธ์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ ์ธ์ ์คํ ์ด
์ด ์ค์์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ธ๋ฉ๋ชจ๋ฆฌ ์บ์(In-Memory Cache)์
๋๋ค.
์ค์ ๋ก Redis๋ฅผ ์ฌ์ฉํ๋ ๋๋ถ๋ถ์ ๊ฐ๋ฐํ์ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ๊ฒฐ๊ด๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ์๋ค๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๋ฌํด์ฃผ๊ณ , ๊ฒฐ๊ด๊ฐ์ด ์บ์ฑ์ ์๋ ์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๋ฌ ํ ์บ์ ํฉ๋๋ค.
Cache?
ํ๋ฒ ์ฝ์(์ฒ๋ฆฌํ) ๋ฐ์ดํ๋ฅผ ์์๋ก ์ ์ฅํ๊ณ ํ์์ ๋ฐ๋ผ ์ ์ก,๊ฐฑ์ ,์ญ์ ํ๋ ๊ธฐ์ ๋ก ๋ณดํต์ ๋ฐ์ดํ์ ๋ณด๊ด์ฅ์๋ก ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋์คํฌ์์ ์ ๋ณด๋ฅผ ์ป์ด์ค๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋น ๋ฅธ I/O์ฑ๋ฅ์ ์ป์ ์ ์์ผ๋ ์๋ฒ๊ฐ ๋ค์ด๋๊ฑฐ๋ ์ฌ๋ถํ
๋๋ ๊ฒฝ์ฐ ์ฌ๋ผ์ง๋ ์ฑ๊ฒฉ์ ํ๋ฐ์ฑ์ ๊ฐ์ง๊ณ ์์ด
์์์ ์ผ๋ก ๋ณด๊ดํ ์ ์๋, ๋ง ๊ทธ๋๋ก ์์์ ์ผ๋ก ๋ณด๊ดํ๊ณ ๋น ๋ฅด๊ฒ ๊ทธ ์ ๋ณด์ ์ ๊ทผํ๊ธฐ ์ํ ์ฉ๋๋ก ์ฌ์ฉํด์ผ ํ๋ค.
(๋ฌผ๋ก ์ ๋ณด์ ์ฑ๊ฒฉ์ ๋ฐ๋ผ ๋ณ๋์ ๋์คํฌ๋ฐฑ์ ๋ฐ TTL๋ฑ์ ์ค์ ์ผ๋ก ์๊ตฌ๋ณด๊ด์ด๋ ์ค๋๊ธฐ๊ฐ ์ ์ง๊ฐ ๊ฐ๋ฅํ๋ค. ๋จ ์ด๋ฐ ์ค์ ๋ค์ด ๊ผญ ํ์ํ๋ค๋ฉด Cache๋ฅผ ์ ์ฉํ๋๊ฒ ๋ง๋์ง ํ ๋ฒ๋ ํ๋น์ฑ์ ๊ฒํ ํด ๋ณด๋๊ฒ ์ข๊ฒ ๋ค)
์๋ฒ๊ฐ ๋ถํ์ํ ํธ๋ํฝ์ ์ค์ผ ์ ์๊ณ ,
๊ทธ๋ก ์ธํด ์น์ดํ๋ฆฌ์ผ์ด์
์๋ฒ์ ๋ถํ ๊ฐ์์ํค๊ณ ,
์ดํ๋ฆฌ์ผ์ด์
์ ๋น ๋ฅธ ์ฒ๋ฆฌ์ฑ๋ฅ(์กฐํ)์ ํ๋ณดํด์ ๊ถ๊ทน์ ์ผ๋ก ์ดํ๋ฆฌ์ผ์ด์
๋ฅผ ์ฌ์ฉํ๋ ๊ณ ๊ฐ์๊ฒ ์พ์ ํ ์๋น์ค๊ฒฝํ์ ์ ๊ณตํ๋ ๊ฒ์ด๋ค.
์ถ์ํ๋ API์ ์ด๋
ธํ
์ด์
์ ์ ๊ณต
์ด๋
ธํ
์ด์
์ฌ์ฉ๋ง์ผ๋ก ์ผ๋ฐ Service ๋ฉ์๋๋ฅผ ์บ์ ํจ์๋ก ์ฌ์ฉ ๊ฐ๋ฅ
SpringBoot์ Auto Configuration ์ ์ฉ์ผ๋ก Cache์๋ฒ ์ค์ ์ด ๊ฐ๊ฒฐ
Springboot Starter Kit์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํจ spring-boot-starter-data-redis
- ์คํ๋ง๋ถํธ ์์กด์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ
Redis CacheServer์ค์
์์กด์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ (Maven๊ธฐ์ค) โ pom.xml์ ์ถ๊ฐ
-
Redis ์ปค๋ฅ์ ์ ๋ณด ์ค์ Redis ์๋ฒ์ค์ โ application.yml or application.properties ํ์ผ์ ์ถ๊ฐ
spring.cache.type=redis
spring.redis.host=localhost
spring.redis.port=6379 -
SpringBoot ๋ฉ์ธํด๋์ค์ โ์บ์์ฌ์ฉ' ์๋ ค์ฃผ๊ธฐ SpringBoot์ ์บ์์ฌ์ฉํ๊ฒ ๋ค๊ณ ์๋ ค์ฃผ๊ธฐ โ Springboot Main Application Class์ @EnableCaching ์ด๋ ธํ ์ด์ ์ถ๊ฐ
@EnableCaching
@SpringBootApplication
public class RedisCacheApplication {
public static void main(String[] args) {
SpringApplication.run(RedisCacheApplication.class, args);
}
} -
์ฌ์ฉํ Method ( controller ๋ฉ์๋ or service ๋ฉ์๋)์ ์ด๋ ธํ ์ด์ ๋ฌ์์ฃผ๊ธฐ -> ์บ์์ ๋ต์์ ์ ํด์ง โ์๋น์ค&์ ๋ณดโ ์ฌ์ฉํ ์๋น์ค ๋ฉ์๋์ ์ด๋ ธํ ์ด์ ๋ฌ์์ฃผ๊ธฐ
์ฃผ์ ์ด๋ ธํ ์ด์
@Cacheable @CachePut -> ์บ์๋ฑ๋ก
@Cacheble์ ์บ์๊ฐ ์์ผ๋ฉด ์บ์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์์ผ๋ฉด ๋ฑ๋กํ๋ค.
@CacehPut์ ๋ฌด์กฐ๊ฑด ์บ์์ ์ ์ฅํ๋ค.
@CacheEvict -> ์บ์์ญ์
์ด๋ ๊ฒ ํด ์ฃผ๋ฉด ์ฐ๋ฆฌ๊ฐ Cache๊ฐ ํ์ํ API๋ ์๋น์ค ๋ฉ์๋์ ์ด๋ ธํ ์ด์ ์ ๋ถ์ฌ์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
SSL(Secure Sockets Layer)์ Certificate Authority(CA)๋ผ ๋ถ๋ฆฌ๋ ์๋ ํํฐ๋ก๋ถํฐ ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ์ธ์ฆ์ ํ๋๋ฐ ์ฌ์ฉ๋๋ค.
์ฃผ๋ก ์ ์ก๊ณ์ธต๊ณผ ์์ฉ๊ณ์ธต ์ฌ์ด์์ ๋ณด์์กฐ์น๋ฅผ ํ๋๋ฐ ์ฌ์ฉํ๊ฒ ๋๋ค.
์ฐ๋ฆฌ๋ค์ด ๋ง์ด ์ ํ๊ฒ ๋๋ HTTPS://๋ SSL์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํ๋ค.
client Hello: client์์ SSL๋ฒ์ ์ ๋ณด์ ์ง์ํ๋ ์ํธํ ๋ฐฉ์, ๋ฌด์์ ๋ฐ์ดํธ ๋ฌธ์์ด(์ดํ์ ์ฌ์ฉํ๊ฒ ๋๋ ์ค์ํ ๋ฐ์ดํฐ์
๋๋ค)์ด ํฌํจ ๋์ด ์ ๋ฌ ๋ฉ๋๋ค. ์ด๋ฏธ SSL handshake๋ฅผ ํ์๋ค๋ฉด ์ธ์
์ ์ฌ์ฌ์ฉ ํ ์ ์์ต๋๋ค.
server Hello: ์ง์ํ๋ ์ํธํ ๋ฐฉ์ ์ค ์๋ฒ์์ ์ด๋ค๊ฒ์ ์ฌ์ฉํ ์ง, ์ธ์
ID, ์๋ฒ์ธก์์ ์์ฑํ ๋ฌด์์ ๋ฐ์ดํธ ๋ฌธ์์ด์ ์ ์กํฉ๋๋ค. ํด๋ผ์ด์ธํธ์์ ์ธ์ฆ์๋ฅผ ์๊ตฌํ๊ฒ ๋๋ฉด SSL ์ธ์ฆ์๋ฅผ ์ ์กํ๊ฒ ๋ฉ๋๋ค.
์ธ์ฆ์๋ฅผ ๋ฐ๊ฒ ๋๋ฉด ์์์ ์ธ๊ธํ๋ ๋ฐฉ์(์ธ์ฆ์๊ฐ ์๋ฒ๊ฐ ์ ๋ขฐํ ์ ์๋์ง ์ด๋ป๊ฒ ํ๋จํ ๊น?)๋ก ์ ๋ขฐํ ์ ์๋ ์ฌ์ดํธ ์ธ์ง ํ๋จํ๊ฒ ๋ฉ๋๋ค.์ด ๊ณผ์ ์ ํตํด ํด๋ผ์ด์ธํธ๋ ๊ณต๊ฐํค๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค.
์ดํ ํด๋ผ์ด์ธํธ๋ ์์ ์ด ๋ง๋ ๋ฌด์์ ๋ฐ์ดํธ ๋ฌธ์์ด๊ณผ ์๋ฒ์ชฝ์์ ์ ์ก๋ ๋ฌด์์ ๋ฐ์ดํธ ๋ฌธ์์ด์ ์กฐํฉํ์ฌ pre master secretํค๋ฅผ ์์ฑํฉ๋๋ค. ์ด ํค๋ ์ดํ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ๋์นญํค ๋ฐฉ์์ ์ฌ์ฉํ ๋ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ์ด pre master secretํค๋ฅผ ์๋ฒ๋ก ์ ์กํ ๋ ์ธ์ฆ์์์ ๋ฐ์๋ ํค๋ฅผ ์ด์ฉํ์ฌ ๊ณต๊ฐํค ๋ฐฉ์ ์ํธํ๋ฅผ ํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฒ์ชฝ์ผ๋ก ์ ์กํ๊ฒ ๋ฉ๋๋ค.
์๋ฒ์ชฝ์์๋ ์์ ํ pre master secretํค๋ฅผ ๋น๋ฐํค๋ฅผ ์ด์ฉํ์ฌ ๋ณตํธํ ํ์ฌ ์ป๊ฒ๋๋ค.
server client ๋ ๋ค ์ผ๋ จ์ ๊ณผ์ ์ ๊ฑฐ์ณ pre master secretํค๋ฅผ master key๋ก ๋ง๋ค๊ฒ ๋๊ณ ์ด master key๋ฅผ ์ด์ฉํ์ฌ session key๋ฅผ ๋ง๋ค๊ฒ ๋๋ค.
์ดํ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ session key๋ฅผ ๋์นญํค ๋ฐฉ์์ผ๋ก ์ด์ฉํ์ฌ ํต์ ํ๊ฒ ๋ฉ๋๋ค.
ํต์ ์ด ๋๋๋ฉด ์ธ์
ํค๋ฅผ ํ๊ธฐํฉ๋๋ค.