studybook
  • Introduction
  • 실무 하며 깨닫는 부분 정리
    • 옵션에 대해서
    • 코드 작성의 순서
    • 자바 프로그램에 문제가 생겼다면
    • 장애 대처법
  • Logstash, Beats 정리
  • Zookeeper 정리
  • Message Queue 정리
    • RabbitMQ 삽질
  • Java 관련 정리
    • Java Primitive Wrapper class
    • Java NIO
    • Java8 Double colon operator
    • Effective Java
      • 4장
      • 5장
      • 6장 - Enum, Annotation
      • 7장 - Method
      • 8장 - 프로그래밍 일반
      • 9장 - Exception
    • Java8 Lambda expression
    • JDBC
    • Linux에서 WatchService 이상동작
  • Spring 관련 정리
    • Spring Bean init, destroy 순서
    • Spring Async Controller
    • Spring Executable jar 웹 개발 및 배포
    • Spring Boot Font 배포 에러
    • Spring AOP
      • Spring AOP로 모든 Request 로그 남기기
    • Spring Cache
    • Spring Cloud
      • Consul로 spring 설정 관리하기
    • Spring Test
      • Spring Test DirtiesContext
      • Spring Test MockBean, SpyBean
      • Spring Test Dynamic @Scheduled
    • Spring JDBC
    • Spring Validation
    • Spring Transaction Management
      • Spring with JTA 삽질
    • Spring에서 효율적으로 Static resource 관리하기
    • Zuul을 사용해서 Spring Reverse proxy 만들기
    • Spring Security
    • 스프링 어노테이션이 안 먹힐 때 의심해볼만한 것
    • Spring Data
    • Spring Webflux
      • Tobi 강연
  • 코드 리팩토링
    • 한번에 하나씩
  • 지속적 통합 (CI)
    • Jenkins pipeline 삽질기
  • Log Aggregator 정리
    • Flume 테스트
    • Fluentd 테스트
  • Web Socket 정리
  • Akka
    • Actor 모델
    • Supervision
  • IE 8 대응 정리
  • 함수형 프로그래밍
    • 모나드
  • Netty
    • Netty 기본 예제
    • Netty 주요 특징
    • Netty 부트스트랩
    • Netty 채널 파이프라인, 코덱
    • Netty 이벤트 모델
    • Netty 바이트 버퍼
  • 스칼라 관련 정리
    • Maven으로 컴파일하기
    • Scala def 괄호 여부의 차이
    • 스칼라 function, method 차이점
    • ScalaTest와 Spring 연동하기
    • Programming in Scala
  • J2S 컨퍼런스
  • Android
    • 테스트
    • NDK
  • DDOS
  • HTTP
  • HttpClient
  • Container
    • Image 개요
    • cri-o
    • kata containers
    • Open Container Initiative Image
    • Buildkit
  • Github pages
  • Static Website
  • Webhook
  • Service Discovery Tools
    • Etcd
    • Eureka
    • Consul
      • ACL
    • 비교
  • React
    • JSX
    • React Element
    • Components, Props
    • State, Lifecycle
    • Handling Event
    • Flux
  • Vagrant
    • SSH 접속
  • Linux
    • Systemd
    • Alternatives
  • Messaging protocols
    • XMPP
    • AMQP
  • Windows
    • Windows10 내장 우분투에 ssh 클라이언트로 접속하기
    • Windows10 Hyper-V와 Virtual Box가 충돌을 일으켰을 때
    • Hyper-V 기반 docker에서 Shared Drives 설정 실패할 때
    • 윈도우 개발환경 설정
    • Docker desktop 없이 docker 환경 세팅하기
    • UWP 앱을 항상 관리자권한으로 실행하는 바로가기 만들기
  • Spring camp 2017
    • Project Reactive
    • 이벤트 소싱
    • CQRS
  • Spring webflux
  • 리액티브 프로그래밍
  • Linux Settings
    • 홈서버 백업 및 복구기
    • 홈서버 트러블슈팅
  • Kubernetes
    • k3s 설치 및 삽질
    • pod resources
    • Argo workflow
    • 트러블 슈팅
      • Kubernetes namespace의 phase가 Terminating에서 멈춰있을 때
    • 쿠버네티스 마스터
    • Knative
    • Knative Pipeline
    • Aggrerated API server
    • Accessing the API
      • Authenticating
  • Sonarqube
  • HTTP/2
  • Go
    • Go Module
    • Go dependency injection
    • Go Error handling
    • Go in Action
      • 3장 패키지
      • 4장 배열, 슬라이스, 맵
      • 5장 GO의 타입 시스템
      • 6장 동시성
      • 7장 동시성 패턴
      • 8장 표준 라이브러리
      • 9장 테스트와 벤치마킹
    • Go Channel 사용법
  • Cloud Native
Powered by GitBook
On this page
  • 특징
  • Cloud Native Applications
  • Spring Cloud Context
  • The Bootstrap Application Context
  • Application Context Hierarchies
  1. Spring 관련 정리

Spring Cloud

PreviousSpring CacheNextConsul로 spring 설정 관리하기

Last updated 7 years ago

  • 분산 시스템에서 흔히 나타나는 패턴을 빠르게 빌드할 수 있도록 스프링에서 제공하는 툴

특징

  • Distributed/versioned configuration

  • Service registration and discovery

  • Routing

  • Service-to-service calls

  • Load balancing

  • Circuit Breakers

    • Remote call에서 사용하는 패턴. 정해진 기준 이상 요청이 실패하거나 응답이 없을 때, 요청이 쌓여서 전체 프로그램에 장애를 일으키지 않도록 바로 바로 에러 메세지를 되돌려주도록 차단

  • Distributed messaging

Cloud Native Applications

  • continuous delivery, value-driven development 에서 권장되는 모범 사례들을 쉽게 사용할 수 있게 도와주는 개발 스타일

Spring Cloud Context

  • spring boot에서 제공하는 각종 기능들의 빌드보다 먼저 빌드되고, 필요하리라 여겨지는 몇몇 기능들 추가

The Bootstrap Application Context

  • bootstrap context를 생성하여 동작

    • 일반적인 spring context의 부모로 생성됨

    • 외부 소스로부터 설정을 읽어오기, 암호화된 설정 복호화 등

    • spring context와 Environment 공유

    • 높은 우선도를 가지고 있기 때문에 기본적으로는 local configuration에 의해서 override 될 수 없음

    • application[.yml|.properties] 대신에 bootstrap[.yml|.properties] 사용

Application Context Hierarchies

  • Spring Cloud Config를 추가하여 빌드하게 되면 기존 context에 property source가 추가됨

    1. "bootstrap": Bootstrap context에 PropertySourceLocator Bean이 있으면 application context 설정 완료 이후에 CompositePropertySource를 높은 우선순위로 추가함

    2. "applicationConfig": classpath:bootstrap.yml 에 등록된 값으로 Bootstrap context가 설정 완료된 이후에 classpath:application.yml 및 기타 스프링 부트 기본 PropertySource보다 낮은 우선순위로 추가됨

+------------------------+
|  PropertySourceLocator |
|   .locate()            |
+------------------------+
|   application.yml      |
|          +             |
|   spring boot sources  |
+------------------------+
|  bootstrap.yml         |
+------------------------+
MutablePropertySources (last state)

세팅 순서

  1. bootstrap.yml 로드

  2. bootstrap context 설정

  3. bootstrap.yml에서 로드해온 applicationConfig를 낮은 우선순위로 MutablePropertySources에 추가

  4. application context 설정

  5. application.yml에서 로드해온 applicationConfig를 MutablePropertySources에 추가

  6. PropertySourceLocator.locate()를 통해 얻은 PropertySource를 높은 우선순위로 MutablePropertySources에 추가

Bootstrap Properties 파일 위치 변경

  • 시스템 환경변수에다가 spring.cloud.bootstrap.name, spring.cloud.bootstrap.location 적절하게 설정

Remote Properties 덮어 씌우기

  • 외부 Cloud 저장소 (Consul 등) 에서 가져온 Properties 값들을 로컬에서 덮어씌울 수 있게 할 것인지 설정하는 부분

  • spring.cloud.config.allowOverride

    • false이면 Remote Properties를 덮어 씌울 수 없게 됨

    • true이면 세부 옵션 추가 (기본값)

      • spring.cloud.config.overrideNone: true이면 모든 로컬 PropertySource가 Remote Properties를 덮어쓰게 됨 (기본값 false)

      • spring.cloud.config.overrideSystemProperties: false이면 시스템 환경설정으로는 덮어 씌울 수 있게 됨 (기본값 true)

Bootstrap context Configuration

  • 리소스 폴더에 /META-INF/spring.factories 파일 생성하여 설정

    • org.springframework.boot.autoconfigure.EnableAutoConfiguration 키에 원하는 @Configuration 클래스 리스트들을 각각 ","로 구분하여 값 작성

  • 이 configuration에서 생성한 bean들을 main application context에서 autowired 할 수 있음

    • ApplicationContextInitializer bean도 생성 가능

    • @Order annotation으로 실행 순서 지정 가능 (기본 값은 "last")

  • 이 BootstrapConfiguration 클래스들은 꼭 필요한 경우가 아니라면 @ComponentScan이나 @SpringBootApplication에 걸리지 않도록 별도의 패키지로 관리하거나 아예 @Configuration annotation을 안 붙이는 것을 추천

  • bootstrap 과정이 모두 끝나고 나면 main application을 시작하기 전에 ApplicationContextInitializer bean들을 추가함

Bootstrap Property Sources 추가하기

  • spring.factories 파일에 알맞은 PropertySourceLocator 클래스를 등록해도 되고, 아니면 Configuration 클래스에서 Locator 클래스 인스턴스를 생성하여 bean으로 등록하게 하여도 됨

  • ex)

@Configuration
public class CustomPropertySourceLocator implements PropertySourceLocator {
  @Override
  public PropertySource<?> locate(Environment environment) {
    return new MapPropertySource(
          "customMapProperty",
          Collections.singletonMap("custom.property.key", "custom property value")
        );
  }
}

Environment Change 이벤트 처리

  • Environment가 변경되면 어플리케이션 전역에 EnvironmentChangedEvent publish 됨

    • 변경된 값들의 key가 담겨있음

    • 자동적으로 @ConfigurationProperties 다시 바인딩하게 만듬

    • log 레벨을 프로퍼티 logging.level.* 에 맞춰서 재설정

  • 일반적으로는 ApplicationListeners bean 을 만들어서 처리하도록 함

    • Config Client가 Environment 변경사항을 폴링하는 것보다 나음

https://12factor.net/