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