๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ

๐Ÿ’Š Java & Kotlin & Spring53

[JUnit 5] @ParameterizeTest ๋กœ ํ•˜๋‚˜์˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ํ…Œ์ŠคํŠธํ•˜๊ธฐ (Springboot + ControllerAdvice, ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ) ์˜ค๋Š˜์€ JUnit5 ์˜ @ParameterizedTest ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ•„์š” ๊ธฐ์ˆ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. SpringBoot 2. JUnit 5 Validation ControllerAdvice ์ด์™€ ๊ฐ™์€ DTO ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. @NotBlank๋‚˜ @Size๋‚˜ @Email ์€ ๋ชจ๋‘ validation ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, ๋งŒ์•ฝ ์ด ์ž…๋ ฅ ๊ฐ’๋“ค ์ค‘์—์„œ ํ•ด๋‹น constraint๋ฅผ ๋งŒ์กฑ์‹œํ‚ค์ง€ ๋ชปํ•œ๋‹ค๋ฉด MethodArgumentNotValidException ์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ๊ทธ๋Ÿผ ControllerAdvice๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๋‹น ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์„ ๋•Œ ErrorResponse๋ฅผ ์‘๋‹ตํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด๋ณด์ž. ControllerErrorAdvice.class @ResponseBod.. 2021. 4. 19.
[Spring Framework] Spring-Core(BeanFactory ์ธํ„ฐํŽ˜์ด์Šค) ๋ถ„์„ ๋ฐ ๊ตฌํ˜„ ์ด ๊ธ€์€ Spring์˜ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ํ•ด์„ํ•˜๊ณ  ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ๊ธ€์ด๋ฏ€๋กœ ๊ณต์‹ ๋ฌธ์„œ์— ๊ฐœ์ธ์˜ ์ƒ๊ฐ๊ณผ ์ถ”์ธก์ด ํฌํ•จ๋œ ๊ธ€์ด๋‹ˆ ์ด ์  ์ฐธ๊ณ ํ•˜๊ณ  ์ฝ์–ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์˜ค๋Š˜ ์•Œ์•„๋ณผ ๊ฒƒ์€ Spring-Framework-Core์˜ BeanFactory์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค. Interface BeanFactory Spring ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋Š” BeanFactory์ธํ„ฐํŽ˜์ด์Šค๋ฅผ Spring ์ปจํ…Œ์ด๋„ˆ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ Root ์ธํ„ฐํŽ˜์ด์Šค๋ผ๊ณ  ์ •์˜ํ•œ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐ๊ฐ String ์ด๋ฆ„์œผ๋กœ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„๋˜๋Š” ์—ฌ๋Ÿฌ Bean ์ •์˜๋ฅผ ๋ณด์œ ํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ์— ์˜ํ•ด ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ๋นˆ ์ •์˜์— ๋”ฐ๋ผ ํŒฉํ† ๋ฆฌ๋Š” ํฌํ•จ ๋œ ๊ฐ์ฒด์˜ ๋…๋ฆฝ ์ธ์Šคํ„ด์Šค (Prototype ๋””์ž์ธ ํŒจํ„ด) ๋˜๋Š” ๋‹จ์ผ ๊ณต์œ  ์ธ์Šคํ„ด์Šค (์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฒ”์œ„์˜ ์‹ฑ๊ธ€ ํ†ค ์ธ Singl.. 2020. 9. 7.
[Spring Framework] AOP์— ๋Œ€ํ•œ ์šฉ์–ด๋“ค๊ณผ ๊ธฐ๋ณธ ์ปจ์…‰์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž. ์˜ค๋Š˜์€ Spring์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ค‘ ํ•˜๋‚˜์ธ AOP (Aspect Oriented Programming)์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž. AOP ์‚ฌ์ „์  ์˜๋ฏธ์ธ AOP๋Š” ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ฅผ ํ—ˆ์šฉํ•จ์œผ๋กœ ๋ชจ๋“ˆ์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋‹ค. ์ข…๋‹จ ๊ด€์‹ฌ์‚ฌ๋ž€? ํ•˜๋‚˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋กœ์ง์ด ์ข…๋‹จ์˜ ๊ฐœ๋…์œผ๋กœ ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํšŒ์›๊ฐ€์ž…์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๋กœ์ง๋“ค์ด ํšŒ์›๊ฐ€์ž…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ด€์‹ฌ์‚ฌ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋”ฐ. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ฐ€์žฅ ์‹ซ์–ดํ•˜๋Š” ์ค‘๋ณต์ด ๋ฐœ์ƒํ•  ํ™•๋ฅ ์ด ๋†’์•„์ง„๋‹ค. ์šฐ๋ฆฌ๊ฐ€ DB Connection์— ๊ด€ํ•ด์„œ CRUD๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ชจ๋“  ๋ฉ”์„œ๋“œ์— Connection c์˜ ์ฝ”๋“œ๊ฐ€ ๊ณ„์† ์ค‘๋ณต๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค. ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ž€? ํ•˜์ง€๋งŒ ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ž€ ์—ฌ๋Ÿฌ ๋น„์ฆˆ๋‹ˆ์Šค.. 2020. 9. 5.
[Spring Framework] DI Application์„ ๋งŒ๋“ค์–ด๋ณด์ž. ์ด๋ฒˆ ๊ธ€์˜ ์†Œ์Šค ์ฝ”๋“œ๋Š” SKplanet Tacademy - Spring Framework Basic ๋™์˜์ƒ ๊ฐ•์˜ ์ž๋ฃŒ์— ์žˆ๋Š” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ง€๋‚œ ์‹œ๊ฐ„ IoC ์ปจํ…Œ์ด๋„ˆ์™€ DI์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…๊ณผ ์šฉ์–ด๋“ค์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋‹ค. ์ด์ œ ์˜ค๋Š˜์€ Ioc Container(DI Container)๋ฅผ ์–ด๋–ป๊ฒŒ Spring์—์„œ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž. POJO ํด๋ž˜์Šค ์ž‘์„ฑ ์„ค์ • ๋ฉ”ํƒ€์ •๋ณด XML ์ž‘์„ฑ DI ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค ์ž‘์„ฑ POJO ํด๋ž˜์Šค์˜ ๋‹ค์ด์–ด๊ทธ๋žจ ์šฐ๋ฆฌ๊ฐ€ ์˜ˆ์ œ๋กœ ๊ตฌ์„ฑํ•  POJOํด๋ž˜์Šค์˜ ๋‹ค์ด์–ด๊ทธ๋žจ์€ ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. Hello.class Printer.interface StringPrinter.class ConsolePrinter.class beans.xml :: XML ์„ค์ •.. 2020. 9. 5.
[Spring Framework] Spring์˜ ํ•ต์‹ฌ IoC/DI์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž. ์šฐ๋ฆฌ๋Š” ์ง€๋‚œ ์‹œ๊ฐ„ ๋ฌด์—‡์ด Framework์ด๋ฉฐ ์™œ Spring์ด์–ด์•ผ ํ•˜๋Š”๊ฐ€์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋‹ค. Framework์˜ ํŠน์„ฑ์ด IoC, ์ฆ‰ ์ œ์–ด์˜ ์—ญ์ „์ด๋ผ๊ณ  ํ•˜์˜€๋Š”๋ฐ ์˜ค๋Š˜์€ ๊ทธ ์ œ์–ด์˜ ์—ญ์ „์— ์˜๋ฏธ์™€ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ œ์–ด๋ฅผ ์—ญ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ DI์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค ํ•œ๋‹ค. ๊ฒฐ๋ก ์„ ๋ฏธ๋ฆฌ ๋ง ํ•˜์ž๋ฉด Spring IoC Container๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ์„ค์ •์„ ํ†ตํ•ด์„œ Bean์„ ๊ด€๋ฆฌํ•œ๋‹ค. ์ง€๊ธˆ ์ด ๋ง์„ ํ•˜๋‚˜๋„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์ด ์ •์ƒ์ด๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ์ง๋ฉดํ–ˆ์œผ๋‹ˆ ํ•˜๋‚˜ ํ•˜๋‚˜ Divide And Conquer ๋ฅผ ํ•ด๋ณด์ž ์šฐ๋ฆฌ๋Š” ์œ„์˜ ๋ฌธ์žฅ์„ ์ž˜๊ฒŒ ๋‚˜๋ˆ ๋ณผ ๊ฒƒ์ด๋‹ค. IoC Container Bean ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ด 3 ๊ฐ€์ง€๋งŒ ์•Œ๋ฉด ์œ„์˜ ๋ฌธ์žฅ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์กฐ๊ธˆ ๊ฐˆ ๊ฒƒ ๊ฐ™๋‹ค. IoC Container Fram.. 2020. 9. 4.
[Spring Framework] ์™œ Spring์ธ๊ฐ€? Spring์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์•Œ์•„๋ณด์ž ์ด๋ฒˆ ๊ธ€์€ GDG Spring Framework Study์—์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  Spring ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๊ณตํ†ต์ ์œผ๋กœ ์•Œ์•„์•ผํ•  Spring์˜ ์—ญ์‚ฌ์— ๋Œ€ํ•ด์„œ ์ž ์‹œ ์ด์•ผ๊ธฐํ•ด๋ณด๋ ค ํ•œ๋‹ค. Framework vs Library ์ผ๋‹จ Spring์„ ์‚ฌ์šฉํ•˜๊ธฐ์ „์— ๋ฌด์—‡์ด Library์ด๊ณ  ์™œ Framework์„ ์™œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ํƒ„์ƒํ–ˆ๋Š”์ง€๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋‹จ์ˆœ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ๋“ค์˜ ์ง‘ํ•ฉ์„ ๋งํ•œ๋‹ค. Library ์šฐ๋ฆฌ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์‹œ์— ๊ธฐ์กด์— ๋งŒ๋“ค์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ์žฌํ™œ์šฉํ•จ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ์ž‘ํ•œ๋‹ค. Framework ์™œ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํƒ„์ƒํ–ˆ๋Š”์ง€๋Š” ํ•œ ๋‹จ์–ด๋กœ ์ •๋ฆฌํ•˜์ž๋ฉด Choas State -> Reusable State ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๊ฒฐ๊ตญ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๋กœ ํ•˜๋‚˜์˜ ๋ผˆ๋Œ€๋ฅผ .. 2020. 9. 3.