모든 플랫폼(Platform)은 철학 을 가지고 태어난다. node.js도 마찬가지라고 생각한다. 우리는 새로운 언어(Language)를 배울 때 단순히 Syntax와 원리에만 집중하여 학습한다. 좀 더 deep하고 핵심을 꿰뚫어야 해당 플랫폼을 올바르게 이해할 수 있다고 생각이 들어 Desing Pattern을 공부하기로 결정하였다.
Node.js
장점과 단점
Node.js 코어 자체는 몇 가지 원칙을 가지고 있다. 그 중 하나는 코어를 최소의 기능 세트로 하고, 나머지를 사용자의 몫으로 해서, 핵심 모듈의 바깥 영역 모듈들을 생태계에 맡기는 것이다. 이렇게 핵심 기능 세트를 최소한으로 유지하면, 유지 보수 측면에서 편리할 뿐만 아니라, 전체 생태계 발전에 긍정적인 문화적 영향을 가져올 수 있다.
모듈 개념은 프로그램 코드를 구성하는 기본 수단으로 사용한다. 이것은 어플리케이션과 패키지라고 하는 재사용 가능한 라이브러리를 만들기 위한 조립용 블록이다. 그래서 Node.js는 코드 크기뿐만 아니라 범위적인 면에서면 작은 모듈을 설계 하는 것이 특징이다.
"작은 것이 아름답다"
"각 프로그램이 각기 한 가지 역할을 하도록 만든다"
더 작고 집중된 모듈을 사용하면 작은 코드 조각이라 해도 모두가 공유하거나 재사용할 수 있다. 이것은 DRY(Don`t Repeat Yourself, 같은 것을 반복하지 말라!) 원칙에 대한 새로운 차원의 적용이다.
Node.js의 모듈은 크기와 범위만 작을 뿐만 아니라 대개 최소한의 기능을 노출하는 특성을 가진다. Node.js에서 모듈을 정의하는 가장 일반적인 패턴은 함수나, 생성자와 같이 하나의 핵심 기능을 표현하 동시에, 더 많은 고급 기능이나 보조 기능은 노출된 함수나 생성자의 속성이 되도록 한다. 이를 통해 사용자는 중요한 내용과 부수적인 내용을 구분 할 수 있다.
명백한 단일 **진입점(main함수)**을 제공한다는 단순한 사실 때문에 다른 기능은 존재하지 않는다.
"단순함이야말로 궁극의 정교함이다."
저명한 컴퓨터 과학자인 리차드 가브리엘은 모델(Model)을 묘사할 때 "불완전한 것이 더 낫다"라는 말을 했다고 한다. 이는 부족하지만 단순한 기능이 소프트웨어에 있어서 더 좋은 디자인이라는 것을 의미한다. 그의 에세이 [The Rise of "Worse is Better"]에서 이렇게 말하고 있다.