MSA 주요 패턴: 중앙화된 로그 집계 패턴
·
기초 지식/MSA
1. 중앙화된 로그 집계 패턴이란?마이크로서비스 아키텍처(MSA)는 독립적인 서비스로 구성되기 때문에 서비스별로 로그를 개별적으로 수집하면 문제를 추적하거나 디버깅하는 과정에서 복잡성과 비효율이 증가하기 마련이다. 중앙화된 로그 집계 패턴은 이러한 문제를 해결하기 위해, 분산된 서비스의 로그를 한 곳으로 수집하고, 분석 및 검색이 용이하도록 중앙화된 로그 시스템을 구축하는 전략이다.2. 왜 중앙화된 로그 집계가 필요한가?2.1. MSA 환경에서의 로그 관리의 어려움1 서비스 분산:MSA 환경에서는 수십에서 수백 개의 마이크로서비스가 각각 독립적으로 로그를 생성한다.이러한 로그를 각 서비스에서 확인하려면 많이 번거로워서 에러 발생 원인을 빠르게 찾기 어려워진다.2 장애 원인 추적:서비스 간 호출이 복잡해질..
MSA 전환을 위한 서비스 분리 전략
·
기초 지식/MSA
회사에서 Monolith 로 개발해오던 프로젝트들을 MSA 로 옮겨간다고 한다. 내가 맡아서 개발해온 프로젝트의 도메인 지식은 내가 가장 잘 알고 있다보니 이 프로젝트 만큼은 내가 도메인 분리를 맡게 될 것 같다...그래서 공부중이다.서비스 분리 전략 3가지 Key Point단계적으로 마이그레이션 한다.처음에는 크게 분리하고 추후 작게 분리한다.서비스 분리를 깔끔하게 나눠주는 마법같은 공식은 없다. (이 부분이 너무 슬펐다.)서비스 분리 8가지 원칙첫 번째 원칙: 작고 분리가 쉬운 서비스로 워밍업간단한 서비스를 분리하며 역량을 내재화.신규 개발 기능이나 내부 의존성이 적고, 중요도가 낮은 기능부터 시작.Pilot 서비스 분리의 기준:내부 의존성이 낮은 기능(Core 의존성, 데이터 의존성 적음).장애 발..
Terraform AWS: VPC 만들기
·
탐구 생활/Terraform
Terraform 을 이용하여 로컬 리소스를 다루는것도 의미가 있겠으나, 내가 Terraform 을 알아보기 시작한 이유는 클라우드 인프라를 재사용가능한 효율적인 형태로 다루고 싶기 때문이었다. 그 첫번째로 AWS 의 기본 리소스중 하나인 VPC 를 만들어보겠다.AWS VPC우선 지금부터 만들려고하는 AWS VPC 에 대한 개념과 이를 구성하는 세부 요소에 대해서 알아보고 왜 많고 많은 AWS 인프라 중에서 VPC 를 먼저 만들려고하는지 알아보자 VPC(Virtual Private Cloud) 란 AWS 클라우드 내에서 자신의 네트워크를 "논리적" 으로 격리하여 정의할 수 있는 가상 네트워크이다. 인터넷에 노출되면 안되는 리소스를 격리하여 보안에 필수적이며, 보안 그룹과 네트워크 ACL 를 활용하여 더욱..
Terraform 기초: 리소스 생명 주기 및 데이터 소스 관리하기
·
탐구 생활/Terraform
1. 리소스 생명 주기 (Lifecycle Rules)Terraform은 리소스를 업데이트할 때 기존 리소스를 삭제(destroy)하고 새로운 리소스를 생성(create)하는 immutable 인프라 접근 방식을 따릅니다. 그러나 모든 경우에 이러한 동작이 적합하지 않을 수 있습니다. 이를 제어하려면 lifecycle rules를 활용할 수 있습니다.1.1 create_before_destroy기존 리소스를 삭제하기 전에 새로운 리소스를 먼저 생성한다. 어떤 리소스는 다운 타임을 최소화하기 위해 이러한 조치가 필요할 것이다.resource "aws_instance" "example" { ami = "ami-123456" instance_type = "t2.micro" lifecyc..
Terraform 기초: commands
·
탐구 생활/Terraform
Terraform는 인프라를 코드로 관리하기 위한 강력한 도구이다. Terraform을 효과적으로 사용하려면 다양한 명령어를 이해하고 활용하는 것이 중요하므로 Terraform에서 자주 사용되는 명령어들과 그 활용 사례에 대해 살펴보자.주요 Terraform 명령어1. terraform initterraform init은 Terraform 프로젝트를 초기화하는 데 사용된다. 이 명령은 구성 디렉토리를 준비하고 필요한 provider 플러그인을 다운로드한다. Terraform 작업의 첫 단계로 항상 실행해야 한다.2. terraform validateterraform validate는 Terraform 구성 파일의 구문 오류를 확인한다. 이 명령은 코드를 실행하기 전에 구성 파일이 올바른지 검증하는 데 유..
Terraform 기초: State
·
탐구 생활/Terraform
Terraform를 사용할 때 중요한 개념 중 하나는 State 이다. 이번 글에서는 Terraform의 State의 역할과 중요성, 그리고 실무에서의 활용 방안에 대해 살펴보겠다.Terraform State란 무엇인가?Terraform의 State 파일은 리소스 구성과 실제 인프라 간의 매핑 정보를 저장하는 역할을 한다. 이는 Terraform이 실행 계획을 생성하고, 구성 파일과 실제 인프라 간의 불일치(Drift)를 식별하는 데 사용된다. 쉽게 말해, Terraform State 파일은 실제 세상에 존재하는 모든 리소스의 청사진(blueprint)이라고 볼 수 있다.이러한 State 는 terraform apply 가 되는순간 terraform.tfstate 파일에 json 형태로 저장이 된다.Te..
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가 인스턴스 상태를 체크할 수 있도록 한다..