Microservice architcture 디자인

- MSA 시스템은 한가지만 담당하는 작은 시스템으로 이루어져야한다. 이래야만 명확할수 있다.

-code는 짧고 심플해야한다. Node 커뮤니티의 가이드라인은 100라인 근처의 프로그램을 제한한다. 이러면 유지보수가 편해진다.

-어떠한 서비스도 다른 서비스에 의존하면 안된다. 서비스가 decouple되야한다. 그래야지 scalability와 명확성 , maintainability가 향상된다.

-MSA패턴의 데이터 모델은 각자 데이터베이스를 유지해야하지 중앙집중되서는 안된다.

-독립적인 서비스는 쉽게 복제가 되거나 숨길수 있어야된다. MSA에서 Scaling은 자연스런 기능임 (줄이거나 늘리는 양방향). 이것의 장점은 프로토 타입 서비스가 테스트될수있고 새로운 기능을 추가할수 있게 한다.

-독립되고 stateless 서비스는 쉽게 붙있수 있고 업그래이드가 될수 있다. 그러면 프로토 타입 테스트가 쉽게 가능하다.

-Failure는 어쩔수 없다. 따라서 시스템은 Failure에 관대해야한다. Failure를 지역화, 격리화 되고 복구가 쉽게 되는 메커니즘을 구현해야함. 즉 의존성을 줄여서 견고함을 향상시킨다.

-어떠한 시스템에서도 테스트는 필수적이여야한다. 모호하지 않고 간단한 stateless서비스는 쉽게 테스트 가능한다. 테스트의 중요한것은 stubbing이나 mocking 으로, 서비스가 상호보완되게 테스트 가능하도록 하는 시뮬레이션이다. 깔끔하게 된 서비스는 쉽게 시뮬레이션 가능하다. 그러므로 지능적인 테스트 가능한 환경을 만들어라.

*test stub은 특정 시스템 컴포넌트의 개발이 완료되지 않은 상황에서도 필요한 시험을 진행하기 위해 생성된 더미 컴포넌트.단지 기능 또는 프로시저 헤더 등의 코드 루틴만 갖고 내부 프로세싱은 제한적으로 존재하거나 존재하지 않는 것이 일반적이다.
Node JS 튜토리얼 심심풀이 번역

http://www.tutorialspoint.com/nodejs/nodejs_tutorial.pdf

(단순히 제가 제 자신의 이해를 돕기 위해 정리한겁니다)

6. Callback Concept

콜백은 비동기 (asynchronous) 함수
no wait for File I/O : 비동기 프로그래밍의 좋은 예시.

예)
var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
if (err) return console.error(err);
console.log(data.toString());
});
console.log("Program Ended");

출력 :
Program Ended
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

콜백을 사용하게 되면 프로그램의 가장 아래부분까지 호출 된후에 파일읽기가 진행된다.

7. Event Loop

Node.Js는 싱글 스레드 어플리케이션 이지만, event와 callback 컵셉통해 동시성을 보장한다. 이 event와 callback은 async function calls로 동시성을 유지함.


Node쓰레드는 하나의 테스크가 끝나도 이벤트루프를 유지하고 상응하는 이벤트가 event-listener를 호출하도록 신호를 보낸다.

Event-Drive Programming
Node.Js는 이벤트를 많이 사용하고 이건 Node.js가 다른 비슷한 테크닉보다 엄청 빠른 이유이기도 하다. Node 서버가 시작하자마자 단순히 변수 함수들을 선언되면 이벤트가 발생하기를 기다린다.

event-driven 응용프로그램에는 메인루프가 대체적으로 이벤트들을 듣고(기다리고) 그 이벤트 리스너중 하나가 발견되면(detected) callback function를 트리거 한다.


비록 이 이벤트 호출 방식이 callback이랑 아주 비슷해보이더라도 콜백 함수 비동기 함수가 결과를 리턴할때 호출되고, 이벤트 핸들링은 observer pattern을 이용해서 동작한다. 이벤트 감지 (LIsten to events )같은 function은 Observers같이 행동한다. event가 발생하면 언제라도 그 리스너는 함수를 실행한다. node.js는 많은 in-built 이벤트가 이벤트 모듈과 EventEmitter 클래스를 사용가능하다.

디자인 패턴 정리

Deconrator - 객체에 동적으로 기능을 추가하고 삭제할때 유용하다.

Facade - 클라이언트가 많은 서브시스템으로 결합도가 높을때 의존관계를 간소화 시킴.
(이것도 디자인 패턴?)

Proxy - Client와 기존 클래스 사이에 중간 매개체로 Proxy클래스를 정의하고 기존클래스의 기능이나 역활을 대행.
(Decorator나 Adapter와 비슷)

Adapter - 이미 구현된 모듈이 있지만 원하는 다른 인터페이스로 변경하고자 할때 유용함.

Flyweight - 객체 공유를 통해 자원 사용량을 줄여주기 위한 설계.

식은밥 먹는것 처럼 맛없는 소금기 하나없는 구운 닭가슴살을 우격다짐으로 입안 가득 쑤셔넣는다.
이게 다 내 근육이 되려니하고 자기위로를 해보지만 맛없는건 맛없는다.

2007년 10월 한달동안 다름대로 열심히 다녔으나 운동한날은 열손가락과 왼쪽발가락으로 충분히 셀 정도 밖에 안되고, 쓰라린 근육통도 제대로된 단백질이 없어서 근육이 울부짖는거라는 걸 알게 된지 얼마 안됐다.

한마디로

'한달동안 헛수고만 했다."

아 졸리지만 자는건 아깝다..

왜냐하면 내일부터 꿀맛같은 휴가이기때문이다!

내생애 휴가다운 첫휴가를 보내길 기원했건만, 올해도 어김없이 시골내려가서 잠만 자다 올듯 싶다.

아마 아직 방학인 초중학교 동창들을 길가다가 마주쳐 술 한잔 기울이는 행운도 찾아오길 바란다.

오랫만에 어머니한테 살갑게 잘해드려야지!