Spring Framework

Spring Framework/Spring WebFlux

[Spring WebFlux] Spring WebFlux๋ž€?

Spring WebFlux๋Š” Reactive Stream API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ non-blocking, asynchronous๋ฅผ ์ง€์›ํ•˜๋Š” ๋น„๋™๊ธฐ ์Šคํ”„๋ง ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ์ด๋Š” ๋Œ€๋Ÿ‰์˜ ์›น ํŠธ๋ž˜ํ”ฝ (I/O๊ฐ€ ๋งŽ์€ ์›น ์„œ๋น„์Šค ๋กœ์ง)์—์„œ MVC์™€ ๋Œ€๋น„ํ•˜์—ฌ ํšจ์œจ์ ์ด๊ณ  ๋†’์€ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํ™œ์šฉ๋˜๊ณ  ์žˆ๋‹ค. ๋งค๋ฒˆ WebFlux์˜ ์„ฑ๋Šฅ์ด ์ข‹๋‹ค๊ณ ๋Š” ํ•  ์ˆ˜ ์—†์Œ! ๋”๋ณด๊ธฐ ๐Ÿ‘‰ ๊ทธ๋Ÿฌ๋ฉด ์ฃผ๋กœ ์–ด๋””์—์„œ ํ™œ์šฉ๋˜๋‚˜...? ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์—์„œ ๋‹ค์–‘ํ•œ ๋™์‹œ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” gateway server ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์œ„ํ•œ ์›น์†Œ์ผ“ ๋Œ€๋Ÿ‰์˜ I/O๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์„œ๋น„์Šค Spring MVC vs Spring WebFlux Spring ๊ณต์‹ ํŽ˜์ด์ง€์— ๋‚˜์™€์žˆ๋Š” ํ‘œ๋ฅผ ํ†ตํ•ด ๋‘˜์˜ ์ฐจ์ด์ ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. WebFlux๋Š” ๋น„๋™๊ธฐ/๋…ผ๋ธ”..

Spring Framework/โ˜๏ธ Spring Cloud

[Spring Cloud] ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•œ Apache Kafka ํ™œ์šฉ

Apache Kafka ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” Orders โž” Catalogs Order Service์— ์š”์ฒญ๋œ ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰ ์ •๋ณด๋ฅผ Catalog Service์— ๋ฐ˜์˜ Order Service์—์„œ Kafka Topic์œผ๋กœ ๋ฉ”์‹œ์ง€ ์ „์†ก โž” Producer Catalog Service์—์„œ Kafka Topic์— ์ „์†ก๋œ ๋ฉ”์‹œ์ง€ ์ทจ๋“ โž” Consumer Order-Service์™€ Catalog-Service์— Kafka ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์ถ”๊ฐ€ ZooKeeperServer์™€ KafkaServer ๊ธฐ๋™ + Eureka Server (discovery-service) ์‹คํ–‰ config-service, apigateway-service, order-service, catalog-service ์‹คํ–‰ ์ˆ˜๋Ÿ‰ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ Multip..

Spring Framework/โ˜๏ธ Spring Cloud

[Spring Cloud] Microservices๊ฐ„์˜ ํ†ต์‹  - RestTemplate & FeignClient

Microservices๊ฐ„์˜ ํ†ต์‹ ํ•˜๊ธฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ user-service์—์„œ userId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์š”์ฒญํ–ˆ์„ ์‹œ ์‚ฌ์šฉ์ž์˜ ์ฃผ๋ฌธ์ด๋ ฅ๊นŒ์ง€ ๊ฐ€์ ธ์™€์•ผํ•˜๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด๋ณด๋ฉด, ์š”์ฒญํ–ˆ๋˜ userId ๊ฐ’์„ order-service์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•ด์„œ ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ์ฃผ๋ฌธ์ด๋ ฅ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. RestTemplate๊ณผ FeignClient๋ฅผ ์ด์šฉํ•ด ํ•ด๋‹นํ•˜๋Š” ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€๋ณด์ž. RestTemplate RestTemplate์€ http ํ†ต์‹ ์„ ์œ ์šฉํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์Šคํ”„๋ง์—์„œ ์ œ๊ณตํ•˜๋Š” ํ…œํ”Œ๋ฆฟ์ด๋‹ค. Spring 5.0 ์ดํ›„๋ถ€ํ„ฐ ๋ ˆ๊ฑฐ์‹œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ฐ„์ฃผ๋˜์—ˆ๋‹ค. 1๏ธโƒฃ user-service์— RestTemplate์„ Spring Bean์œผ๋กœ ๋“ฑ๋ก @SpringBootApplication @Ena..

Spring Framework/โ˜๏ธ Spring Cloud

[Spring Cloud] Spring Cloud Bus์™€ RabbitMQ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Config ์ •๋ณด ๋ฐ˜์˜ํ•˜๊ธฐ

Configuration ์„œ๋ฒ„์—์„œ ์–ด๋– ํ•œ ๊ฐ’์„ ๋ณ€๊ฒฝ์‹œ์ผฐ์„ ๋•Œ microservices์— ๋ฐ˜์˜์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ ์ด์ „์—๋Š” actuator๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ๊ฐ๊ฐ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋งˆ๋‹ค ์ˆ˜๋™์œผ๋กœ refresh ์‹œ์ผœ์ฃผ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋‹นํžˆ ๋ฒˆ๊ฑฐ๋กญ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ๊ฐœ์„ ์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์ด Spring Cloud Bus ์ด๋‹ค. โ“Spring Cloud Bus๋ž€ ? ๋ถ„์‚ฐ์‹œ์Šคํ…œ์˜ ๋…ธ๋“œ(microservice)๋ฅผ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค(RabbitMQ)์™€ ์—ฐ๊ฒฐํ•˜์—ฌ ์ƒํƒœ ๋ฐ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์—๊ฒŒ ์ „๋‹ฌํ•ด์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ๐Ÿ’ก ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ž€? ๐Ÿ‘‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์‹œ์Šคํ…œ ๋ฐ ์„œ๋น„์Šค๊ฐ€ ์„œ๋กœ ๊ฐ„์— ํ†ต์‹ ํ•˜๊ณ  ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฒ€์ฆ, ์ €์žฅ, ๋ผ์šฐํŒ…ํ•˜..

Spring Framework/โ˜๏ธ Spring Cloud

[โ˜๏ธ Spring Cloud] Spring Cloud Config ๊ฐœ๋… ๋ฐ ์ ์šฉ ๋ฐฉ๋ฒ•

๊ฐ๊ฐ์˜ Microservice๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ตฌ์„ฑ์ •๋ณด ํŒŒ์ผ(.yml)๋“ค์ด ์ˆ˜์ •๋œ๋‹ค๋ฉด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ๋ฐฐํฌํ•ด์•ผํ•œ๋‹ค.  ์ด์™€ ๊ฐ™์€ ๋ฒˆ๊ฑฐ๋กœ์›€์„ ๋œ์–ด๋‚ด๊ธฐ ์œ„ํ•ด ๊ตฌ์„ฑ์ •๋ณด ํŒŒ์ผ์„ ์™ธ๋ถ€๋กœ ๋ถ„๋ฆฌ์‹œํ‚จ๋‹ค๋ฉด ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, ์šด์˜ ํ™˜๊ฒฝ์—์„œ๊นŒ์ง€ ๋ชจ๋“  ํ™˜๊ฒฝ ๊ตฌ์„ฑ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์„ค์ •์„ ์œ„ํ•œ ์„œ๋ฒ„๋ฅผ ๋ณ„๋„๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ์‹คํ–‰ ์ค‘์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„œ๋ฒ„์—์„œ ์„ค์ • ์ •๋ณด๋ฅผ ํŒŒ์•…ํ•ด ๊ฐฑ์‹ ์‹œํ‚ค๋ฉด ๋นŒ๋“œ์™€ ๋ฐฐํฌ ์—†์ด ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค ! โ“ Spring Cloud Config ๋ž€?Spring Cloud Config๋Š” ๋ถ„์‚ฐ์‹œ์Šคํ…œ์—์„œ ์„œ๋ฒ„, ํด๋ผ์ด์–ธํŠธ ๊ตฌ์„ฑ์— ํ•„์š”ํ•œ ์„ค์ •์ •๋ณด(application.yml)๋ฅผ ์™ธ๋ถ€์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ด์ฃผ๋Š” ์‹œ์Šคํ…œ์ด๋‹ค.  ์ค‘์•™ํ™”๋œ ์ €์žฅ์†Œ์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ™˜๊ฒฝ์„ค์ •์„ ์ผ๊ด„์ ์œผ๋กœ ๊ด€..

Spring Framework/โ˜๏ธ Spring Cloud

[โ˜๏ธ Spring Cloud] MSA์™€ Spring Cloud

์—ฌ๋Ÿฌ ๊ธฐ์—…๋“ค์˜ ์ฑ„์šฉ ๊ณต๊ณ ๋ฅผ ํ™•์ธํ•  ๋•Œ๋งˆ๋‹ค 'MSA' ๊ฐ€ ์–ธ๊ธ‰๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜๋‹ค. MSA๊ฐ€ ๋ฌด์—‡์ด๊ธธ๋ž˜ ๊ธฐ์—…๋งˆ๋‹ค ์–ธ๊ธ‰ํ•˜๋Š” ๋นˆ๋„๊ฐ€ ์žฆ์€์ง€ ํŒŒ์•…ํ•ด๋ณด๊ณ , MSA๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” Spring Cloud์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ๋‹ค.   โ“ Cloud Native Architecture ๋ž€?๐Ÿ”ท ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ์˜ ํŠน์ง• ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ณ์„œ๋ฒ„ ๊ณ„์† ์„ค์น˜ X โž” ํด๋ผ์šฐ๋“œ ๋‚ด์—์„œ ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค ๋Š˜๋ ค์„œ ํ™•์žฅ์‹œํ‚ค๊ธฐ (scale out)ํƒ„๋ ฅ์  ์•„ํ‚คํ…์ณ์ˆ˜๋™์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ buildํ•œ ํ›„ ๋ฐฐํฌ X โž” CI/CD๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๋นŒ๋“œ ํ›„ ๋ฐฐํฌ ๐Ÿ‘‰ ๋น„์ฆˆ๋‹ˆ์Šค ํ™˜๊ฒฝ ๋ณ€ํ™”์— ๋Œ€ํ•œ ๋Œ€์‘ ์‹œ๊ฐ„ ๋‹จ์ถ•๋ถ„ํ• ๋œ ๋…๋ฆฝ์ ์ธ ์„œ๋น„์Šค โž” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ๋„๋ฉ”์ธ ํŠน์„ฑ์— ๋”ฐ๋ผ ์„œ๋น„์Šค ๊ฒฝ๊ณ„ ๊ตฌ๋ถ„ ๐Ÿ‘‰ ์„œ๋น„์Šค ์ข…์†์„ฑ ์ตœ์†Œํ™” & ์ƒํƒœ XDiscover..

Spring Framework/๐Ÿ“› ์—๋Ÿฌ ๊ธฐ๋ก

[๐Ÿ“› Error] ๋ฆฌ์•กํŠธ ๋ฐฐํฌ ํ›„ ์ƒˆ๋กœ๊ณ ์นจ ์‹œ 404 Error

๋ฐฐํฌํ•˜๊ณ ์„œ ๋ฌธ์ œ๊ฐ€ ์—†์–ด๋ณด์˜€์œผ๋‚˜, ์ƒˆ๋กœ๊ณ ์นจํ•  ๋•Œ๋งˆ๋‹ค 404 ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค. ๋กœ์ปฌ์—์„œ๋Š” ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์€๋ฐ.. ๊ฒ€์ƒ‰ํ•ด๋ณด๋ฉด ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค์ด ํ•œ ๋ฒˆ์ฏค์€ ๊ฒช๊ณ  ์ง€๋‚˜๊ฐ„ ์—๋Ÿฌ์ธ ๊ฒƒ ๊ฐ™๋‹ค.  ๐Ÿ‘€ ์—๋Ÿฌ ํŒŒ์•…ํ•˜๊ธฐ  ๋ฆฌ์•กํŠธ์˜ ํŠน์„ฑ์„ ํŒŒ์•…ํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค.  ์‚ฌ์šฉ์ž๊ฐ€ ์ฒ˜์Œ ์ ‘์† ํ›„ ์„œ๋ฒ„์— ์š”์ฒญํ•  ์‹œ index.html์„ ๋ณด๋‚ด์ฃผ๋Š”๋ฐ ์ด ํŒŒ์ผ์—๋Š” bundle.js๋‚˜ css ํŒŒ์ผ์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. html ํŒŒ์ผ์„ ์ฝ์œผ๋ฉด์„œ react-router๊ฐ€ ์ž‘๋™๋˜๋Š”๋ฐ ์„œ๋ฒ„ ์ชฝ์ด ์•„๋‹Œ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์—์„œ ์ด๋ฃจ์–ด์ง€๋ฉฐ ๋‹จ์ˆœํžˆ ์ฃผ์†Œ๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉฐ ๊ฒฝ๋กœ๋ฅผ ์žก์•„์ค€๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํƒœ์—์„œ ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜๊ฒŒ ๋˜๋ฉด url์€ react-router์˜ ๊ฒฝ๋กœ๋กœ ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๋Š” ์–ด๋–ค ๊ฒƒ์„ ๋ฐ˜ํ™˜ํ•ด๋‹ฌ๋ผ๋Š” ๊ฒƒ์ธ์ง€ ์•Œ ์ˆ˜ ์—†์–ด์„œ 404 ์—๋Ÿฌ๊ฐ€..

Spring Framework/๐Ÿ“› ์—๋Ÿฌ ๊ธฐ๋ก

[๐Ÿ“› Error] jar ํŒŒ์ผ๋กœ ๋ฐฐํฌ ์‹œ java.io.FileNotFoundException

๋ฐฐํฌ ์ „์—๋Š” ๊ทธ๋ƒฅ ๋กœ์ปฌ ๊ฒฝ๋กœ ์ฝ์–ด์„œ csv ํŒŒ์ผ์— ์žˆ๋Š” ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ค๋„๋ก ํ–ˆ๊ณ , ๊ฒฐ๊ณผ๋„ ์ž˜ ๋‚˜์™”๋‹ค.๋ฐฐํฌํ•  ๋•Œ๋Š” resources์— csv ํŒŒ์ผ ๋„ฃ๊ณ  ๋‚ด๋ถ€ ๋ฆฌ์†Œ์Šค ์ฝ์–ด์„œ ๋ ์ค„ ์•Œ์•˜๊ฑด๋งŒ.. ์‰ฝ๊ฒŒ ๋˜์ง€ ์•Š์•˜๋‹ค.  ๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ JAR๋กœ ํŒจํ‚ค์ง•ํ•ด์„œ ์‹คํ–‰์‹œํ‚ค๋ฉด InputStream์„ ์จ์„œ ์ฝ์–ด์™€์•ผ๋œ๋‹ค๊ณ  ํ–ˆ๋‹ค. JAR ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ classpath๋กœ ์ ‘๊ทผํ•ด์„œ ์ฝ์„ ๋•Œ๋Š” ํŒŒ์ผ์‹œ์Šคํ…œ์— ์žˆ๋Š” ํŒŒ์ผ์„ ์ฝ์–ด์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ JAR ์•ˆ์— ์žˆ๋Š” ํŒŒ์ผ์ด๋ฏ€๋กœ getFile()๋กœ ์ฝ์„ ์ˆ˜ ์—†๋‹ค๊ณ  ํ•œ๋‹ค.    ์ˆ˜์ •ํ•˜๊ธฐ ์ „ ์ฝ”๋“œ try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { String line; while ((line ..

soogoori
'Spring Framework' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (2 Page)