์ ์ฒด ๊ธ (74) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [Spring] Spring Core(1): ์คํ๋ง ๋น(Spring Bean)์ ๊ฐ๋ , Component, Controller, Service, Repository์ ์ญํ ์คํ๋ง ๋น(Spring Bean)์ด๋? Spring IoC ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ์๋ฐ ๊ฐ์ฒด IoC(Inversion Of Control)์ด ๋ญ๊น? ์ ์ด์ ์ญ์ ์ด๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ์๋ฐ ํ๋ก๊ทธ๋จ์์๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ํ๋ ํด๋์ค ๋ด์์ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์์ฑํด ์ฌ์ฉํ๋ค. ์ด ๊ฒฝ์ฐ ํ๋ก๊ทธ๋๋จธ๊ฐ ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์๋ค. ์ ์ด์ ์ญ์ ์ด ์ผ์ด๋๋ฉด, ํ๋ก๊ทธ๋๋จธ๊ฐ ์๋ ๋ค๋ฅธ ๋ฌด์ธ๊ฐ๊ฐ ๊ด๋ฆฌ๋ฅผ ์์ํ๊ฒ ๋๋ค. ํ๋ก๊ทธ๋๋จธ์ ์ ์ด ๊ถํ์ ๋ค๋ฅธ ์ฃผ์ฒด์๊ฒ ๋๊ธฐ๋ ๊ฒ์ IoC(์ ์ด์ ์ญ์ ) ์ด๋ผ๊ณ ํ๋ค. Spring์ ์ง์ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ด ๊ด๋ฆฌ ์์ ์ฃผ์ฒด๋ Spring์ด ๋๋ค. Spring์ด ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ Bean์ด๋ผ๊ณ ํ๋ค. Spring Framework์์๋.. Spring Batch ์๋ฆฌ์ ์ฒ ํ ์ดํด 1. ๋ฐฐ์น ํ๋ก๊ทธ๋จ์ด๋ ๋ฌด์์ธ๊ฐ? 2. ๋ฐฐ์น ์ฌ์ฉ ์ ์ ์ฐ ์์คํ ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์ ( ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ํน์ ์๊ตฌ์ฌํญ์ ์ํด ๋ค๋ฅธ ํ ์ด๋ธ, ๋ค๋ฅธ DB๋ก ์ด๋ ) ์ฝ๊ด ๋ณ๊ฒฝ ๋ฉ์ผ ํต๊ณ ๊ฒ์ ๋ญํน ์ผํ๋ชฐ ๋ฐฐ์ก ์์ฒญ ๋ฑ๋ฑ 3. ๋ฐฐ์น์ ํน์ง ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋งค๋ฒ ์ฒ๋ฆฌํ๋๊ฒ์ ๊ฐ๋น์ธ๊ณ ํฌ๊ฒ ์๋ฏธ๊ฐ ์๋ ํ์ ๊ทธ๋์ ๋ฐฐ์น์ฒ๋ฆฌ๋ฅผ ํตํด ํ๋ฒ๋ง ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ๋ฌผ์ ์บ์ํ์ฌ ์ฌ์ฉ์๊ฒ์ ์ ๊ณตํ ์ ์์. ์ฌ์ฉ์๊ฐ ์๋ ๋ค์ ๋งํด ์์์ด ๋ง์ ์ผ๊ฐ ์๊ฐ๋์ ๋ฐฐ์น๋ฅผ ๋๋ฆผ์ผ๋ก์จ ํ์กฑํ ์์ ํ์ฉํ ์ ์๋ค. ๋๋์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ฃผ๋ก ์ ํด์ง ์๊ฐ์ ๋ฐ๋ณต์ ์ผ๋ก ์๋ ์คํ ex) ์ ์ฐ์์คํ ์ผ๊ฐ,์ฃผ๊ฐ,์๊ฐ ์ฌ์ฉ์์์ ์ํธ์์ฉ ์์ด๋ ๋์ ex) ์ฝ๊ฐ ๋ณ๊ฒฝ ๋ฉ์ผ ์ ์ก ์ค์๊ฐ์ฑ ๊ฒฐํ ์๋ชป ๋์ํ๋ฉด ํฐ ๋ฌธ์ .. [Java] ConcurrentHashMap ๊ฐ๋ ๊ณผ ๋๊ธฐํ ๋์ ์๋ฆฌ (Thread-safe) ๋ฉํฐ ์ค๋ ๋(Multi-Thread) ํ๊ฒฝ์์ ๋์์ฑ ์ด์๋ก ์ธํด ConcurrentHashMap์ ์ฌ์ฉํด ๋ณด๋ฉด์ ์ ๋ฆฌํ ๊ฒ์ผ๋ก `ConcurrentHashMap์ ๊ฐ๋ ๊ณผ ํด๋น ํด๋์ค๊ฐ Thread-safe ํ๊ฒ ๋์ํ ์ ์๋ ๋์์๋ฆฌ`์ ๋ํ ๋ด์ฉ ์ ๋๋ค. Synchronized ํค์๋ Synchronized ํค์๋ ์๋ ConcurrentHashMap์ ์ดํดํ๋ ๋ฐ ์์ด์ ์ค์ํ ์์ ์ค ํ๋๋ผ๊ณ ์๊ฐ๋๋๋ฐ์. ๋ฉํฐ์ค๋ ๋(Multi-Thread) ํ๊ฒฝ์์๋ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ํ๋์ ๊ณต์ ์์์ ๋์์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ๋ง๋ '์ค๋ ๋ ๋๊ธฐํ'๊ฐ ํ์์ ์ ๋๋ค. (์ค๋ ๋ ๋๊ธฐํ๊ฐ ๋์ง ์๋ ๊ฒฝ์ฐ ์ฌ๋ฌ ์ค๋ ๋์์ ์๋ก ๊ณต์ ํ๊ณ ์์ ํ ์ ์๋ ๋ฐ์ดํฐ์ ๋ํ ์์ ์ฑ๊ณผ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ ์ ์๊ฒ ๋ฉ๋๋ค.) ๊ทธ๋ฆฌ๊ณ .. [Spring Webflux] ์คํ๋ง ์นํ๋ญ์ค(MVC์ ๋น๊ต, ๋ด๋ถ ๋์ ์๋ฆฌ, Netty) Spring WebFlux ํ์ ๋ฐฐ๊ฒฝ Spring MVC ์๋ธ๋ฆฟ ๊ธฐ๋ฐ์ Blocking I/O ๋ฐฉ์ ์์ฒญ๋น ํ๋์ ์ค๋ ๋๋ฅผ ์ฌ์ฉ, ์ค๋ ๋์ ์์ ์ด ๋๋ ๋ ๊น์ง ์ค๋ ๋๊ฐ ์ฐจ๋จ๋จ Spring MVC์ ํ๊ณ ๋์ฉ๋ ์์ฒญ ํธ๋ํฝ์ Spring MVC ๋ฐฉ์์ด ์ฒ๋ฆฌํ๊ธฐ์ ํ๊ณ๊ฐ ์์๋ค. ํธ๋ํฝ์ด ๋ง์์ง๋ฉด ๋ง์์ง์๋ก ์ค๋ ๋๋ ๋ง์ด ์ฌ์ฉ๋๋๋ฐ, ์ค๋ ๋ํ์ ์ค๋ ๋ 200๊ฐ๊ฐ default๋ก ์กด์ฌํ๊ณ , ๋ง์ฝ ๋ง๋ช ์ด ๋์ ์ ๊ทผํ๋ค๋ฉด...? ์ค๋ ๋ ์ค์์นญ๋น์ฉ๋ ๊ทธ๋งํผ ๋ง์ด ๋ฐ์ํ๋ค. Spring WebFlux๋ฅผ ์ด์ฉํ ๊ทน๋ณต ๋์ฉ๋ ํธ๋ํฝ์ ๊ฐ๋นํ๊ธฐ ์ํด์ , ๋น๋๊ธฐ/๋ ผ๋ธ๋กํน ๋ฐฉ์์ I/O๋ฅผ ์ฌ์ฉํด์ผ ํ์ผ๋ฉฐ ์ด ๋ฐฉ์์ด ์ ์ฉ๋์ด, ๋์ฉ๋๋ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ Spring WebFlux๊ฐ ์๊ฒจ๋จ๋ค. ** ์์๋ฅผ ํตํด MVC.. ChatGPT ๋ฅผ 200% ํ์ฉํ๋ ๋ฐฉ๋ฒ! feat. ํ๋กฌํํธ ์์ง๋์ด๋ง ์ค๋์ ChatGPT๋ฅผ ์ต์ ํํ๋ ํ๋กฌํํธ ๊ธฐ๋ฒ์ ๊ณต์ ํด ๋ณด๊ฒ ์ต๋๋ค. ChatGPT๋ ๋์ ์์ ์ ์ํํ๋ ๋๊ตฌ๊ฐ ์๋๋ผ ์์ฐ์ฑ์ ๋์ฌ์ฃผ๋ ๋๊ตฌ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํผ๋ ๋ํ๊ต์์ ์ค์ํ ์ต๊ทผ ์ฐ๊ตฌ์ ๋ฐ๋ฅด๋ฉด, ์คํ ์ค๋ฒํ๋ก์ฐ์์ 517๊ฐ์ ์ฝ๋ฉ ๋ฌธ์ ๋ฅผ ์ ์ํ์ ๋ ChatGPT๋ 52%์ ๊ฒฝ์ฐ ๋ถ์ ํํ๊ฑฐ๋ ์๋ํ์ง ์๋ ์ฝ๋๊ฐ ํฌํจ๋ ๋ต๋ณ์ ์ ๊ณตํ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์คํ ์ค๋ฒํ๋ก์ฐ ๋ต๋ณ๊ณผ ChatGPT ๋ต๋ณ์ ๋น๊ตํ ์ ์๋๋ฐ, ์ด ์ฐ๊ตฌ์ ๋ฐ๋ฅด๋ฉด ChatGPT๋ ์คํ ์ค๋ฒํ๋ก์ฐ์ ๋นํด ์ ํ์ฑ, ํฌ๊ด์ฑ, ๊ฐ๊ฒฐ์ฑ ๋ฐ ์ ์ฉ์ฑ์์ ๋ฎ์ ์์๋ฅผ ์ฐจ์งํ์ต๋๋ค. ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ ์ด ๋ชจ๋ธ์ด ์ ๋ต์ด ํ๋ฆฌ๊ฑฐ๋ ๋ฐ๋ง ๋ง๋๋ผ๋, ์์ ๊ฐ ์๋ ์ธ์ด๋ก ์ค๋๋ ฅ ์๋ ๋ต๋ณ์ ์์ฑํ๋ ๊ฒ์ผ๋ก ๋ฐํ์ก๋ค๋ ์ ์ ๋๋ค. ๋๋๋ก ํ๊ฐ์ ๋ณด๊ณ .. [Netty] @Sharable ์ด๋ ธํ ์ด์ ๊ณผ ChannelHandler ์ธ์คํด์ค ๊ด๋ฆฌ Netty๋ฅผ ์ฌ์ฉํ๋ฉด์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ChannelHandler์ ์ญํ ๊ณผ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ํนํ, @Sharable ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉ๊ณผ ๊ฐ ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ์ ๋ํ ChannelHandler ์ธ์คํด์ค ์์ฑ ๋ฐฉ์์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. 'ChannelHandler'์ '@Sharable'์ ์ดํด ChannelHandler๋ Netty์์ ๋คํธ์ํฌ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฃผ์ ๊ตฌ์ฑ ์์์ ๋๋ค. ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ, ๋ฐ์ดํฐ ์์ ๋ฑ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋๋ง๋ค Netty๋ ํด๋น ChannelHandler๋ฅผ ํตํด ์ด๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. @Sharable ์ด๋ ธํ ์ด์ ์ ํ๋์ ChannelHandler ์ธ์คํด์ค๊ฐ ์ฌ๋ฌ ChannelPipeline ์์ ์์ .. [Java] Reactor ํจํด๊ณผ ์ด๋ฒคํธ ๋ฃจํ Reactor ํจํด Reactor ํจํด์ ๋์์ ๋ค์ด์ค๋ ์ฌ๋ฌ ์ข ๋ฅ์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋์์ฑ์ ๋ค๋ฃจ๋ ๋์์ธ ํจํด ์ค ํ๋์ ๋๋ค. Reactor ํจํด์ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋๊น์ง ๋๊ธฐํ๋ค๊ฐ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ํด๋น ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ํธ๋ค๋ฌ(handler)์๊ฒ ๋์คํจ์น(dispatch)ํ๋ ๋ฐฉ์์ผ๋ก ์ด๋ฒคํธ์ ๋ฐ์ํ๋ ํจํด์ผ๋ก '์ด๋ฒคํธ ํฌ๋ค๋ง(event handling)'ํจํด์ด๋ผ๊ณ ๋ ๋ถ๋ฆ ๋๋ค. Reactor ํจํด์ ํฌ๊ฒ Reactor์ ํธ๋ค๋ฌ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. Reactor: ๋ฌดํ ๋ฐ๋ณต๋ฌธ์ ์คํํด ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋๊น์ง ๋๊ธฐํ๋ค๊ฐ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์ฒ๋ฆฌํ ์ ์๋ ํธ๋ค๋ฌ์๊ฒ ๋์คํจ์นํฉ๋๋ค. ์ด๋ฒคํธ ๋ฃจํ๋ผ๊ณ ๋ ๋ถ๋ฆ ๋๋ค. ํธ๋ค๋ฌ: ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ํ์ํ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํฉ๋๋ค. ์ธ๋ถ์ .. [Java] Java NIO์ ๋ฉํฐํ๋ ์ฑ ๊ธฐ๋ฐ์ ๋ค์ค ์ ์ ์๋ฒ Java NIO์ ๋ฉํฐํ๋ ์ฑ ๊ธฐ๋ฐ์ ๋ค์ค ์ ์ ์๋ฒ Java NIO๋ Java์ ๊ธฐ์กด I/O API๋ฅผ ๋์ฒดํ๊ธฐ ์ํด Java 1.4 ๋ฒ์ ์์ ๋์ ๋ I/O API์ ๋๋ค. ์๋ก ๋ฐ๋ ๋ถ๋ถ์ ๊ฐ๋ตํ ์์ฝํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ฑ๋๊ณผ ๋ฒํผ Java NIO์์๋ ์ฑ๋๊ณผ ๋ฒํผ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋ฒ์์ ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์ฑ๋์ ํตํด์ ๋ฒํผ(ByteBuffer)๋ฅผ ์ด์ฉํด ์ฝ๊ณ ์๋๋ค. ๋ ผ๋ธ๋กํน(non-blocking) I/O Java NIO์์๋ ๋ ผ๋ธ๋กํน I/O๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. ์ค๋ ๋๊ฐ ๋ฒํผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๋ฌ๋ผ๊ณ ์ฑ๋์ ์์ฒญํ๋ฉด, ์ฑ๋์ด ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ์ฑ์ ๋ฃ๋ ๋์ ํด๋น ์ค๋ ๋๋ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ์ดํ ์ฑ๋์ด ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ์ฑ์ ๋ฃ๊ณ ๋๋ฉด ์ค๋ ๋๋ ํด๋น.. ์ด์ 1 ยทยทยท 5 6 7 8 9 10 ๋ค์