MSA 주요 패턴: 중앙화된 로그 집계 패턴
·
기초 지식/MSA
1. 중앙화된 로그 집계 패턴이란?마이크로서비스 아키텍처(MSA)는 독립적인 서비스로 구성되기 때문에 서비스별로 로그를 개별적으로 수집하면 문제를 추적하거나 디버깅하는 과정에서 복잡성과 비효율이 증가하기 마련이다. 중앙화된 로그 집계 패턴은 이러한 문제를 해결하기 위해, 분산된 서비스의 로그를 한 곳으로 수집하고, 분석 및 검색이 용이하도록 중앙화된 로그 시스템을 구축하는 전략이다.2. 왜 중앙화된 로그 집계가 필요한가?2.1. MSA 환경에서의 로그 관리의 어려움1 서비스 분산:MSA 환경에서는 수십에서 수백 개의 마이크로서비스가 각각 독립적으로 로그를 생성한다.이러한 로그를 각 서비스에서 확인하려면 많이 번거로워서 에러 발생 원인을 빠르게 찾기 어려워진다.2 장애 원인 추적:서비스 간 호출이 복잡해질..
MSA 전환을 위한 서비스 분리 전략
·
기초 지식/MSA
회사에서 Monolith 로 개발해오던 프로젝트들을 MSA 로 옮겨간다고 한다. 내가 맡아서 개발해온 프로젝트의 도메인 지식은 내가 가장 잘 알고 있다보니 이 프로젝트 만큼은 내가 도메인 분리를 맡게 될 것 같다...그래서 공부중이다.서비스 분리 전략 3가지 Key Point단계적으로 마이그레이션 한다.처음에는 크게 분리하고 추후 작게 분리한다.서비스 분리를 깔끔하게 나눠주는 마법같은 공식은 없다. (이 부분이 너무 슬펐다.)서비스 분리 8가지 원칙첫 번째 원칙: 작고 분리가 쉬운 서비스로 워밍업간단한 서비스를 분리하며 역량을 내재화.신규 개발 기능이나 내부 의존성이 적고, 중요도가 낮은 기능부터 시작.Pilot 서비스 분리의 기준:내부 의존성이 낮은 기능(Core 의존성, 데이터 의존성 적음).장애 발..
MSA 주요 패턴: 사가(Saga) 패턴
·
기초 지식/MSA
1. Saga 패턴모놀로식 아키텍처에서 단일 DB 를 사용하고 있다면 트랜잭션의 원자성과 일관성을 DBMS 수준에서 보장을 해준다. 따라서 데이터의 일관성을 유지하는게 어렵지 않다.하지만 MSA 에서 여러 서비스의 서로 다른 DBMS 를 거쳐 영속화 해야하는 것은 흔한 일이다. 때문에 데이터 일관성 문제가 발생한다. 이러한 문제를 해결하기 위해 “서로다른 DBMS 의 트랜잭션을 논리적으로 묶을 필요”가 있었고 이를 위해 등장한 설계 패턴이 Saga 패턴이다. (마치 트랜잭션이 전파되는 것이 이야기가 전파되는것과 같다고 하여 Saga 라고 부른다)  Saga 패턴에서 트랜잭션을 논리적으로 묶는 주체는 어플리케이션이다. 위와 같이 트랜잭션이 실패했을 때 보상 트랜잭션(cancel) 을 호출 어플리케이션에 전..
MSA 주요 패턴: 서비스 디스커버리(Service Discovery) 패턴
·
기초 지식/MSA
1. 서비스 디스커버리 패턴MSA 에서는 언제든 새로운 원격 서버 인스턴스(pod) 가 추가되거나 제거될 수 있으므로 그 개수와 물리적 주소가 고정되어 있지 않기 때문에 클라이언트가 물리적인 위치를 몰라도 서비스를 호출할 수 있도록 하는 것이 중요하다.즉 “물리적인 주소”가 아니라 “논리적인 주소” 로 서버 인스턴스를 찾을수 있어야 한다.1.1 클라이언트 사이드 서비스 디스커버리클라이언트 사이드 서비스 디스커버리의 구성은 아래와 같다.  마이크로 서비스의 인스턴스들(pod)의 물리적인 주소를 Service Registry 라는 곳에 저장한다. 이때 인스턴들은 주기적으로 Hearthbeat 를 Service Registry 로 전송하여 Service Registry가 인스턴스 상태를 체크할 수 있도록 한다..
Kubernetes 기본구조
·
기초 지식/K8s
1. Kbuernetes(K8s) 란?MSA에서는 각 서비스가 컨테이너로 패키징되며, 하나의 서비스에 대해 N개의 컨테이너가 존재할 수 있습니다. 수십 개의 서비스만 있어도 수백 개 이상의 컨테이너를 관리해야 합니다.컨테이너 관리에는 다음과 같은 요구 사항이 있습니다:다수의 서버를 하나의 클러스터처럼 사용.여러 서버에 컨테이너를 배포.서비스 디스커버리로 서비스 간 연결.부하에 따른 자동 스케일링(scale-out, scale-in).장애 시 컨테이너 재생성과 트래픽 재연결.서버 상태(헬스 체크) 모니터링.스토리지 및 네트워크 관리.이러한 복잡성을 사람이 수동으로 처리하는 것은 비효율적이며, 이를 자동화하기 위해 컨테이너 오케스트레이션이 필요합니다. Kubernetes(K8s)는 이러한 요구를 충족시키는 ..
Container와 Docker
·
기초 지식/K8s
컨테이너와 도커의 개념 및 역할컨테이너란?컨테이너는 애플리케이션과 그 애플리케이션이 실행되는 환경을 패키지화한 기술입니다. 이를 통해 개발 환경과 운영 환경의 차이로 인한 문제를 방지할 수 있습니다.컨테이너는 가상 머신(VM)과는 다르게, 호스트 OS의 커널을 공유하므로 경량화된 프로세스 격리를 제공합니다.도커란?도커는 컨테이너 기술을 구현한 오픈소스 플랫폼으로, 컨테이너를 생성, 관리, 배포할 수 있는 도구입니다.도커는 애플리케이션 개발, 테스트, 배포를 일관된 방식으로 처리할 수 있도록 지원합니다.컨테이너 이미지를 빌드하고 실행하는 데 필요한 도구를 제공합니다.컨테이너의 특징과 도커를 활용한 애플리케이션 배포컨테이너의 주요 특징격리성: 각 컨테이너는 독립적으로 실행되어 다른 컨테이너나 호스트 시스템과..
MSA 개념
·
기초 지식/MSA
MSA 란?하나의 애플리케이션을 다수의 독립적인 서비스로 구성한 아키텍처입니다.마틴파울러의 블로그에 따르면 MSA 는 다음의 특징을 갖습니다.서비스들은 각자 별도의 프로세스에서 실행된다.HTTP API 와 같은 가벼운 매커니즘으로 통신하는 작은 애플리케이션이다.작은 서비스들은 각자의 비즈니스 기능을 담당하고 완전 자동화 된 절차에 따라 독립적으로 배포된다.각 서비스는 서로 다른 프로그맹 언어, 프레임워크, 데이터 저장 기술을 사용할 수 있다.대표적인 사례로는 Netflix 가 있으며, 국내에는 쿠팡, 배달의 민족 등이 있습니다. MSA 의 어떤 점이 매력적이길래 이들은 MSA 를 도입한 걸까요?MSA 의 장점빠른 Delivery각 서비스는 독립적이므로 코드 수정 영향 범위가 작습니다.결과적으로, 고객에게..
Terraform 기초: 변수와 변수의 활용
·
기초 지식/Terraform
1. Terraform 변수terraform 은 대규모 프로비저닝 관리를 위해 변수 를 지원해준다. 변수는 어떻게 구성되어 있고, 어떻게 사용하는지 알아보자1.1 Terraform 변수의 구성변수는 3개의 argument 로 구성된다.default: 변수의 기본 값을 지정한다.type: 변수의 타입 을 지정한다.description: 변수에 대한 메타데이터를 지정한다.아래와 같이 변수를 만들 수 있다.variable "filename" { default = "pets.txt" type = string description = "name of file"}variable "length" { default = 2 type = number description = "length of ..."}1.2 Terraf..