전체 글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. MSA 데이터 베이스 분리, 트랜잭션 처리 TCC , 앤서블/테라폼 데이터베이스 분리 도메인 단위로 나눈다. - 국가코드 같은 공유 정적 데이터는 코드나 설정파일에 넣는 것도 방법이다. - 이렇게 코드에 넣으면 속도가 빨라진다. 공유 데이터 접근하기 데이터베이스 1개를 같이 쓰지 말고 서비스에 접근해서 데이터를 다룬다. 창고 서비스와 재무 서비스도 서로 다른 데이터베이스를 써야 한다. 트랜잭션 유지 문제 마이크로 서비스 분산 트랜잭션 처리 방법 msa 는 중간에 서비스에 장애가 생기면 트랜잭션을 어떻게 보장할까 TCC 라고 하는 방법으로 해결 할 수 있다. Try Confirm Cancel 의 줄임말이다. 트랜 잭션 참여자가 모두 동의하면 트랜잭션 매니저가 각각의 참여자에게 커밋하라고 지시한다. 하나라도 반대표가 나온다면 모든 참여자에게 롤백 명령을 보낸다. 지속적 통합.. 2020. 6. 7. 디자인 패턴- 퍼사드 패턴, 스트랭글러 패턴 디자인 패턴 퍼사드 패턴 - 어떤 서브 시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공한다. 호출자 입장에서 서브 클래스를 알 필요없이 하위 시스템을 쓸 수 있다. 컨트롤러 입장에서 서비스 클래스를 이렇게 호출하면 된다. BookService.createOne() 이렇게 하고 createOne 에서 필요한 로직을 처리한다. 자주 쓰는 모듈이 있거나 필요하다면 npm 모듈로 만들고 받아서 구현한다. 메인 코드를 최소화 할 수 있다. 교살자 패턴 - 스트랭글러 패턴 특정 기능을 새로운 애플리케이션 및 서비스로 점진적으로 교체한다. 그리고 레거시 시스템을 중단한다. MSA 4장 정리 - 데이터베이스 통합은 최대한 피하라 - REST, RPC 의 장단점을 이해하고 사용하기 - 오케스트레이션(동기) 보.. 2020. 6. 7. MSA의 장점, 단점. 동작 방식, 버저닝 전략 MSA 통신 할때 보안 처리 방법 EKS 같은 쿠버네티스를 사용 할 때는 Istio 같은 솔루션이 도움이 된다. 주소를 외부에 노출하지 않고 pod끼리 http://order-api:3000 이런 식으로 통신 할 수 있다. MSA구조의 장점, 단점. 모놀리틱과 비교해서 msa 장점 msa 단점 기술 이기종성 - 분리된 서비스로 개발할 수 있기 때문에 서비스마다 가장 적합한 기술을 선택 할 수있다. 배포 용이성 - 모놀리틱의 거대한 프로젝트를 빌드하는 것보다 마이크로 서비스 1개를 배포하는것이 훨씬 쉽고 빠르다. 확장성 - 새로운 개발항목이 추가되었을때 모놀리틱은 전체 코드에 영향이 있는지를 살피고 개발, 테스트 해야한다. 마이크로 서비스는 코드베이스가 작다. 그리고 새로운 서비스를 독립적으로 만들면 된다.. 2020. 6. 7. javascript findIndex, indexOf, for 속도 비교 글 출처 : https://nikitahl.com/how-to-find-an-item-in-a-javascript-array/ How to find an item in a JavaScript array (+performance tests) Several examples of how to find an item in an array in JavaScript with performace tests nikitahl.com javascript findIndex, indexOf, for 속도를 비교한 글이 있다. 그림에서 높은게 빠른 것이고 for loop 가 제일 빠르다. for문으로 다 쓰는 것이 좋아보이지는 않는다. 다른 메소드들도 장점이 있다. indexOf 를 쓰면 -1 을 활용한 코딩도 할 수 있으니까 i.. 2020. 5. 28. 이전 1 ··· 3 4 5 6 7 8 9 ··· 42 다음