Search

Spring ๊ธฐ๋ฐ˜ MSA ๊ฐœ๋ฐœ

Spring ๊ธฐ๋ฐ˜ MSA ๊ฐœ๋ฐœ ๊ธฐ์ˆ 

Spring์€ ๋‹ค์–‘ํ•œ ๋ชจ๋“ˆ๊ณผ ํˆด์„ ํ†ตํ•ด MSA ๊ฐœ๋ฐœ์„ ์ง€์›ํ•˜์—ฌ, ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋ฉด์„œ๋„ ์„œ๋กœ ์›ํ™œํžˆ ํ†ต์‹ ํ•˜๊ณ  ํ˜‘๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
Spring Boot
โ€ข
Spring Cloud
โ€ข
Spring Data
โ€ข
Spring Security
โ€ข
Spring Kafka

Spring Boot

Spring Boot๋Š” MSA ๊ฐœ๋ฐœ์˜ ํ•ต์‹ฌ์œผ๋กœ, ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด์žฅ ์›น ์„œ๋ฒ„๋ฅผ ํฌํ•จํ•˜์—ฌ ์„œ๋น„์Šค ์‹คํ–‰์— ํ•„์š”ํ•œ ํ™˜๊ฒฝ์„ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•˜๋ฏ€๋กœ ์„ค์ •์„ ๊ฐ„์†Œํ™”ํ•˜๊ณ  ๋น ๋ฅธ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Spring Cloud

Spring Cloud๋Š” MSA๋ฅผ ์œ„ํ•ด Spring์—์„œ ์ œ๊ณตํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด, ๊ฐ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ , ๊ตฌ์„ฑ ๊ด€๋ฆฌ, ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๋“ฑ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” Spring Cloud ๋ชจ๋“ˆ:

Spring Cloud Config

์ค‘์•™์—์„œ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์˜ ์„ค์ • ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Git์ด๋‚˜ Vault์™€ ๊ฐ™์€ ์™ธ๋ถ€ ์ €์žฅ์†Œ๋ฅผ ํ†ตํ•ด ์„ค์ • ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜์—ฌ ๊ฐ ์„œ๋น„์Šค์˜ ํ™˜๊ฒฝ ์„ค์ •์„ ์‰ฝ๊ฒŒ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Spring Cloud Netflix (Eureka, Ribbon, Hystrix, Zuul)

Eureka: ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ ์„œ๋ฒ„๋กœ, ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ๋“ฑ๋ก๋˜๊ณ  ์„œ๋กœ ์œ„์น˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.
Ribbon: ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค ์š”์ฒญ์ด ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค์— ๊ณ ๋ฅด๊ฒŒ ๋ถ„๋ฐฐ๋ฉ๋‹ˆ๋‹ค.
Hystrix: ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ํŒจํ„ด์„ ์ œ๊ณตํ•˜์—ฌ, ์„œ๋น„์Šค๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ ์žฅ์•  ์ „ํŒŒ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.
Zuul: API ๊ฒŒ์ดํŠธ์›จ์ด๋กœ, ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ ์ ˆํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ…ํ•˜๋ฉฐ ์ธ์ฆ, ๊ถŒํ•œ ๊ด€๋ฆฌ, ๋กœ๊น… ๋“ฑ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Spring Cloud Gateway

Zuul์˜ ๋Œ€์ฒด๋กœ API ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๋‹ค์–‘ํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ…ํ•˜๊ณ  ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ์‹ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ์ง€์›ํ•˜์—ฌ ๊ณ ์„ฑ๋Šฅ API ๊ฒŒ์ดํŠธ์›จ์ด ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

Spring Cloud Sleuth

๋ถ„์‚ฐ ํŠธ๋ ˆ์ด์‹ฑ์„ ์ง€์›ํ•˜์—ฌ, ๊ฐ ์„œ๋น„์Šค์˜ ์š”์ฒญ ํ๋ฆ„์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋กœ๊ทธ์— ํŠธ๋ ˆ์ด์Šค ๋ฐ ์ŠคํŒฌ ID๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. Zipkin์ด๋‚˜ Jaeger์™€ ๊ฐ™์€ ๋ถ„์‚ฐ ์ถ”์  ์‹œ์Šคํ…œ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค ๊ฐ„ ์š”์ฒญ์˜ ํ๋ฆ„์„ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Spring Cloud OpenFeign

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ HTTP ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์›๊ฒฉ ํ˜ธ์ถœ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝ”๋“œ์˜ ๊ฐ„๊ฒฐ์„ฑ์„ ๋†’์ด๊ณ  Ribbon๊ณผ Hystrix์™€์˜ ํ†ตํ•ฉ์„ ์ง€์›ํ•˜์—ฌ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ๊ณผ ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ

Spring Data

๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ฐ€์ง€๋„๋ก ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ถ„๋ฆฌ์™€ ๋…๋ฆฝ์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. Spring Data JPA, MongoDB, Redis ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋“ˆ์„ ํ†ตํ•ด ๊ฐ ์„œ๋น„์Šค์˜ ๋ฐ์ดํ„ฐ ๊ณ„์ธต์„ ์†์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Event Sourcing ๋ฐ CQRS

๋ถ„์‚ฐ๋œ ์„œ๋น„์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์˜ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Spring Kafka, RabbitMQ์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ํ™œ์šฉํ•ด ์„œ๋น„์Šค ๊ฐ„์˜ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ ์ž๋™ํ™”

Spring Boot Actuator

๊ฐ ์„œ๋น„์Šค์˜ ์ƒํƒœ, ๋ฉ”ํŠธ๋ฆญ์Šค, ์š”์ฒญ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ œ๊ณตํ•˜์—ฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ์ƒํƒœ๋ฅผ ์ถ”์ ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Prometheus์™€ Grafana ๊ฐ™์€ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ์™€ ์—ฐ๊ณ„ํ•˜์—ฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ

Spring Boot ๊ธฐ๋ฐ˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” Jenkins, GitLab CI, CircleCI ๋“ฑ CI/CD ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Docker๋ฅผ ํ™œ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ Kubernetes์™€ ์—ฐ๋™ํ•˜์—ฌ ์„œ๋น„์Šค์˜ ๋ฐฐํฌ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณด์•ˆ ๊ด€๋ฆฌ

Spring Security & OAuth2

Spring Security๋Š” ๊ฐ ์„œ๋น„์Šค์˜ ์ธ์ฆ๊ณผ ๊ถŒํ•œ ๊ด€๋ฆฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ OAuth2์™€ JWT(Json Web Token)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ ์„œ๋น„์Šค ๊ฐ„์— ๋ณด์•ˆ์„ ์œ ์ง€ํ•˜๊ณ , API ๊ฒŒ์ดํŠธ์›จ์ด์—์„œ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ ๊ธฐ๋Šฅ์„ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Spring๊ณผ Spring Cloud๋Š” MSA ์•„ํ‚คํ…์ฒ˜์—์„œ ๋นˆ๋ฒˆํžˆ ์‚ฌ์šฉ๋˜๋Š” ์š”์†Œ๋“ค์„ ๊ฐ„์†Œํ™”ํ•˜์—ฌ, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„์˜ ์œ ๊ธฐ์ ์ธ ํ†ต์‹ ๊ณผ ํšจ์œจ์ ์ธ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ชจ๋“ˆ์„ ์ ์ ˆํžˆ ์กฐํ•ฉํ•˜๊ณ  ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์„ค๊ณ„ํ•˜๋ฉด MSA์˜ ๋ณต์žก์„ฑ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.