Micro Service ์ธ๋ถ, ๋ด๋ถ Architecture๋ฅผ ํธํ๊ฒ ๊ตฌ์ฑํ ์ ์๊ฒ ๋์์ฃผ๋ ์คํ์์ค ํ๋ซํผ Jhipster์ ๋ํด์ ์๊ธฐํ๊ณ ์ ํ๋ค.
JHipster(Java Hipster)๋?
JHipster๋ ์๋ฐ ์ง์์์ modern ํ ๋ชจ๋๋ฆฌ์ค ์ ํ๋ฆฌ์ผ์ด์ ๋๋ ๋ง์ดํฌ๋ก ์๋น์ค๋ฅผ ๋น ๋ฅด๊ฒ ์ ์ฉ, ๊ฐ๋ฐ, ๋ฐฐํฌํ ์ ์๊ฒ ๋์์ฃผ๋ ์คํ์์ค ํ๋ซํผ์ด๋ค.
๊ฐ ์์ญ๋ณ๋ก ๋ค์ํ ๊ธฐ์ ์ ์ง์ํ๋ค.
- Frontend: React, Angular, Vue, Bootstrap, Jest
- Backend: Spring Boot, Spring Security, Netflix OSS, Mysql, Gradle, MongoDB, Redis, Swagger, Elastic Stack, Prometheus
- CI/CD: Jenkins, Travis CI, Github Workflows, CircleCI
์์ ๊ฐ์ด ๋ค์ํ ๊ธฐ์ ์ ์ง์ํ๊ธฐ์ ์๋์ ๊ฐ์ ์ฅ์ ์ด ์๋ค.
- Client Side์ Server Side๋ฅผ ํ ๋ฒ์ ์์ฑํ ์ ์๋ค.
- Spring Boot๋ฅผ ์ฌ์ฉํ ๋ ํ๋ก์ ํธ์ ํ ํ๋ฆฟ์ ๋ง๋ค์ด์ค๋ค.
- Modern ํ UI๋ฅผ ์ํด Angular, React, Vue + Bootstrap์ ์ง์ํ๋ค.
- Webpack๊ณผ Gradle•Maven ๋ฑ ๊ฐ๋ ฅํ ์ ํ๋ฆฌ์ผ์ด์ ๋น๋ ๋๊ตฌ๋ฅผ ์ด์ฉํ ์ ์๋ค.
MSA์์์ JHipster์ ํ
JHipster๋ฅผ ์ด์ฉํด์ MSA๋ฅผ ๋น ๋ฅด๊ฒ ๊ตฌ์ถํ ๋ ์๋์ ๊ฒ๋ค์ ๋น ๋ฅด๊ฒ ๊ตฌ์ถํ ์ ์๋ค.
- API Gateway ์์ฑ
- Service Registry ์์ฑ
- Micro Service ์์ฑ
- Micro Service ๋ด๋ถ ์ํฐํฐ ์์ฑ
JHipster API Gateway
JHIpster API Gateway๋ Spring Cloud Load Balancer์ ๊ธฐ๋ฐํ API Gateway์ด๋ค.
- JHipster Registry์ ๋ฑ๋ก๋์ด ์๋ ์๋น์ค ์ธ์คํด์ค ์ ๋ณด๋ฅผ ๊ธฐ๋ฐํ์ฌ ๋ก๋ ๋ฐธ๋ฐ์ ๊ธฐ๋ฅ์ ์ํํ๋ค.
API Gateway์์๋ ํ ํฐ ๊ฒ์ฆ๊ณผ ๊ฐ์ ๋ณด์์ฒ๋ฆฌ๋ ๋ด๋นํ๋ค.
๊ทธ์ค, JWT(Json Web Token) ์ธ์ฆ ๋ฐฉ์์ MSA์์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ณดํธํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฐ์ฅ ์ฌ์ด ํ์ค ๋ฐฉ์์ด๋ฉฐ, JHipster๋ JWT ๊ตฌํ์ ์ํด Okta์์ ์ ๊ณตํ๋ JJWT ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๋ค.
JHipster Registry
JHipster Registry๋ Eureka ๊ธฐ๋ฐ์ Service Discovery ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฉด์ ๋์์, Spring Cloud Config ์ ํ๋ฆฌ์ผ์ด์ ์ ์ญํ ์ ํ๋ค.
- Eureka ์๋ฒ๋ฅผ ์ด์ฉํ๋ฉฐ, HTTP ์์ฒญ์ ๋ผ์ฐํ ๋ฐ ๋ก๋๋ฐธ๋ฐ์ฑ์ ์ํํ๊ธฐ ์ํด ๋ง์ดํฌ๋ก ์๋น์ค์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์ ์ผ๋ก ๊ด๋ฆฌํ๋ค.
- Runtime ์ค์ ์ ๊ด๋ฆฌํ๊ธฐ ์ํด Spring Cloud Config๋ฅผ ์ฌ์ฉํ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ด๋ฆฌํ ์ ์๋ ๋ชจ๋ํฐ๋ง ๋์๋ณด๋๋ฅผ ์ ๊ณตํด์ค๋ค.
์ด ์ด์ธ์๋ Swagger๋ฅผ ์๋์ผ๋ก ์ค์ ํ์ฌ API ๋ฌธ์ํ๋ฅผ ํธํ๊ฒ ํ๊ฑฐ๋, ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ์๋์ผ๋ก ๊ตฌ์ฑํด ์ฃผ๊ฑฐ๋, Entity Field๋ฅผ ํฐ๋ฏธ๋์์ ์ถ๊ฐํ ์ ์๋ ๋ฑ ์ฌ๋ฌ ๊ธฐ๋ฅ์ด ์๋ค.
ํ์ง๋ง, ์ง๊ธ ๋์ ์๊ฐ์ผ๋ก๋ ๊ตณ์ด?๋ผ๋ ์๊ฐ์ด ๋ ๋ค. ํ ๋ฐ ๋ฌผ๋ฌ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ธ๋ถ ์ํคํ ์ฒ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ๊น์ง๋ ํธ๋ฆฌํ๊ฒ ํ ์ ์์ผ๋ ์ฌ์ฉํ๋ค ํ๋๋ผ๋, ๋ด๋ถ ์ํคํ ์ฒ๋ ์ํฐํฐ๋ฅผ JHipster๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ ํธ๋ฆฌํ์ง๋ ์์๋ฟ๋๋ฌ ๋นํจ์จ์ ์ด๋ผ๊ณ ์๊ฐํ๋ค.
์ถ๊ฐ์ ์ผ๋ก, Spring Cloud Config์ ๋ํด์ ์ค๋ช ํ๊ณ ์ ํ๋ค.
Spring Cloud Config์ ์ญํ ๊ทธ๋ฆฌ๊ณ ์ฅ์ ๊ณผ ๋จ์ ์?
Spring Cloud Config๋ MSA ๋๋ ๋ถ์ฐ ์์คํ ์์ ์ธ๋ถ์ ์ผ๋ก ๊ตฌ์ฑ๋ ์ค์ ์ ๋ณด๋ฅผ Server์ Client์๊ฒ ์ ๊ณตํ๋ ์ญํ ์ ํ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ application.yml๋ก ์ค์ ์ ๋ณด๋ฅผ ๋ฑ๋กํ๋ ๊ฒ ์ต์ํ๊ฒ ์ง๋ง, Spring Cloud Config๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ์ฅ์ ์ด ์๋ค.
- ์๋ฒ๋ฅผ ์ค์งํ๊ฑฐ๋ ์ฌ๋ฐฐํฌํ์ง ์๊ณ ์ค์ ์ ๋ณด๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ฐ์ํ ์ ์๋ค.
- ์ค์ ์ ๋ณด๋ฅผ ์ค์ ์๋ฒ์์ ์ง์ค์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
ํ์ง๋ง, ์ฅ์ ์ด ์์ผ๋ฉด ๋จ์ ๋ ์๋ค.
- Spring Cloud Config ์๋ฒ์ ์ฅ์ ๋ก ์ธํด ์๋น์ค ์ ํ๋ฆฌ์ผ์ด์ ์๋ ์ฅ์ ๊ฐ ์ ํ๋ ์ ์๋ค.
- ์ฐ์ ์์์ ๋ฐ๋ผ ์ค์ ์ด ๋ณต์กํด์ง ์ ์๋ค.
Spring Cloud Config ์ค์ ์ ๋ณด ์ฐ์ ์์
๋จ์ ์ผ๋ก ์์์ ์ฐ์ ์์์ ๋ณต์ก์ฑ์ ์ธ๊ธํ๋ค. Spring Boot ์ ํ๋ฆฌ์ผ์ด์
์์ ์ค์ ํ์ผ์ ์ฐ์ ์์์ ๋ํด์ ์๊ธฐํด๋ณด๊ฒ ๋ค.
์ค์ ํ์ผ์ ์๋์ ๊ฐ์ ์์๋ก ์ฝ์ด์ง๊ณ , ๋ค์ ์ฝ์ด์ง์๋ก ์ฐ์ ์์๊ฐ ๋์์ง๋ค.
- ์๋น์ค ์ ํ๋ฆฌ์ผ์ด์ ์ application.yml
- Spring Cloud Config Server์ application.yml
- ์๋น์ค ์ ํ๋ฆฌ์ผ์ด์ ์ application-{profile}.yml
- ์ค์ ์ ์ฅ์์ {application name}-{profile}.yml
๋ฐ๋ผ์, ์ฐ์ ์์์ ๋ํ ์ดํด๋ฅผ ๋ฐํ์ผ๋ก Spring Cloud Config๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
Config Server ๊ตฌ์ถ
์ด์ Spring Cloud Config๋ฅผ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ดํด๋ณด๊ฒ ๋ค.
- ์ค์ ์ ๋ณด๋ฅผ ์ ์ฅํ ์ ์ฅ์๋ฅผ ๊ตฌ์ถํ๋ค.
- Spring Cloud Config Server๋ฅผ ๊ตฌ์ถํ๊ณ ์ค์ ์ ๋ณด ์ ์ฅ์์ ์ฐ๊ฒฐํ๋ค.
- ์๋น์ค ์ ํ๋ฆฌ์ผ์ด์ ์ Spring Cloud Config Server์ ์ฐ๊ฒฐํ๋ค.
Spring Cloud Config์ ์ค์ ์ ๋ณด ์ ์ฅ์๋ Git์ด ๋ํ์ ์ด์ง๋ง, ๊ทธ ์ธ์ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
- Git Repository
- AWS S3
- Redis
- JDBC
- File
์ค์ ์ ๋ณด๋ฅผ Runtime์ ๋ฐ์์ํค๋ ค๋ฉด?
์๋ก์ด ์ค์ ์ ๋ณด๋ฅผ ๋ฐํ์์ ๋ฐ์์ํค๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
1๏ธโฃ ์ฒซ ๋ฒ์งธ๋ก, Spring Boot Actuator๋ฅผ ์ด์ฉํ ์ ์๋ค. https://application/actuator/refresh์ ๊ฐ์ด refresh ๊ธฐ๋ฅ์ ํธ์ถํ์ฌ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ก์ด ์ค์ ์ ๋ณด๋ฅผ ์ ์ฉํ๋๋ก ์๋์ผ๋ก ํธ์ถํ๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ์๋ ๋ฐฉ์์ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ refresh ํด์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์, Scale-Out ๋์ด ์๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ์ํค๊ธฐ๋ ๋ฒ๊ฑฐ๋กญ๋ค.
2๏ธโฃ ๋ ๋ฒ์งธ๋ก, Spring Cloud Bus๋ฅผ ์ด์ฉํ ์ ์๋ค. Spring Cloud Bus๋ ๋ถ์ฐ ์์คํ ํ๊ฒฝ์์ ๊ฐ๊ฐ์ ์๋น์ค๋ฅผ ์ฐ๊ฒฐ์์ผ์ฃผ๋ Light Weight ๋ฉ์์ง ๋ธ๋ก์ปค์ด๋ค.
์ด๋ฌํ Message Broker๋ฅผ ์ด์ฉํ์ฌ ์ค์ ์ ๋ณด๋ค์ ์ค์๊ฐ ๋ฐ ์ง์์ ์ผ๋ก ๋ฐ์ํ๋๋ก ํ ์ ์๋ค.
Message Broker๋ก๋ ๋ํ์ ์ผ๋ก Kafka์ RabbitMQ๊ฐ ์กด์ฌํ๋ค.
Config Server์์๋ RabbitMQ์ ๊ฐ์ด ์ด๋น 20๊ฐ ์ด์ ์ ๋์ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๋ฅ๋ ฅ์ ๊ฐ์ง ํ๋ซํผ ์ ๋๋ฉด ์ถฉ๋ถํ๋ค.
์ด์ ์ค์ ์ ๋ณด๊ฐ ์ ์ฉ๋๋ ๊ณผ์ ์ ๋ํด์ ์๊ธฐํด๋ณด๊ฒ ๋ค.
- ๊ฐ๋ฐ์๊ฐ yml ํ์ผ๊ณผ ๊ฐ์ ์ค์ ํ์ผ์ Remote Repository์ ์ถ๊ฐํ๋ค.
- Github์ ๊ฒฝ์ฐ WebHook์ ํตํด Config Server๊ฐ ์ค์ ์ ๋ณด ๋ณ๊ฒฝ์ ๊ฐ์งํ๋ค.
- Config Server๋ ์ด ์ ๋ณด๋ฅผ Spring Cloud Bus๋ฅผ ํตํด RabbitMQ๋ก ๋ณด๋ธ๋ค.
- RabbitMQ๋ ๋ฐ์ ์ค์ ๋ณ๊ฒฝ Event๋ฅผ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์๋น์ค ์ธ์คํด์ค์๊ฒ ์ ํํ๋ค. (Pub/Sub ๋ชจ๋ธ)
- Message Broker๋ ์ค์ ์ ๋ณด ๋ณ๊ฒฝ ๋ฉ์์ง๋ฅผ ๊ตฌ๋ ํ๊ณ ์๋ Application๋ค์๊ฒ ์ค์ ์ด ๋ณ๊ฒฝ๋์์์ ์ ํํ๋ค.
- ๊ฐ๊ฐ์ ๋ ธ๋๋ค์ /actuator/refresh ์๋ํฌ์ธํธ๋ฅผ ์๋์ผ๋ก ํธ์ถํด์ ์ต์ ์ค์ ์ ๋ณด๋ฅผ Config Server๋ก๋ถํฐ ์ ๋ฐ์ดํธ๋ฐ๋๋ค.