Spring/Spring Cloud
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
Configuration ์๋ฒ์์ ์ด๋ ํ ๊ฐ์ ๋ณ๊ฒฝ์์ผฐ์ ๋ microservices์ ๋ฐ์์ํค๊ธฐ ์ํด์ ์ด์ ์๋ actuator๋ฅผ ์ฌ์ฉํ๋ค. ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ๋ง์ดํฌ๋ก์๋น์ค๊ฐ ์กด์ฌํ๋ค๋ฉด ๊ฐ๊ฐ์ ๋ง์ดํฌ๋ก์๋น์ค๋ง๋ค ์๋์ผ๋ก refresh ์์ผ์ฃผ์ด์ผํ๊ธฐ ๋๋ฌธ์ ์๋นํ ๋ฒ๊ฑฐ๋กญ๋ค. ์ด๋ฌํ ๋ฐฉ๋ฒ์ ๊ฐ์ ์์ผ์ฃผ๋ ๊ฒ์ด Spring Cloud Bus ์ด๋ค. โSpring Cloud Bus๋ ? ๋ถ์ฐ์์คํ
์ ๋
ธ๋(microservice)๋ฅผ ๋ฉ์์ง ๋ธ๋ก์ปค(RabbitMQ)์ ์ฐ๊ฒฐํ์ฌ ์ํ ๋ฐ ๊ตฌ์ฑ์ ๋ํ ๋ณ๊ฒฝ์ฌํญ์ ์ฐ๊ฒฐ๋ ๋
ธ๋์๊ฒ ์ ๋ฌํด์ฃผ๋ ํ๋ ์์ํฌ์ด๋ค. ๐ก ๋ฉ์์ง ๋ธ๋ก์ปค๋? ๐ ์ ํ๋ฆฌ์ผ์ด์
, ์์คํ
๋ฐ ์๋น์ค๊ฐ ์๋ก ๊ฐ์ ํต์ ํ๊ณ ์ ๋ณด๋ฅผ ๊ตํํ ์ ์๋๋ก ํด์ฃผ๋ ์ํํธ์จ์ด๋ก ๋ฉ์์ง๋ฅผ ๊ฒ์ฆ, ์ ์ฅ, ๋ผ์ฐํ
ํ..
Spring/Spring Cloud
๊ฐ๊ฐ์ Microservice๊ฐ ๊ฐ๊ณ ์๋ ๊ตฌ์ฑ์ ๋ณด ํ์ผ(.yml)๋ค์ด ์์ ๋๋ค๋ฉด ์ดํ๋ฆฌ์ผ์ด์
์์ฒด๋ฅผ ๋ค์ ๋น๋ํ๊ณ ๋ฐฐํฌํด์ผํ๋ค. ์ด์ ๊ฐ์ ๋ฒ๊ฑฐ๋ก์์ ๋์ด๋ด๊ธฐ ์ํด ๊ตฌ์ฑ์ ๋ณด ํ์ผ์ ์ธ๋ถ๋ก ๋ถ๋ฆฌ์ํจ๋ค๋ฉด ๊ฐ๋ฐ, ํ
์คํธ, ์ด์ ํ๊ฒฝ์์๊น์ง ๋ชจ๋ ํ๊ฒฝ ๊ตฌ์ฑ์ ๊ฐํธํ๊ฒ ๊ด๋ฆฌํ ์ ์๋ค. ์ค์ ์ ์ํ ์๋ฒ๋ฅผ ๋ณ๋๋ก ๊ตฌ์ฑํ๊ณ ์คํ ์ค์ธ ์ดํ๋ฆฌ์ผ์ด์
์ด ์๋ฒ์์ ์ค์ ์ ๋ณด๋ฅผ ํ์
ํด ๊ฐฑ์ ์ํค๋ฉด ๋น๋์ ๋ฐฐํฌ ์์ด ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์ํ๋ ๊ฒ์ด๋ค ! โ Spring Cloud Config ๋?Spring Cloud Config๋ ๋ถ์ฐ์์คํ
์์ ์๋ฒ, ํด๋ผ์ด์ธํธ ๊ตฌ์ฑ์ ํ์ํ ์ค์ ์ ๋ณด(application.yml)๋ฅผ ์ธ๋ถ์์ ๊ด๋ฆฌํ ์ ์๋๋ก ์ง์ํด์ฃผ๋ ์์คํ
์ด๋ค. ์ค์ํ๋ ์ ์ฅ์์์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ํ๊ฒฝ์ค์ ์ ์ผ๊ด์ ์ผ๋ก ๊ด..
Spring/Spring Cloud
์ฌ๋ฌ ๊ธฐ์
๋ค์ ์ฑ์ฉ ๊ณต๊ณ ๋ฅผ ํ์ธํ ๋๋ง๋ค 'MSA' ๊ฐ ์ธ๊ธ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค. MSA๊ฐ ๋ฌด์์ด๊ธธ๋ ๊ธฐ์
๋ง๋ค ์ธ๊ธํ๋ ๋น๋๊ฐ ์ฆ์์ง ํ์
ํด๋ณด๊ณ , MSA๋ฅผ ๊ตฌ์ถํ๊ณ ๊ด๋ฆฌํ ์ ์๋ Spring Cloud์ ๋ํด ์์๋ณด๊ฒ ๋ค. โ Cloud Native Architecture ๋?๐ท ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ๊ตฌ์กฐ์ ํน์ง ํ์ฅ ๊ฐ๋ฅํ ์ํคํ
์ณ์๋ฒ ๊ณ์ ์ค์น X โ ํด๋ผ์ฐ๋ ๋ด์์ ์๋ฒ ์ธ์คํด์ค ๋๋ ค์ ํ์ฅ์ํค๊ธฐ (scale out)ํ๋ ฅ์ ์ํคํ
์ณ์๋์ผ๋ก ํ๋ก์ ํธ๋ฅผ buildํ ํ ๋ฐฐํฌ X โ CI/CD๋ฅผ ํตํด ์๋์ผ๋ก ๋น๋ ํ ๋ฐฐํฌ ๐ ๋น์ฆ๋์ค ํ๊ฒฝ ๋ณํ์ ๋ํ ๋์ ์๊ฐ ๋จ์ถ๋ถํ ๋ ๋
๋ฆฝ์ ์ธ ์๋น์ค โ ์ดํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ฑํ๋ ๋๋ฉ์ธ ํน์ฑ์ ๋ฐ๋ผ ์๋น์ค ๊ฒฝ๊ณ ๊ตฌ๋ถ ๐ ์๋น์ค ์ข
์์ฑ ์ต์ํ & ์ํ XDiscover..
Spring/๐ ์๋ฌ ๊ธฐ๋ก
๋ฐฐํฌํ๊ณ ์ ๋ฌธ์ ๊ฐ ์์ด๋ณด์์ผ๋, ์๋ก๊ณ ์นจํ ๋๋ง๋ค 404 ์๋ฌ๊ฐ ๋ฌ๋ค. ๋ก์ปฌ์์๋ ์ ์์ ์ผ๋ก ์๋ํ๋ ๊ฒ ๊ฐ์๋ฐ.. ๊ฒ์ํด๋ณด๋ฉด ์ฌ๋ฌ ์ฌ๋๋ค์ด ํ ๋ฒ์ฏค์ ๊ฒช๊ณ ์ง๋๊ฐ ์๋ฌ์ธ ๊ฒ ๊ฐ๋ค. ๐ ์๋ฌ ํ์
ํ๊ธฐ ๋ฆฌ์กํธ์ ํน์ฑ์ ํ์
ํ๋ฉด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์๋ค. ์ฌ์ฉ์๊ฐ ์ฒ์ ์ ์ ํ ์๋ฒ์ ์์ฒญํ ์ index.html์ ๋ณด๋ด์ฃผ๋๋ฐ ์ด ํ์ผ์๋ bundle.js๋ css ํ์ผ์ด ์ฐ๊ฒฐ๋์ด ์๋ค. html ํ์ผ์ ์ฝ์ผ๋ฉด์ react-router๊ฐ ์๋๋๋๋ฐ ์๋ฒ ์ชฝ์ด ์๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋์์ ์ด๋ฃจ์ด์ง๋ฉฐ ๋จ์ํ ์ฃผ์๋ง ๋ฐ๊ฟ์ฃผ๋ฉฐ ๊ฒฝ๋ก๋ฅผ ์ก์์ค๋ค. ์ด๋ฌํ ์ํ์์ ์๋ก๊ณ ์นจ์ ํ๊ฒ ๋๋ฉด url์ react-router์ ๊ฒฝ๋ก๋ก ๋์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฒ๋ ์ด๋ค ๊ฒ์ ๋ฐํํด๋ฌ๋ผ๋ ๊ฒ์ธ์ง ์ ์ ์์ด์ 404 ์๋ฌ๊ฐ..
Spring/๐ ์๋ฌ ๊ธฐ๋ก
๋ฐฐํฌ ์ ์๋ ๊ทธ๋ฅ ๋ก์ปฌ ๊ฒฝ๋ก ์ฝ์ด์ csv ํ์ผ์ ์๋ ๋ด์ฉ์ ๊ฐ์ ธ์ค๋๋ก ํ๊ณ , ๊ฒฐ๊ณผ๋ ์ ๋์๋ค.๋ฐฐํฌํ ๋๋ resources์ csv ํ์ผ ๋ฃ๊ณ ๋ด๋ถ ๋ฆฌ์์ค ์ฝ์ด์ ๋ ์ค ์์๊ฑด๋ง.. ์ฝ๊ฒ ๋์ง ์์๋ค. ๊ฒ์ํด๋ณด๋ JAR๋ก ํจํค์งํด์ ์คํ์ํค๋ฉด InputStream์ ์จ์ ์ฝ์ด์์ผ๋๋ค๊ณ ํ๋ค. JAR ์์ ๋ค์ด์๋ ๋ฆฌ์์ค๋ฅผ classpath๋ก ์ ๊ทผํด์ ์ฝ์ ๋๋ ํ์ผ์์คํ
์ ์๋ ํ์ผ์ ์ฝ์ด์ค๋ ๊ฒ์ด ์๋๋ผ JAR ์์ ์๋ ํ์ผ์ด๋ฏ๋ก getFile()๋ก ์ฝ์ ์ ์๋ค๊ณ ํ๋ค. ์์ ํ๊ธฐ ์ ์ฝ๋ try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { String line; while ((line ..
Spring
์คํ๋ง๋ถํธ์ ๋ฆฌ์กํธ๋ฅผ ์ฐ๋์ํค๋ ๊ณผ์ ๊น์ง๋ ๊ทธ ์ ์ ์งํ ์๋ฃ. ๋น๋์ ๋ฐฐํฌํ๋ ๊ณผ์ ๊ธฐ๋ก. ๋ฐฐํฌํ ์๊ฐ์ด ์์๋๋ฐ ํด์ผํ๋ ์ํฉ์ด ์๊ธฐ์ ์๋นํ ๋ฌด์ํ ๋ฐฉ๋ฒ์ผ๋ก ์งํํ๋ค.. ๊ทธ๋ฅ ๋ณ๋ค๋ฅธ ์ค์ ์ํ๊ณ EC2 ์ธ์คํด์ค์ ์๋ฒ ๋์ฐ๋ ์ ๋๋ง.. ๋ฌผ๋ก ์ด๊ฒ๋ ๋ฐฐํฌ์ ํ ๊ณผ์ ์ด๊ธด ํ์ง๋ง.. ๊ทธ๋๋ ์ดํ๋์ ๊ณ ๋ฏผํ๋ฉด์ ํ๊ธด ํ์ผ๋๊น ๊ธฐ๋กํ๋ค. ๐ ๋น๋ & ๋ฐฐํฌ ๊ณผ์ 1. ๋ฆฌ์กํธ & ์คํ๋ง๋ถํธ ํตํฉ ๋น๋ (Gradle) 2. ๋ฐฐํฌ (EC2 ์ธ์คํด์ค์ ์๋ฒ ๋์ฐ๊ธฐ) 2-1. MySQL ๋ก์ปฌ์์ EC2๋ก dump .. โญ๏ธ ๐ด ํตํฉ ๋น๋ํ๊ธฐ ์คํ๋ง๋ถํธ๋ฅผ ์คํ์ํค๊ณ , ๋ฆฌ์กํธ๋ฅผ npm start๋ก ๋ฐ๋ก ์คํ์์ผฐ๋๋ฐ ํ๋ฒ์ ์คํ์ํค๊ธฐ ์ํด ํตํฉ ๋น๋๋ฅผ ํ๋ค. ์ฐ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ ์ด๋ฌํ๋ค. ํตํฉ ๋น๋์ํค๊ธฐ ์ ์ fronte..
Spring/๐ ์๋ฌ ๊ธฐ๋ก
์๋ฐ์์ 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; /..