본문 바로가기

좋아하는 것_매직IT/1.spring

마이크로서비스에서 구성관리(configuration management) 깔끔정리 (ft. Git을 활용한 간단한 스프링 클라우드 컨피그 서버 구축)

반응형

블로그 목적

마이크로서비스에서 구성관리(configuration management)에 대한 나의 생각을 간단하게 정리해보고,

Git을 활용한 스프링 클라우드 컨피그 서버 구축에 대해서 간단하게 실습해 본다.

블로그 요약

  • 마이크로서비스의 구성관리에 대해서 나의관점으로 간단하게 정리해본다.
  • Git을 활용한 스프링 클라우드 컨피그 서버를 간단하게 구축해본다.
  • 마이크로서비스의 구성관리에 대해서 나의 생각을 정리해본다.

블로그 상세 내용

이번 블로그는 마이크로서비스에서 구성관리에 대한 나의 생각은? 이라는 주제로 글을 간단하게 작성해볼 예정인데요..

참고로, 마이크로서비스는 많은 수의 작은 서비스들이 작동하는 분산 시스템입니다.

이러한 서비스들은 각각 다른 요구사항과 기능을 가지고 있으며, 이를 효과적으로 관리하기 위해서는 구성관리(Configuration Management)가 필요합니다.

구성관리란, 소프트웨어의 동작에 필요한 구성요소들을 관리하는 것을 의미합니다.

이는 소프트웨어 개발 및 운영에 있어 매우 중요한 역할을 하고요.

그리고, 구성요소들은 다양한 형태로 존재할 수 있으며, 예를 들면 데이터베이스 연결정보, API 키, 서버 설정 등이 있습니다.

마이크로서비스에서는 각 서비스가 독립적으로 배포되기 때문에, 각 서비스의 구성요소들도 각기 다른 형태로 존재합니다.

이러한 구성요소들을 효과적으로 관리하기 위해서는 다음과 같은 접근 방법들을 생각해 볼 수 있는데요.

하나, 환경별로 구성요소 관리하기

마이크로서비스에서는 여러 개의 환경(Development, Staging, Production 등)에서 배포되기 때문에, 각각의 환경에 맞게 구성요소들을 관리해야 합니다.

이를 위해서는 각 환경별로 구성요소들을 분리하여 저장하고, 배포할 때 해당 환경에 맞는 구성요소들을 선택하여 배포해야 합니다.

둘,구성요소들을 버전 관리하기

마이크로서비스에서는 구성요소들이 변경될 가능성이 매우 높습니다.

이에 따라서 각각의 구성요소들을 버전 관리하여 변경 이력을 추적할 수 있습니다.

이를 위해서는 버전 관리 시스템(Git 등)을 사용하여 구성요소들을 저장하고, 변경 이력을 관리해야 합니다.

셋, 구성요소들을 중앙화된 위치에서 관리하기

마이크로서비스에서는 많은 수의 서비스들이 작동하고 있기 때문에, 구성요소들을 중앙화된 위치에서 관리하는 것이 효과적입니다.

이를 위해서는 구성관리 도구(Chef, Ansible 등)를 사용하여 구성요소들을 중앙화된 위치에서 관리할 수 있습니다.

그리고, 마이크로서비스에서 구성관리는 매우 중요한 역할을 합니다.

효과적인 구성관리를 통해 서비스의 안정성과 확장성을 보장할 수 있으며, 개발자들은 구성요소들을 쉽게 수정하거나 변경할 수 있기 때문에, 구성요소들을 효과적으로 관리하여 개발 및 운영에 대한 부담을 줄일 수 있습니다.

넷, 자동화된 배포를 위한 구성관리

마이크로서비스 아키텍처에서는 서비스들이 서로 다른 환경에서 배포되는 경우가 많습니다. 이를 위해서는 각 서비스의 구성요소들을 자동화된 배포를 위한 구성관리 도구를 사용하여 관리해야 합니다.

이를 위해, 도커(Docker)와 같은 컨테이너 기술을 사용하여 각 서비스의 배포와 관리를 자동화할 수 있습니다.

다섯, 구성요소들의 보안 관리

마이크로서비스에서는 많은 수의 서비스들이 동작하기 때문에, 각각의 서비스가 사용하는 구성요소들을 보호하기 위한 보안 관리가 필요합니다.

이를 위해서는 암호화된 보안 관리 도구를 사용하여 각각의 서비스가 사용하는 구성요소들을 안전하게 보호할 수 있습니다.

여섯, 테스트 환경에서의 구성요소 관리

마이크로서비스에서는 서비스들의 테스트가 매우 중요합니다.

이를 위해서는 테스트 환경에서도 각각의 서비스가 사용하는 구성요소들을 쉽게 관리할 수 있어야 합니다.

이를 위해서는 테스트 환경에서도 중앙화된 구성요소 관리 시스템을 사용하여 구성요소들을 관리하고, 테스트를 수행할 때 쉽게 접근할 수 있도록 해야 합니다.

참고로, 마이크로서비스에서 구성관리는 서비스의 안정성과 확장성을 보장하기 위해 매우 중요한 역할을 합니다.

이를 위해서는 각각의 서비스가 사용하는 구성요소들을 적절하게 관리하고, 보호하는 방법을 항상 고민해야 합니다.

이러한 구성관리가 효과적으로 이루어질 경우, 서비스의 개발과 운영에서 생산성을 높일 수 있습니다.

아무튼, 여기까지가 제가생각하는 마이크로서비스에서 구성관리에 대한 생각이였고요..

그리고, 구성관리 시스템을 구현하는 오픈 소스 프로젝트를 알아보니깐요..

아래와 같이 다양한 오픈 소스 프로젝트들이 존재하더라고요.

그 중에서도 대표적인 오픈 소스 프로젝트는 다음과 같습니다.

  1. Consul: HashiCorp에서 개발한 서비스 디스커버리 및 구성 관리 도구입니다. 분산 시스템에서 애플리케이션 인스턴스의 위치 및 상태를 추적하고, 애플리케이션의 구성 정보를 중앙 집중적으로 관리할 수 있습니다.
  2. ZooKeeper: Apache Software Foundation에서 개발한 분산 환경에서 데이터를 저장하고 관리하는 도구입니다. 분산 시스템에서 애플리케이션 구성 정보, 서비스 디스커버리, 분산 락 등 다양한 용도로 사용됩니다.
  3. etcd: CoreOS에서 개발한 분산 환경에서 데이터를 저장하고 관리하는 도구입니다. 분산 시스템에서 애플리케이션 구성 정보, 서비스 디스커버리 등 다양한 용도로 사용됩니다.
  4. Vault: HashiCorp에서 개발한 보안 관리 도구입니다. 암호화 키, 비밀 정보 등의 보안 데이터를 중앙 집중적으로 관리하고, 애플리케이션에서 필요한 시점에 안전하게 사용할 수 있도록 합니다.
  5. Spring Cloud Config Server :다양한 백엔드와 함께 일반적인 구성관리 솔루션을 제공하는 오픈 소스 프로젝트. Git, Eureka, Consul 같은 백엔드와 통합이 가능합니다.

이러한 오픈 소스 프로젝트들은 각각의 특징과 장단점이 있으며, 구성 관리 시스템을 구현할 때 필요한 요구사항과 목표에 맞게 선택하여 사용할 수 있겠죠?

아무튼 이번에 제가 직접 구현해볼 구성관리 시스템은 마지막에 설명드린 스프링 클라우드 컨피그 서버에 대해서 Git를 활용해서 간단하게 구현해보려고 합니다.

(그럼 차근차근 설명드릴께요~)

우선 한눈에 알아보기 쉽게 아래와 같은 구조가 될것 같고요..

첫번째, 저는 빌드툴(build tool)로 gradle 를 사용할 예정이므로 아래와 같이 세팅을 했고요..

두번째, 스프링 클라우드 컨피그 부트스트랩 클래스 설정을 아래와 같이 했습니다.

@EnableConfigServer 어노테이션을 세팅하시면, 서비스를 스프링 클라우드컨피그 서비스로 사용가능하게되고요..

세번째, 아래와 같이 환경설정(application.yml)을 세팅해줍니다. (git url 과 searchPath 세팅)

정말 간단하죠?

(이러면 모든 세팅이 끝나게 되고요..)

추가적으로 환결설정 파일을 아래와 같이 git 에 만들어주시고요..

git add / commit / push 해주시면 됩니다.

그럼 아래와 같이 git ui 에서도 보이겠죠?

여기까지가 세팅이 다 된거고요...

그럼, 인텔리제이에서 springboot 를 build 및 실행해보겠습니다.

위와 같이 8888 port 로 잘 기동이 되었고요...

그럼 실제적으로 postman 으로 정상적으로 환경설정들이 잘 세팅되었는지 확인해볼께요~

1.dev 환경설정

2.stage 환경설정

3.live 환경설정

위와 같이 잘 관리되고 가지고 오는 것을 Postman으로 확인할 수 있었습니다.

여기까지가 Git을 활용한 스프링 클라우드 컨피그 서버 구축에 대한 간단한 내용이 였고요..

아무튼 오늘의 블로그는 여기까지고요...

항상 믿고 봐주셔서 감사합니다.

결론

  • 마이크로서비스에서의 구성관리
    • 마이크로서비스는 많은 수의 작은 서비스들이 작동하는 분산 시스템입니다.
    • 이러한 서비스들은 각각 다른 요구사항과 기능을 가지고 있으며, 이를 효과적으로 관리하기 위해서는 구성관리(Configuration Management)가 필요합니다.
    • 구성관리란, 소프트웨어의 동작에 필요한 구성요소들을 관리하는 것을 의미합니다.
      • 이는 소프트웨어 개발 및 운영에 있어 매우 중요한 역할을 하고요. 그리고, 구성요소들은 다양한 형태로 존재할 수 있으며, 예를 들면 데이터베이스 연결정보, API 키, 서버 설정 등이 있습니다.
  • 대표적인 오픈 소스 프로젝트는 다음과 같습니다.
    • Consul
    • ZooKeeper
    • etcd
    • Vault
    • Spring Cloud Config Server
  • 마이크로서비스에서 구성관리는 서비스의 안정성과 확장성을 보장하기 위해 매우 중요한 역할을 합니다.
    • 이를 위해서는 각각의 서비스가 사용하는 구성요소들을 적절하게 관리하고, 보호하는 방법을 항상 고민해야 합니다.
    • 그리고, 이러한 구성관리가 효과적으로 이루어질 경우, 서비스의 개발과 운영에서 생산성을 높일 수 있습니다.

긴글 읽어주셔서 진심으로 감사합니다.!!

다음에 더 좋은 컨텐츠로 찾아뵐 수 있도록 더욱 노력하는 제가 되겠습니다. !!

( I'll be back !! )

728x90
300x250