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์ ๋ณต์ก์ฑ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.