Node.js 코어는 몇 가지 원칙들을 기반으로 자신의 기초를 구성하였다. 그 중 한 가지는 최소한의 기능 세트를 가지고 코어의 바깥부분에 유저랜드(userland) 혹은 **유저스페이스(userspace)**라 불리는 사용자 전용 모듈 생태계를 두는 것이다. 이 원칙이 Node.js 문화에 엄청난 영향을 주었다. 코어를 최소한의 기능 세트로 관리하는 것은 관리의 관점에서 편리할 뿐 아니라 전체 생태계 진화에 있어 긍정적인 문화적 영향을 미칠 수 있다.
Node.js는 프로그램 코드를 구성하는 기본적인 수단으로서 모듈 개념을 사용한다. 이것은 애플리케이션과 재사용 가능한 라이브러리를 만들기 위한 구성 요소이다. Node.js에서 가장 널리 통용되는 원칙 중 하나는 코드의 양 뿐 아니라 범위의 측면에서도 작은 모듈을 디자인 하는 것이다.
Node.js는 이 개념을 완전히 새로운 차원으로 끌어올렸다. 패키지 관리자의 도움을 받아 각 패키지가 자신이 필요로 하는 버전의 종속성 패키지들을 갖도록 함으로써 종속성 지옥에서 벗어나게 해준다. 이러한 측면은 패키지가 충돌할 위험 없이 잘 집중화되고 많은 수의 작은 종속성을 가질 수 있도록 해준다. 재사용성 측면을 향상시켜줌.
작은 모듈은 재사용성이라는 장점 외에도 다음의 장점이 있다.
더 작고 집중화된 모듈을 갖는 것은 모두에게 공유와 재사용을 가능하게 해준다. 이것은 완전히 다른 수준에 적용된 Don’t Repeat Yourselt(DRY) 원칙이다.
Node.js의 모듈들이 갖는 장점은 작은 사이즈와 작은 범위 그리고 최소한의 기능 노출이다. Node.js에서 모듈을 정의하는 가장 일반적인 패턴은 명백한 단일 진입점을 제공하기 위해서 단 하나의 함수나 클래스를 노출시키는 것이다. Node.js의 많은 모듈들의 특징 중 또 다른 하나는 그들의 확장보다는 사용되기 위해서 만들어 졌다는 것이다. 확장의 가능성을 금지하기 위해 모듈 내부 접근을 제한한다는 것이 덜 유연하다고 생각되지만 사실은 유스케이스를 줄이고, 구현을 단순화하며, 유지관리를 용이하게 하고, 가용성을 높인다는 장점들을 가지고 있다. 실제로 이는 내부를 외부에 노출시키지 않기 위해 클래스보다 함수를 노출시키는 것을 선호한다는 것을 의미한다.
Keep It Simple, Stupid(KISS) 원칙?
단순함이야말로 궁극의 정교함이다 -레오나르도 다빈치-
디자인은 구현과 인터페이스 모두에서 단순해야 한다. 구현이 인터페이스보다 더 단순해야 한다는 것은 더욱 중요하다. 단순함이 디자인에서 가장 중요한 고려 사항이다.