본문 바로가기

Archived(IT)/MSA

(9)
마이크로 서비스 패턴 #6 이벤트 소싱(비즈니스 로직 설계) 이벤트 소싱이벤트 발행 및 관리에 대해서 저장을 어떻게 할 것인가?이에 대해 MSA는 이벤트 소싱이라는 패턴을 활용한다. 이벤트 소싱이란 이벤트 저장소에 해당 이벤트를 순차적으로 저장해서 관리하는 것이다. 즉, 이벤트의 최종 결과값이 아닌 전체 순서를 모두 저장하여 관리하는 형태이다. 이러한 이벤트들을 개체에 차례로 적용시켜서 따라가면 최종 결과값을 얻게 된다. 기존 흔히 사용하는 영속화 모델과 비교한다면 이미 정형화된 모델에 상태를 저장하는 과정에서 나타나는 문제를 해결할 수 있다. 영속화 모델에서는 지나간 작업 목록에 대해 기록을 찾기 어렵다(ex. 삭제했던 데이터 전부 가져오기). 계속해서 최신 상태의 개체에 상태를 업데이트 하기 때문이다. 그 외에도 문제점들이 있는데 정리하면 다음과 같다. 영속화..
마이크로 서비스 패턴 #5 비즈니스 로직 설계 개요 비즈니스 로직 설계에 있어 큰 어려움 2가지 도메인 모델은 서로 얽혀있다 트랜잭션 관리 하의 비즈니스 로직 설계 어려움 비즈니스 로직 구성 패턴 2가지 1) 절차적 구성의 트랜잭션 스크립트 패턴 > 복잡한 비즈니스 로직 구현 어려움 2) 도메인 기반 모델 패턴 > 클래스로 나누어 복잡한 비즈니스 로직 구현 가능 VO 와 DAO, DTO 로 나누듯이 상태 클래스와 동작 클래스로 구분지어 설계 DDD(Domain Driven Design) Entity : 영속적인 ID를 가진 객체 Value Object : 값들을 모아 놓은 객체 Factory : 객체 생성 로직이 구현된 객체 Repository : entity 를 저장하는 DB 접근 로직 캡슐 서비스 : entity, VO 에 속하지 않은 비즈니스 ..
마이크로 서비스 패턴 #4 트랜잭션 관리 트랜잭션 관리?(트랜잭션 : 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다, ACID 트랜잭션이 대표적인 특성) MSA에서는 #3 IPC와 같은 맥락으로 트랜잭션 관리가 조금 더 복합적이다.하나의 DB 트랜잭션으로 처리하던 모놀리틱한 서비스가 아니기에 트랜잭션 관리가 복잡해지는 것이다.자체 DB들을 지닌 여러 서비스들이 각각의 트랜잭션을 어떻게 관리할 수 있을까, 이런 부분들에 대해서 알아보고자 한다.분산 트랜잭션? 사가(SAGA)기존에는 분산 트랜잭션을 통해서 여러 서비스, DB들에 대해 데이터 일관성을 유지할 수 있었다.그렇지만 동기 IPC에서 오는 낮은 가용성에 의해 최근까지 많은 신기술들과 접목하기에는 성..
마이크로 서비스 패턴 #3 IPC MSA 에서 왜 통신이 필요한가? 당연한 이야기이다. 서비스가 나누어져 있고 메모리가 독립적으로 구성된다. 원래 기존의 모놀리틱 서비스의 경우 하나의 메모리 안에서 얼마든지 다른 서비스(메소드)의 메모리를 주소로서 참조가능했다. 즉, 접근가능해서 input과 output을 스레드 내에서 얼마든지 주고 받을 수 있었다. 그러나 서비스가 나누어지면서 메모리 상으로 독립된 공간에서 서비스(메서드)들이 존재하게 되고 하나의 스레드 안에서 다른 독립된 메모리 상의 주소에 접근할 수 없게 되었다. 그러니 스레드들 간에 어떠한 방식으로든 통신이 필요하게 된 것이다. 그 방식의 대표적인 방식으 API 형태가 될 수 있겠다. 상호작용 스타일 통신에는 크게 2가지로 나눠볼 수 있다. 일대일/일대다 일대일 : 각 클라이언트..
마이크로 서비스 패턴 #2 마이크로 서비스 아키텍처 키워드 위주의 복습용 정리 소프트웨어 아키텍처 컴퓨팅 시스템의 소프트웨어 아키텍처는 소프트웨어 엘리먼트와 그들 간의 관계, 그리고 이 둘의 속성으로 구성된 시스템을 추론하는 데 필요한 구조의 집합이다. -Len Baas- 애플리케이션의 요건 애플리케이션이 해야할 일을 정의기능 요건 애플리케이션의 서비스 품질 요건 4+1 뷰 모델 계층화 아키텍처 스타일 표현 계층(Presentation) : 사용자 인터페이스 또는 외부 API 구현 계층 비즈니스 로직 계층 : 비즈니스 로직 구현 계층 영속화 계층(Persistence) : DB 상호 작용 로직이 구현된 계층 이에 따른 문제점 표현 계층이 하나 뿐이다(애플리케이션 호출하는 시스템 다수 존재 가능) 영속화 계층이 하나 뿐이다(상호작용하는 DB 다수 존재 가능..
마이크로 서비스 패턴 #1 모놀리틱으로부터 키워드 위주의 복습용 정리 모놀리식이 꼭 나쁠까? 개발의 편이성(IDE는 단일 App 최적화) 테스트 및 배포 용이성(테스트 과정의 단순화) 확장 용이성(다중 인스턴스) 모놀리식이 나빠지는 순간 복잡성의 과부하(대규모 개발 조직에 따른) 개발 속도 저하(테스트 및 배포 과정의 과도화) 확장성의 저하(다양한 리소스) 전달성 및 신기술 도입 어려움 확장큐브 애플리케이션을 확장한다는 의미에는 크게 3가지 방향 X축 확장 -> 여러 인스턴스에서 같은 서비스 나눠서 처리(동일 인스턴스의 증가) Z축 확장 -> 요청의 속성에 따라 서비스 나눠서 처리(고객 아이디 A~H, L~P, R~Z) Y축 확장 -> 서비스를 나누기(주문 서비스, 결제 서비스, 고객 서비스 등) MSA의 여러 특징 마이크로서비스는 모듈성, 각개..
마이크로 서비스 패턴 #0 MSA에 대해 정리하기 포스팅 계기 MSA에 대해 공부를 하겠다고 다짐한 지 어느새 수개월이 지나서야 본격적으로 책을 사고 공부를 시작했다. 이것저것 블로그 포스팅을 반쯤 나간 영혼으로 읽어보며 나름대로 머리속으로 정리하고 이해해나가고 있다고 생각했다. 그러다가 이번 주에 겪은 일을 계기로 포스팅을 해보며 제대로 정리 및 공부하기로 결심했다. 간략히 각색해보면 이렇다. 나 : 형, 형네 회사에서는 서비스들 다 MSA로 구성되어 있어요? D : 응? MSA가 뭐야? 나 : 음.. 마이크로 서비스 아키텍처? 서비스를 작은 서비스 단위로 쪼개서 구현되어 있는거? D : 작은 서비스 단위로 쪼개서 돌아가는 게 어떤 의미지? 나 : 음... 큰 서비스가 있다면..(주저리 주저리).. 예를 들어 쇼핑몰 어플리케이션이 있다면 결제 서비스와..
SOA(Service Oriented Architecture) 개요 MSA에 대한 이야기를 할 때, 함께 언급되는 것이 SOA이다.SOA는 Service Oriented Architecture의 약자로, 가장 큰 핵심은 ESB(Enterprise Service Bus)라는 미들웨어를 통해 서비스들을 호출하여 조합해서 제공하는 것이다.예를 들어, 쇼핑몰이라는 새로운 서비스를 구축한다고 가정하자. 이 때, 결제 서비스, 상품 검색 서비스, 등록 서비스 등등 기존에 구축해둔 서비스가 존재한다면 이러한 서비스들을 하나의 블록 단위로 보고 재조합(ESB)하여 쇼핑몰이라는 서비스를 고객에게 제공하는 것이다. SOA 개념과 구현된 프로젝트는 이미 1990년대부터 구현되어 왔었다. 그러나 SW의 급격한 변동성과 관련되어 2000년대에 들어서 더욱 주목을 받은 개념이다. 이전 서비..