Backend/๐ฟ Spring(35)
-
[Spring] ProxyFactory
์ด์ ํฌ์คํ ์์ ๋์ ํ๋ก์๋ฅผ ์ ์ฉํ ๋์ ๋ฌธ์ ์ ์ ์ง์ด๋ดค๋ค. ์ธํฐํ์ด์ค๊ฐ ์๋ ๊ฒฝ์ฐ์๋ CGLIB๋ฅผ, ์๋ ๊ฒฝ์ฐ์๋ JDK ๋์ ํ๋ก์๋ฅผ ์ ์ฉํด์ผํ๋ค. ๋ ๊ธฐ์ ์ ๋ชจ๋ ์ฌ์ฉํ๋ ค๋ฉด, JDK ๋์ ํ๋ก์์ InvocationHandler ์ CGLIB์ MethodInterceptor๋ฅผ ์ค๋ณตํด์ ๋ง๋ค์ด ๊ด๋ฆฌํด์ผํ ๊น? ํน์ ์กฐ๊ฑด์์(ํํฐ) ํ๋ก์ ๋ก์ง์ ์ ์ฉํ๋ ๊ธฐ๋ฅ์ ๊ณตํต์ผ๋ก ์ ์ฉํ ์ ์์ด์ผ ํ๋ค. ์คํ๋ง์์ ์ ๊ณตํ๋ ์ถ์ํ๋ ํ๋ก์ ๊ธฐ์ : ProxyFactory ์คํ๋ง์ ๋์ ํ๋ก์๋ฅผ ํตํฉํ์ฌ ์์ฑํด ์ฃผ๋ ํ๋ก์ ํฉํ ๋ฆฌ(Proxy Factory) ๋ผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ด์ ์๋ ์ธํฐํ์ด์ค์ ์ ๋ฌด์ ๋ฐ๋ผ JDK ๋์ ํ๋ก์๋ CGLIB ์ ์ ํํด์ผ ํ๋ค๋ฉด, ์ด์ ๋ Proxy Factory ํ๋๋ก ํธ๋ฆฌํ..
2022.06.03 -
[Spring] ๋์ ํ๋ก์ ๊ธฐ์ (3) - CGLIB
์ง๋ ํฌ์คํ ์์ JDK ๋์ ํ๋ก์๋ฅผ ์ ์ฉํ๊ธฐ ์ํด์ ์ธํฐํ์ด์ค๊ฐ ํ์๋ผ๊ณ ํ๋ค. ์ธํฐํ์ด์ค๊ฐ ์๊ณ ๊ตฌ์ฒด ํด๋์ค๋ง ์๋ ๊ฒฝ์ฐ, CGLIB ๋ฐ์ดํธ์ฝ๋ ์กฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ๋์ ํ๋ก์๋ฅผ ์ ์ฉํ ์ ์๋ค. CGLIB : Code Generator Library CGLIB : ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์กฐ์ํด์ ๋์ ์ผ๋ก ํด๋์ค๋ฅผ ์์ฑํ๋ ๊ธฐ์ ์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ธํฐํ์ด์ค ์์ด ๊ตฌ์ฒดํด๋์ค ๋ง์ผ๋ก ๋์ ํ๋ก์๋ฅผ ๋ง๋ค์ด ๋ผ ์ ์๋ค. ์๋๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ๋ฐ, ์คํ๋ง ํ๋ ์์ํฌ ๋ด๋ถ ์์ค ์ฝ๋์ ํฌํจ๋ผ ์๋ค. ์ฐธ๊ณ ๋ก ๊ฐ๋ฐ์๊ฐ ์ง์ CGLIB ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์๋ค. ๋ค์ ํฌ์คํ ์์ ๋ค๋ฃฐ ProxyFactory ๊ฐ CGLIB ์ฌ์ฉ์ ํธ๋ฆฌํ๊ฒ ๋์์ฃผ๊ธฐ ๋๋ฌธ์, ๋๋ฌด ๊น์ด์๊ฒ ํ๊ธฐ๋ณด๋ค๋ CGLIB ๊ฐ ๋ฌด์์ธ์ง ๋๋ต ๊ฐ..
2022.06.02 -
[Spring] ๋์ ํ๋ก์ ๊ธฐ์ (2) - JDK DynamicProxy
๋์ ํ๋ก์ ๊ธฐ์ ์ ์ธ์ ์ฌ์ฉ๋ ๊น? ํ๋ก์ ๊ธฐ์ ์ ์ ์ฉํ๊ธฐ ์ํจ์ธ๋ฐ, ์์ ๋์ ์ด๋ผ๋ ๋จ์ด๊ฐ ์ ๋ถ์๋์ง ์๊ฐํด๋ณด์. ๋ง์ฝ 100๊ฐ์ ํด๋์ค๊ฐ ํ๋ก์ ์ ์ฉ ๋์์ด๋ผ๊ณ ํ์. ๊ทธ๋ผ 100๊ฐ์ ํด๋์ค์ ์ ์ฉํ 100๊ฐ์ ํ๋ก์๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๋ง๋ค์ด์ผํ ๊น? ๋จ์ ๋ก๊ทธ๋ฅผ ์ ์ฉํ๋ ๊ธฐ๋ฅ์ ํ๋ก์๋ผ๋ฉด, ๋ก์ง์ ๊ฐ์๋ฐ ์ ์ฉ ๋์์๋ง ์ฐจ์ด๊ฐ ์๋ ๊ฒ์ด๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๊ฒ์ด ๋์ ํ๋ก์ ๊ธฐ์ ์ด๋ค. ๋์ ํ๋ก์ ๊ธฐ์ ์ ํ์ฉํ๋ฉด ๊ฐ๋ฐ์๊ฐ ๋งค๋ฒ ํ๋ก์ ํด๋์ค๋ฅผ ๋ง๋ค์ง ์์๋ ๋๋ค. ์ด๋ฆ๋๋ก ํ๋ก์ ๊ฐ์ฒด๋ฅผ ๋์ ์ผ๋ก ๋ฐํ์์ (๊ฐ๋ฐ์ ๋์ ) ๋ง๋ค์ด์ค๋ค. ๊ทธ๋ผ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ์ด๋ค์์ผ๋ก ๋์ ํ๋ก์๊ฐ ์์ฑ๋๊ณ ์ ์ฉ๋๋์ง ํ์ธํด๋ณด์. ์ฐธ๊ณ ๋ก JDK ๋์ ํ๋ก์๋ ์ธํฐํ์ด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ ํ๋ก์๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์, ์ธํฐํ..
2022.06.02 -
[Spring] ๋์ ํ๋ก์ ๊ธฐ์ (1) - ๋ฆฌํ๋ ์
๋ก๊น ๋ฑ์ ๋ถ๊ฐ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ํด ํ๋ก์ ํด๋์ค๋ฅผ ๋งค๋ฒ ๋ง๋ค๊ธฐ์, ์ ์ฉ ๋์ ํด๋์ค ์ ๋งํผ ํ๋ก์ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋ ๋ฌธ์ ๊ฐ ์๋ค. ๋ก๊ทธ ์ถ์ ์ ์ํ ํ๋ก์ ํด๋์ค์ ์์ค์ฝ๋๋ ๊ฑฐ์ ๊ฐ์ ๋ชจ์์ ํ๊ณ ์๋ค. ๊ฐ์ ๋ชจ์์ ํด๋์ค๋ฅผ ์ฌ๋ฌ๊ฐ ๋ง๋๋ ๊ฒ์ ๋นํจ์จ์ ์ผ ๋ฟ๋๋ฌ SRP ์์น์ ์๋ฐฐํ๊ธฐ ๋๋ฌธ์, ๋์ ํ๋ก์ ๊ธฐ์ ์ ํ์ฉํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ์ ์ง์ ์ผ๋ก ํด๊ฒฐํด๋ณด์. ๋ฆฌํ๋ ์ ์ด๋? ๊ฐ์ฒด๋ฅผ ํตํด ํด๋์ค์ ๋ฉํ์ ๋ณด๋ฅผ ๋ถ์ํ๋ ํ๋ก๊ทธ๋จ ๊ธฐ๋ฒ์ ์๋ฏธํ๋ค. ํฌ์, ๋ฐ์ฌ๋ผ๋ ์ฌ์ ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋๋ฐ, ํด๋์ค์ ๋ฉํ์ ๋ณด๋ฅผ ํฌ์ํ๋ค๊ณ ์ดํดํ๋ฉด ๋๋ค. ๊ทธ๋ผ ๋ญํ๋ฌ ๊ตณ์ด ๊ฐ์ฒด๋ฅผ ํตํด ํด๋์ค์ ์ ๋ณด๋ฅผ ์์๋ด์ผํ ๊น? ๊ตฌ์ฒด์ ์ธ ํด๋์ค์ ํ์ ์ ์์ง ๋ชปํด๋, ํด๋น ํด๋์ค๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋, ํ์ , ๋ณ์ ๋ฑ์ ์ ๊ทผํด์ผ ํ ๊ฒฝ์ฐ๊ฐ ์..
2022.06.02 -
[Spring] ์์ ๋ก ์์๋ณด๋ [ ์ ๋ต ํจํด ]
์ด์ ํฌ์คํ ์์ ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด์ ์์๋ดค๊ณ , ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด์ ์์์ด๋ผ๋ ํ๊ณ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ ๋ต ํจํด์ ํ์ฉํ๊ธฐ๋ก ํ๋ค. ์ ๋ต ํจํด ํ ํ๋ฆฟ ํจํด์ ๋ถ๋ชจ ํด๋์ค์ ๋ณํ์ง ์๋ ํ ํ๋ฆฟ์ ๋๊ณ , ๋ณํ๋ ๋ถ๋ถ์ ์์ ํด๋์ค์์ ์์ํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. ์ ๋ต ํจํด์ ๋ณํ์ง ์๋ ๋ถ๋ถ์ Context ๋ผ๋ ๊ฐ๋ ์ ๋๊ณ , ๋ณํ๋ ๋ถ๋ถ์ Strategy ๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์ด ๊ตฌํํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. ์ฆ ์์์ด ์๋๋ผ ์์ / ๊ตฌํ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ด๋ค. ์ ๋ตํจํด์์ Context ๋ ๋ฌด์์ผ๊น? ๋ฐ๋ก ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด์ ํ ํ๋ฆฟ์ ํด๋น๋๋ ๊ฐ๋ ์ผ๋ก, ์ฌ๊ธฐ์๋ ๋ฌธ๋งฅ ์ ๋๋ก ์ดํดํ๋ฉด ๋๋ค. ๊ฐ๋ณ ๋น์ฆ๋์ค ๋ก์ง์ ๋ณํ ์ ์์ง๋ง, ๊ทธ๊ฑธ ๊ตฌํํด์ผํ๋ ์ ์ฒด์ ์ธ ๋ฌธ๋งฅ์ ์ ๋ณํ์ง ์๊ธฐ ๋๋ฌธ์, ๋ณํ์ง ์๋ ๋ก..
2022.05.31 -
[Spring] ์์ ๋ก ์์๋ณด๋ [ ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด ]
ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด - ์ฌ์ ์ ์ ์ / ๋ชฉ์ "์์ ์์ ์๊ณ ๋ฆฌ์ฆ์ ๊ณจ๊ฒฉ์ ์ ์ํ๊ณ , ์ผ๋ถ ๋จ๊ณ๋ฅผ ํ์ ํด๋์ค๋ก ์ฐ๊ธฐํ๋ค. ํ ํ๋ฆฟ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ ํด๋์ค๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋, ์๊ณ ๋ฆฌ์ฆ์ ํน์ ๋จ๊ณ๋ฅผ ์ฌ์ ์ํ ์ ์๋ค. [GOF] " ์ด๊ฒ ๋ฌด์จ ์๋ฆฌ์ธ๊ฐ~ ์์๋ณด๊ธฐ ์ํด ์คํ๋ง ์์ ์ฝ๋๋ก ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด์ ์์๋ณด๊ฒ ๋ค. ์ค๋ณต๋๋ ๋ก์ง์ ๋ฐ๋ณต ์๋ ์ฝ๋๋ ์ปจํธ๋กค๋ฌ์ request ๋ฉ์๋์ trace ๋ผ๋ ๋ก๊ทธ๋ฅผ ์ฝ์ ํ ์ฝ๋๋ค. ํต์ฌ ๋ก์ง์ orderService.orderItem(itemId) ์ return "ok" ๋ถ๋ถ์ด ์ ๋ถ์ธ๋ฐ, ๋ก๊ทธ ํธ๋ํน์ ํ๋ฉด์ ๋ถ๊ฐ์ ์ธ try ~ catch ๊ตฌ๋ฌธ์ด ๋ถ์ด ์ฝ๋๊ฐ ๋น๊ต์ ์ง์ ๋ถํด ๋ณด์ธ๋ค. @RestController @RequiredArgsC..
2022.05.31 -
[Spring] ์ค๋ ๋ ๋ก์ปฌ, ThreadLocal
์ค๋ ๋ ๋ก์ปฌ ์ฌ๋ฌ๊ฐ์ ์ค๋ ๋๊ฐ ์กด์ฌํ ๋, ํด๋น ์ค๋ ๋๋ง ์ ๊ทผํ ์ ์๋ ํน๋ณํ ์ ์ฅ์๋ฅผ ์๋ฏธํ๋ค. ๋ ํ์ด์ ์ด์ผ๊ธฐ ํด๋ณด์. ๋ง์ฝ ์๋ก ๋ค๋ฅธ ๋ ์ค๋ ๋๊ฐ ํ๋์ ๋ณ์์ ์ ๊ทผํ๋ค๊ณ ํ ๋, ์ด ๋ณ์๋ ๊ณต์ ์์์ผ๋ก ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋ค๋ถํ๋ค. ThreadLocal ํด๋์ค๋ ์ค์ง ํ ์ค๋ ๋์ ์ํด ์ฝ๊ณ /์ฐ์ฌ์ง ์ ์๋ ๋ณ์๋ฅผ ์์ฑํ๋ค. ๊ฐ๋ น Thread A ๊ฐ ThreadLocal ๋ณ์( tLocal ) ์ ์ ๊ทผํ์ฌ a ๋ผ๋ ๋ฌธ์๋ฅผ ์ ์ฅํ๋ค๊ณ ํ์. ๋์์ Thread B ์์ ๋ง์ฐฌ๊ฐ์ง๋ก tLocal ๋ณ์์ ์ ๊ทผํ์ฌ, b ๋ผ๋ ๋ฌธ์๊ฐ์ ์ ์ฅํ๋ค๊ณ ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? a ๋ผ๋ ๋ฌธ์๋ฅผ b ๊ฐ ๋ฎ์ด ๋ฒ๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ, ์๋ ์ฒ๋ผ ๊ฐ ์ค๋ ๋๋ณ ์ ์ฉ ์ ์ฅ์์ ๊ฐ๊ฐ์ ๊ฐ์ด ์ ์ฅ๋๋ค. ์ฆ ๋ฉํฐ ์ค๋ ๋ ํ..
2022.05.31 -
[JUnit5] java.lang.IllegalStateException: Failed to load ApplicationContext
์ค๋ฅ ์ํฉ : ๊ธฐ์กด์ ์ ์งํ๋๋ JUnit5 ํ ์คํธ์ฝ๋๊ฐ ์ด๋์๊ฐ ๋์ํ์ง ์์๋ค. ์๋ฌ ๋ฉ์์ง : java.lang.IllegalStateException: Failed to load ApplicationContext ๊ตฌ๊ธ๋ง์ผ๋ก ์ฌ๋ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์๋ดค์ ๋ 1. ํ ์คํธ ํด๋์ค์ @WebAppConfiguration ์ด๋ ธํ ์ด์ ์ถ๊ฐ. -> ์คํจ , ์ฌ์ ํ ๊ฐ์ ์๋ฌ๋ฉ์์ง๊ฐ ๋์๋ค. -> @WebAppConfiguration ํด๋น ์ด๋ ธํ ์ด์ ์ JUnit4 ๋ฅผ ์ฌ์ฉํ ๋ ์ ์ฉํ ์ ์๋ ํด๊ฒฐ์ฑ ์ด๋ผ๊ณ ํ๋ค. 2. Main Application ์ ์คํํด๋ณด์. -> ์ด ๋ถ๋ถ์ด ํด๊ฒฐ์ ์ค๋ง๋ฆฌ๋ฅผ ์คฌ๋๋ฐ, ํ ์คํธ ์ฝ๋๋ง ๊นจ์ง๋ ์ค ์์๋๋ ์ ์ด์ main application ์คํ์กฐ์ฐจ ๋์ง ์๊ณ ์์๋ค. -> ๋ด..
2022.04.08 -
[Springboot] java: You aren't using a compiler supported by lombok, so lombok will not work and has been disabled.
์ํฉ ํ๋ก์ ํธ ์ธํ ๋จ๊ณ์์ @Slf4j ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ log ๋ฅผ ์ ์ฉ ํ ๋ฉ์ธ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ๋ฐ์ํ ์๋ฌ. java: You aren't using a compiler supported by lombok, so lombok will not work and has been disabled. Your processor is: com.sun.proxy.$Proxy24 Lombok supports: sun/apple javac 1.6, ECJ ํด๊ฒฐ mac os ๊ธฐ์ค Intellij -> preference ์ ๋ค์ด๊ฐ๋ค. Shared build process VM options: ์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ค. -Djps.track.ap.dependencies=false ์ ๊ณผ์ ์ ์๋ฃ ํ ์ฌ๋น๋ํ๋ฉด ..
2022.03.05