๐Ÿ‘ท๐Ÿป Architecture

6ํŽธ. JHipster๋ฅผ ์ด์šฉํ•˜์—ฌ MSA๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ (with Spring Cloud Config)

DevPoong 2024. 4. 15. 00:12

Micro Service ์™ธ๋ถ€, ๋‚ด๋ถ€ Architecture๋ฅผ ํŽธํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋žซํผ Jhipster์— ๋Œ€ํ•ด์„œ ์–˜๊ธฐํ•˜๊ณ ์ž ํ•œ๋‹ค.  

JHipster(Java Hipster)๋ž€?

JHipster๋Š” ์ž๋ฐ” ์ง„์˜์—์„œ modern ํ•œ ๋ชจ๋†€๋ฆฌ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋ฅผ ๋น ๋ฅด๊ฒŒ ์ ์šฉ, ๊ฐœ๋ฐœ, ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋žซํผ์ด๋‹ค.

https://www.jhipster.tech/

 

JHipster - Full Stack Platform for the Modern Developer!

JHipster is a development platform to quickly generate, develop, and deploy modern web applications and microservice architectures. We support many frontend technologies, including Angular, React, and Vue. We even have mobile app support for Ionic and Reac

www.jhipster.tech

 

 

๊ฐ ์˜์—ญ๋ณ„๋กœ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์„ ์ง€์›ํ•œ๋‹ค.

  • 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 

 

์œ„์™€ ๊ฐ™์ด ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์„ ์ง€์›ํ•˜๊ธฐ์— ์•„๋ž˜์™€ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ๋‹ค.

  1. Client Side์™€ Server Side๋ฅผ ํ•œ ๋ฒˆ์— ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. Spring Boot๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํ”„๋กœ์ ํŠธ์˜ ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  3. Modern ํ•œ UI๋ฅผ ์œ„ํ•ด Angular, React, Vue + Bootstrap์„ ์ง€์›ํ•œ๋‹ค.
  4. Webpack๊ณผ Gradle•Maven ๋“ฑ ๊ฐ•๋ ฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

MSA์—์„œ์˜ JHipster์˜ ํž˜

 

https://www.jhipster.tech/api-gateway/

JHipster๋ฅผ ์ด์šฉํ•ด์„œ MSA๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•  ๋•Œ ์•„๋ž˜์˜ ๊ฒƒ๋“ค์„ ๋น ๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. API Gateway ์ƒ์„ฑ
  2. Service Registry ์ƒ์„ฑ
  3. Micro Service ์ƒ์„ฑ
  4. 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๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์ œ๊ณตํ•ด์ค€๋‹ค.

https://www.jhipster.tech/jhipster-registry/

 

 

์ด ์ด์™ธ์—๋„ Swagger๋ฅผ ์ž๋™์œผ๋กœ ์„ค์ •ํ•˜์—ฌ API ๋ฌธ์„œํ™”๋ฅผ ํŽธํ•˜๊ฒŒ ํ•˜๊ฑฐ๋‚˜, ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•ด ์ฃผ๊ฑฐ๋‚˜, Entity Field๋ฅผ ํ„ฐ๋ฏธ๋„์—์„œ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋“ฑ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ, ์ง€๊ธˆ ๋‚˜์˜ ์ƒ๊ฐ์œผ๋กœ๋Š” ๊ตณ์ด?๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค. ํ•œ ๋ฐœ ๋ฌผ๋Ÿฌ๋‚˜์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์™ธ๋ถ€ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ๊นŒ์ง€๋Š” ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์‚ฌ์šฉํ•œ๋‹ค ํ•˜๋”๋ผ๋„, ๋‚ด๋ถ€ ์•„ํ‚คํ…์ฒ˜๋‚˜ ์—”ํ‹ฐํ‹ฐ๋ฅผ JHipster๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์€ ํŽธ๋ฆฌํ•˜์ง€๋„ ์•Š์„๋ฟ๋”๋Ÿฌ ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

 

์ถ”๊ฐ€์ ์œผ๋กœ, Spring Cloud Config์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜๊ณ ์ž ํ•œ๋‹ค.

 

 

Spring Cloud Config์˜ ์—ญํ•  ๊ทธ๋ฆฌ๊ณ  ์žฅ์ ๊ณผ ๋‹จ์ ์€?

Spring Cloud Config๋Š” MSA ๋˜๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์™ธ๋ถ€์ ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์„ค์ • ์ •๋ณด๋ฅผ Server์™€ Client์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ application.yml๋กœ ์„ค์ • ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๊ฒŒ ์ต์ˆ™ํ•˜๊ฒ ์ง€๋งŒ, Spring Cloud Config๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ์žฅ์ ์ด ์žˆ๋‹ค.

  1.  ์„œ๋ฒ„๋ฅผ ์ค‘์ง€ํ•˜๊ฑฐ๋‚˜ ์žฌ๋ฐฐํฌํ•˜์ง€ ์•Š๊ณ  ์„ค์ • ์ •๋ณด๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ์„ค์ • ์ •๋ณด๋ฅผ ์ค‘์•™ ์„œ๋ฒ„์—์„œ ์ง‘์ค‘์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

ํ•˜์ง€๋งŒ, ์žฅ์ ์ด ์žˆ์œผ๋ฉด ๋‹จ์ ๋„ ์žˆ๋‹ค.

  1. Spring Cloud Config ์„œ๋ฒ„์˜ ์žฅ์• ๋กœ ์ธํ•ด ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋„ ์žฅ์• ๊ฐ€ ์ „ํŒŒ๋  ์ˆ˜ ์žˆ๋‹ค.
  2. ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์„ค์ •์ด ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

 

Spring Cloud Config ์„ค์ • ์ •๋ณด ์šฐ์„ ์ˆœ์œ„

๋‹จ์ ์œผ๋กœ ์œ„์—์„œ ์šฐ์„ ์ˆœ์œ„์˜ ๋ณต์žก์„ฑ์„ ์–ธ๊ธ‰ํ–ˆ๋‹ค. Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์„ค์ • ํŒŒ์ผ์˜ ์šฐ์„ ์ˆœ์œ„์— ๋Œ€ํ•ด์„œ ์–˜๊ธฐํ•ด๋ณด๊ฒ ๋‹ค.
์„ค์ • ํŒŒ์ผ์€ ์•„๋ž˜์™€ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ฝ์–ด์ง€๊ณ , ๋’ค์— ์ฝ์–ด์งˆ์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์•„์ง„๋‹ค.

  1. ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ application.yml
  2. Spring Cloud Config Server์˜ application.yml
  3. ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ application-{profile}.yml
  4. ์„ค์ • ์ €์žฅ์†Œ์˜ {application name}-{profile}.yml

๋”ฐ๋ผ์„œ, ์šฐ์„ ์ˆœ์œ„์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Spring Cloud Config๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

 

Config Server ๊ตฌ์ถ•

์ด์ œ Spring Cloud Config๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ๋‹ค.

  1. ์„ค์ • ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ €์žฅ์†Œ๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค.
  2. Spring Cloud Config Server๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์„ค์ • ์ •๋ณด ์ €์žฅ์†Œ์™€ ์—ฐ๊ฒฐํ•œ๋‹ค.
  3. ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ 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๊ฐœ ์ด์ƒ ์ •๋„์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ๊ฐ€์ง„ ํ”Œ๋žซํผ ์ •๋„๋ฉด ์ถฉ๋ถ„ํ•˜๋‹ค.

 

 

์ด์ œ ์„ค์ • ์ •๋ณด๊ฐ€ ์ ์šฉ๋˜๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด์„œ ์–˜๊ธฐํ•ด๋ณด๊ฒ ๋‹ค.

  1. ๊ฐœ๋ฐœ์ž๊ฐ€ yml ํŒŒ์ผ๊ณผ ๊ฐ™์€ ์„ค์ • ํŒŒ์ผ์„ Remote Repository์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  2. Github์˜ ๊ฒฝ์šฐ WebHook์„ ํ†ตํ•ด Config Server๊ฐ€ ์„ค์ • ์ •๋ณด ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•œ๋‹ค.
  3. Config Server๋Š” ์ด ์ •๋ณด๋ฅผ Spring Cloud Bus๋ฅผ ํ†ตํ•ด RabbitMQ๋กœ ๋ณด๋‚ธ๋‹ค.
  4. RabbitMQ๋Š” ๋ฐ›์€ ์„ค์ • ๋ณ€๊ฒฝ Event๋ฅผ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค์—๊ฒŒ ์ „ํŒŒํ•œ๋‹ค. (Pub/Sub ๋ชจ๋ธ)
  5. Message Broker๋Š” ์„ค์ • ์ •๋ณด ๋ณ€๊ฒฝ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ์žˆ๋Š” Application๋“ค์—๊ฒŒ ์„ค์ •์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์ „ํŒŒํ•œ๋‹ค.
  6. ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๋“ค์€ /actuator/refresh ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ž๋™์œผ๋กœ ํ˜ธ์ถœํ•ด์„œ ์ตœ์‹  ์„ค์ • ์ •๋ณด๋ฅผ Config Server๋กœ๋ถ€ํ„ฐ ์—…๋ฐ์ดํŠธ๋ฐ›๋Š”๋‹ค.