Spring

Spring/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/Spring Cloud

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

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

Spring/Spring Cloud

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

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

Spring/Spring Cloud

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

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

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

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

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

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

[๐Ÿ“› 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 ..

Spring

[SpringBoot] SpringBoot + React ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ ๊ณผ์ •

์Šคํ”„๋ง๋ถ€ํŠธ์— ๋ฆฌ์•กํŠธ๋ฅผ ์—ฐ๋™์‹œํ‚ค๋Š” ๊ณผ์ •๊นŒ์ง€๋Š” ๊ทธ ์ „์— ์ง„ํ–‰ ์™„๋ฃŒ. ๋นŒ๋“œ์™€ ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ • ๊ธฐ๋ก. ๋ฐฐํฌํ•  ์ƒ๊ฐ์ด ์—†์—ˆ๋Š”๋ฐ ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ์™”๊ธฐ์— ์ƒ๋‹นํžˆ ๋ฌด์‹ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ง„ํ–‰ํ–ˆ๋‹ค.. ๊ทธ๋ƒฅ ๋ณ„๋‹ค๋ฅธ ์„ค์ • ์•ˆํ•˜๊ณ  EC2 ์ธ์Šคํ„ด์Šค์— ์„œ๋ฒ„ ๋„์šฐ๋Š” ์ •๋„๋งŒ.. ๋ฌผ๋ก  ์ด๊ฒƒ๋„ ๋ฐฐํฌ์˜ ํ•œ ๊ณผ์ •์ด๊ธด ํ•˜์ง€๋งŒ.. ๊ทธ๋ž˜๋„ ์ดํ‹€๋™์•ˆ ๊ณ ๋ฏผํ•˜๋ฉด์„œ ํ•˜๊ธด ํ–ˆ์œผ๋‹ˆ๊น ๊ธฐ๋กํ•œ๋‹ค. ๐Ÿ“ ๋นŒ๋“œ & ๋ฐฐํฌ ๊ณผ์ • 1. ๋ฆฌ์•กํŠธ & ์Šคํ”„๋ง๋ถ€ํŠธ ํ†ตํ•ฉ ๋นŒ๋“œ (Gradle) 2. ๋ฐฐํฌ (EC2 ์ธ์Šคํ„ด์Šค์— ์„œ๋ฒ„ ๋„์šฐ๊ธฐ) 2-1. MySQL ๋กœ์ปฌ์—์„œ EC2๋กœ dump .. โญ๏ธ ๐Ÿ”ด ํ†ตํ•ฉ ๋นŒ๋“œํ•˜๊ธฐ ์Šคํ”„๋ง๋ถ€ํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ณ , ๋ฆฌ์•กํŠธ๋ฅผ npm start๋กœ ๋”ฐ๋กœ ์‹คํ–‰์‹œ์ผฐ๋Š”๋ฐ ํ•œ๋ฒˆ์— ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด ํ†ตํ•ฉ ๋นŒ๋“œ๋ฅผ ํ•œ๋‹ค. ์šฐ์„  ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋Š” ์ด๋Ÿฌํ•˜๋‹ค. ํ†ตํ•ฉ ๋นŒ๋“œ์‹œํ‚ค๊ธฐ ์ „์— fronte..

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

[๐Ÿ“› Error] Variable used in lambda expression should be final or effectively final ์—๋Ÿฌ

์ž๋ฐ”์—์„œ stream()์„ ์‚ฌ์šฉํ•ด orderProductOption์— ์žˆ๋Š” orderProduct๋ฅผ ์„ค์ •ํ•ด์ฃผ๋Š” ๊ณผ์ •์—์„œ"Variable used in lambda expression should be final or effectively final" ์—๋Ÿฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ orderProduct์— ๋นจ๊ฐ„ ๋ฐ‘์ค„์ด ๊ทธ์–ด์กŒ๋‹ค.๋žŒ๋‹ค ํ‘œํ˜„์‹ ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜๊ฐ€ final ๋˜๋Š” effectively final์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค. ๋”๋ณด๊ธฐ๐Ÿ‘€ effectively final : ๋ณ€์ˆ˜๊ฐ€ ์‹ค์ œ๋กœ 'final' ๋กœ ์„ ์–ธ๋˜์–ด ์žˆ์ง€ ์•Š๋”๋ผ๋„ ๋žŒ๋‹ค ํ‘œํ˜„์‹ ๋‚ด์—์„œ ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์ด๋‹ค.int x = 10;Consumer consumer = (value) -> { // x = x + 5; /..

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