본문 바로가기

분류 전체보기375

콘웨이의 법칙과 시스템 설계 / 대규모 마이크로 서비스 - 마이크로 서비스 아키텍처 11장 시스템 구조는 설계하는 조직의 커뮤니케이션 구조를 닮게 된다. 모든 시스템은 그 조직의 의사소통 구조와 동일하게 만들어진다. 조직의 구조가 시스템 아키텍처 설계에 영향을 준다. 책에서는 팀의 분리 상태를 들어서 설명하고 있다. 연관성이 높은 조직 A와 B가 밀접하게 소통하지 못하고 원격으로 이메일만 조금 주고 받는다면 어떨까 이렇게 개발을 할때 정말 좋지 않은 상황은 그대로 커뮤니케이션 되지 않은채 서비스가 방치되는 것이다. 컨텍스트를 잘 나누고 관련 있는 조직끼리 잘 소통하게 해야한다. 예를 들어서 고객의 주문 서비스와 상담 서비스를 아예 다른 팀에서 개발 한다고 해보자. 두 조직은 분리되어 있다. 커뮤니케이션 없이 코드베이스도 완전히 분리되게 된다. 이렇게 개발하다 만약 상담 서비스 개발하던 곳에서 .. 2020. 6. 8.
MSA 모니터링 / 장애전파 / 테스트 테스트 종류 유닛 테스트: 함수 단위의 테스트 통합 테스트: api 요청 후 db insert 까지 테스트 하는 것 E2E 테스트: 사용자입장에서 end to end 테스트 스모크 테스트: QA 가 의미 없는 테스트를 하지 않도록 프로그램이 돌아가는지 테스트 테스트에서의 서비스 주도 계약 - CDC ( Consumer Driven Contract ) 서비스의 기대사항을 작성한다. 소비자가 어떻게 사용할지를 작성한다. 엔드 투 엔드 테스트에 드는 비용을 줄일 수 있다. // 고객은 주문 항목을 장바구니에 담을 수 있어야한다. // 장바구니에 담은 항목은 결제 할 수 있어야 한다. // 고객은 장바구니에서 수량을 조절 할 수 있어야 한다. // ... ... ... 모니터링 문제 모놀리틱 서비스는 모니터링 .. 2020. 6. 7.
node js 스트림 node js 스트림 스트림: 배열이나 문자열같은 데이터 컬렉션 node js 에서 대량의 파일을 읽을때 그냥 읽으면 메모리 소비를 어마어마하게 하게 된다. stream 을 사용하면 메모리 소비를 많이 줄일 수 있다. 스트림은 파일을 읽고 쓸때도 쓸 수 있지만 http request, response 에서도 쓸 수 있다. http request 는 읽기 가능한 스트림이고 http response 는 쓰기 가능한 스트림이다. 스트림을 쓰지 않을때, 쓸 때 차이 스트림을 쓰지 않는다면 파일을 읽을 때 그대로 변수에 할당하고 사용해야 한다. 아래 예제처럼 말이다. const fs = require('fs'); const server = require('http').createServer(); server.on.. 2020. 6. 7.
카나리 배포 , 블루그린 배포 블루그린 배포 로드 밸런서를 활용해서 2개(이전 버전, 신규버전) 를 배포한다. 신규 버전을 테스트한다. 그리고 이전 버전의 트래픽을 신규 버전으로 보내는 방식이다. 카나리 배포 신규 버전을 지정한 서버 1대, 특정 유저에게만 배포한다. 정상적이면 전체를 배포한다. 문제가 있다면 롤백한다. 트래픽을 조금 흘려서 괜찮은지 확인하고 배포하는 방식이다. 2020. 6. 7.
kafka, rabitmq, sqs 사용시 고려사항 - 마이크로 서비스 아키텍처 sqs 같은 비동기식 구현에서 만약에 처리되지 않은 메세지가 있다면.아래 4가지 방법을 쓴다.1. 재처리메세지 처리 중 에러가 발생했을때 다시 처리하도록 하는 방법최대 재처리 횟수를 정해야한다. - 보통 3~5번에러 발생 후 바로 재처리하면 같은 원인으로 에러가 날 수 있다.일정 시간 기다렸다가 재처리한다.1번째 에러 발생시 - 1초후2번째 에러 발생시 - 5초후세번째 30초후 2. 무시에러가 난 메세지를 무시하고 없애는 방식이다. 3. 알림에러가 발생했을때 관리자에게 알려주는 방식이다. 4. 사람이 처리에러 처리 부분이 복잡하거나 규모가 큰 경우 에러처리를 해주는 컴포넌트를 만든다.Error hospital 이라고 부른다.처리 중 에러가 난 메세지들을 모아서 다양한 정책으로 재처리한다. 큐 메세지 전달.. 2020. 6. 7.