Spring은 자바 기반 어플리케이션을 구축할 수 있는 가장 대중적인 개발 프레임워크
의존성 주입(Dependency Injection) 이라는 핵심 개념에 기반
의존성 주입 프레임워크를 사용하면 어플리케이션 내 객체 관계를 서로 '알기' 위해 하드코딩하는 대신 convension과 annotation으로 외부화할 수 있어 대규모 프로젝트를 효율적으로 관리할 수 있음
Spring은 어플리케이션의 다양한 자바 클래스 사이에 중재자 역할 및 의존성 관리
마이크로서비스를 사용하는 추세로 이동하는 것을 재빨리 알아차리고(?) Spring Boot와 Spring Cloud 프로젝트를 시작
Spring의 핵심 기능
- 어플리케이션을 배포하는데 복잡함을 줄여주는 내장형 웹서버 (Tomcat - 기본, Jetty, Undertow) 가 있음
- spring-boot-starter로 빠르게 Spring을 시작할 수 있음
- 가능하다면 Spring에 대한 기능적으로 자동화된 구성
- 운영 환경에 바로 사용가능한 다양한 기능 (지표, 보완, 상태확인, 코드와 분리된 구성 등)
Spring Boot가 마이크로서비스에 제공하는 이점
- 개발 시간 단축, 효율성과 생산성 향상
- 웹 어플리케이션 실행을 위한 내장 HTTP 서버 제공
- 많은 boilerplate 코드 작성 회피
- Spring Data, Spring Security, Spring Cloud와 같은 생태계
- 다양한 개발 플러그인 지원
- 조직 정보를 갱신하고 조회하는 클라이언트 요청을 설명
- 클라이언트가 요청을 시작하려면 액세스 토큰을 획득하기 위해 키클록에 인증을 받아야 함
- 토큰을 얻고 나서 클라이언트는 Spring Cloud API 게이트웨이에 요청을 보냄
- API 게이트웨이 서비스는 전체 아키텍처에 대한 진입점
- 즉, 이 서비스는 Eureka 서비스와 통신하여 조직 및 라이선스 서비스의 위치를 조회하고 해당 마이크로서비스를 호출
- 조직 서비스가 요청을 받으면 키클록에 엑세스 토큰의 유효성을 검증해서 요청을 처리할 수 있는 권한 여부 확인
- 유효성이 확인되면 조직 서비스는 조직 데이터베이스에 정보를 갱신하고 조회하여 클라이언트에 HTTP 응답
- 다른 경로로 조직 정보가 갱신되면 조직 서비스는 Kafka Topic을 추가로 전송하여 라이선싱 서비스가 변경사항을 인식
- 이 메시지가 라이선싱 서비스에 도착되면 Redis는 특정 정보를 Redis의 In-Memory-DB 에 저장
- 이 과정동안 Zipkin, Elasticsearch, Logstash를 사용하여 로그 관리 및 표시
- Spring Actuator, Prometheus, Grafana를 사용하여 어플리케이션 지표를 노출하고 표시
- 마이크로서비스의 정의, 모범 사례 및 마이크로서비스 기반 어플리케이션 구축을 위한 설계
- 마이크로 서비스 기반 어플리케이션을 구축하면 안되는 경우
- Spring Boot 를 사용하여 마이크로서비스를 구축하는 방법
- 마이크로서비스 어플리케이션, 클라우드 기반 어플리케이션을 지원하는 핵심 운영 패턴
- Docker 정의 및 마이크로서비스 기반 어플리케이션과 통합하는 방법
- Spring Cloud 사용방법
- 모니터링 도구 시각화 방법
- Zipkin으로 분산 추적하는 방법
- ELK 스택으로 로그 관리하는 방법
- 서비스 배포 파이프라인을 구축하는 방법