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

๐Ÿ’Š Java & Kotlin & Spring/- spring framework +43

Spring Cloud Gateway ๋ฅผ ์ด์šฉํ•ด API Gateway๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์‹ค์Šตํ•ด๋ณด์ž (Eureka Server ๋ฅผ ์ด์šฉํ•ด Load Balancing ํ•˜๊ธฐ) ํ•ด๋‹น ๊ธ€์€ Spring Cloud Netflix Eureka์— ์˜์กดํ•˜๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค. ์‹ค์Šต ํ™˜๊ฒฝ์„ ๋”ฐ๋ผํ•˜์‹œ๋ ค๋ฉด Eureka ๊ธ€์„ ํ™•์ธํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋ชฉ์ฐจ Gateway Pattern Gateway๊ฐ€ ๋„์ž…๋˜๋ฉด? Spring Cloud Gateway Gateway๊ฐ€ ๋™์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ• Gateway ๋‚ด๋ถ€ ๊ตฌ์กฐ ์‹ค์Šตํ•˜๊ธฐ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ ์˜์กด์„ฑ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์—ฐ๊ฒฐํ•˜๊ธฐ Eureka Server ์—์„œ ๊ฐ๊ฐ ์ธ์Šคํ„ด์Šค ์ •๋ณด๋ฅผ ๋ฐ›์•„ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ํ•˜๊ธฐ Gateway Pattern Microservice ์—์„œ Gateway ํŒจํ„ด์€ ๊ฐ€์žฅ ํ”ํ•˜๊ณ  ์œ ์šฉํ•˜๊ฒŒ ์“ฐ๋Š” ํŒจํ„ด ์ค‘ ํ•˜๋‚˜์ด๋‹ค. Spring Cloud์™€ ๋ณ„๊ฐœ๋กœ Gateway ํŒจํ„ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์‚ฌํ•ญ์€ MSA์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ - API Gateway ํŒจํ„ด ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .. 2021. 4. 24.
[Spring Cloud] Service Discover Server๋กœ Netflix Eureka ์ด์šฉํ•˜๊ธฐ Spring Cloud Netflix ์Šคํ”„๋ง ํด๋ผ์šฐ๋“œ ๋„ทํ”Œ๋ฆญ์Šค๋Š” Spring Boot Application ์— ๋Œ€ํ•œ ํ†ตํ•ฉ ํ™˜๊ฒฝ ๊ตฌ์„ฑ์„ ์ง€์›ํ•˜๋Š” Netflix์˜ OSS ์„œ๋น„์Šค์ด๋‹ค. Netflix๋Š” 2007๋…„ ์‹ฌ๊ฐํ•œ DB์†์ƒ์œผ๋กœ 3์ผ๊ฐ„ ์„œ๋น„์Šค ์žฅ์• ๋ฅผ ๊ฒผ์—ˆ๋Š”๋ฐ, ์ด์— ์šด์˜์ง„๋“ค๊ณผ ๊ธฐ์ˆ  ๋ฆฌ๋”๋“ค์€ ์‹ ๋ขฐ์„ฑ ๋†’๊ณ  ์ˆ˜ํ‰ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•œ Cloud System์œผ๋กœ ์ด์ „์„ ํ•ด์•ผ ํ•จ์„ ๋А๊ผˆ์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฒฐ๊ตญ MSA๋ฅผ 7๋…„๋งŒ์— ์™„๋ฒฝํ•˜๊ฒŒ ์ด์ „ํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ์ด ๋•Œ ์Œ“์€ ๊ฒฝํ—˜์น˜๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ MSA ๊ธฐ์ˆ ์„ Spring์—๊ฒŒ ์˜คํ”ˆ์†Œ์Šค๋กœ ํ’€๊ฒŒ ๋˜์—ˆ๋‹ค. Netflix OSS ์™€ Spring Cloud Netflix Netflix OSS ์—๋Š” ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๋“ค์ด ์กด์žฌํ•œ๋‹ค. Eureka : Discovery Server ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค.. 2021. 4. 24.
[Spring Boot] JUnit5 BDDMockito๋กœ ์•Œ์•„๋ณด๋Š” TDD์™€ BDD ์˜ ์ฐจ์ด ๋ฐ BDD ์‹ค์Šต ๋ชฉ์ฐจ TDD ๋ž€? TDD ๋ž€? TDD ์˜ˆ์ œ BDD ๋ž€? BDD ๋ž€? BDD ์˜ˆ์ œ TDD vs BDD TDD์™€ BDD์˜ ํ•œ ํ‘œ ์š”์•ฝ BDDMockito๋ฅผ ์ด์šฉํ•œ BDD ์‹ค์Šต ํ™˜๊ฒฝ ๊ตฌ์„ฑ Mockito vs BDD Mockito Stubbing given any() anyString() anyLong() willReturn() will() willThrow() ๋ณธ ์ฃผ์ œ๋ฅผ ํ•™์Šตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Java์™€ JUnit5์™€ BDDMockito ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์˜์กด์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์ง€๊ธˆ๊นŒ์ง€ ๋А๋‚€ ๊ฐ€์žฅ ํฐ ๋ณ€ํ™”๊ฐ€ ๋‚˜์—๊ฒŒ๋Š” TDD๊ฐ€ ์•„๋‹๊นŒ ์‹ถ๋‹ค. ์šฐ์—ฐํ•œ ๊ธฐํšŒ์— TDD๋ฅผ ์Šค์Šค๋กœ ๋„์ž…ํ•˜์˜€์„ ๋•Œ, ๋‚ด๊ฐ€ ๋“ค์—ˆ๋˜ ์ฒซ ์ƒ๊ฐ์€ ๋„ˆ๋ฌด ๊ท€์ฐฎ์€๋ฐ,... ์ด๋ ‡๊ฒŒ ํ•˜๋‹ค๊ฐ€ ์–ธ์ œ ๋๋‚ด์ง€...? ์ด๊ฑฐ ๊ทธ๋ƒฅ ํ…Œ์ŠคํŠธ ์•ˆ ์งœ๊ณ  ๋ฐ”๋กœ ํ•  .. 2021. 4. 22.
[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.