처음 서버를 만들어 볼 때, 나에게 node.js는 그저 express를 사용하기 위한 바탕 정도로 느껴졌다. 내가 아는거라곤 Node.js는 Chrome V8 JavaScript 엔진으로 빌드 된 JavaScript 런타임입니다
정도일 뿐.
결국 내가 express 라이브러리를 사용해 백엔드를 개발하고 싶다면 node.js를 이해하는게 우선순위라는 생각이 들었다.
차근차근 파보도록 하자
Node.js = 경량
node.js 코어는 몇 가지 원칙을 기반으로 기초를 구성한다
그 중 한 가지는 최소한의 기능 세트를 가지고 코어의 바깥 부분에 유저스페이스라 불리는 사용자 전용 모듈 생태계를 두는 것이다. 뭔가 어려운 말들 같지만 어렵게 생각할 필요 없다. 사용하는 IDE에서 필요한 플러그인이 있으면 추가하듯, node.js라는 최소한의 모듈과 기능으로 구성된 시스템을 사용하면서 사용자가 추가로 필요한 모듈만 불러와 사용할 수 있다는 말이다.
node.js의 코드를 구성하는 기본적인 수단으로서 모듈 개념을 사용한다.
모듈은 애플리케이션과 재사용 가능한 라이브러리를 만들기 위한 구성 요소이며 node.js에서 가장 널리 통용되는 원칙 중 하나는 코드의 양뿐 아니라 범위의 측면에서도 작은 모듈을 디자인 하는 것이다
해당 원칙은 Unix 척할에 근거하며 다음 두 가지 수칙이 있다
node.js는 패키지 관리자 (npm, yarn)의 도움을 받아 각 패키지가 자신이 필요로 하는 버전의 종속성 패기지들을 갖도록 함으로써 종속성 지옥에서 벗어나게 해준다. 이러한 측면은 패키지가 충돌의 위험 없이 잘 집중화되고 많은 수의 작은 종속성을 가질 수 있도록 해준다.
짤막상식 : 종속성 패키지란, node.js 애플리케이션이 제대로 실행되는데 꼭! 필요한 외부 모듈 또는 라이브러리를 의미한다. package.json을 살펴보면 "dependencies"에 종속성 패키지와 버젼이 나열되어있다. devDependencies는 말 그대로 개발 프로세스 중에만 필요하고 프로덕션 런타임에는 필요하지 않은 유틸리티가 포함된다.
작은 모듈은 재사용성이라는 장점 이외에도 다음의 장점이 있다
즉 더 작고 집중화된 모듈을 갖는 것은 모두에게 공유와 재사용을 가능하게 해주며 이것을 완전히 다른 수준에 적용된 Don't Repeat Yourself(DRY) 원칙이라 한다.
node.js가 모듈을 사용하면서 갖는 또 다른 장점으론 최소한의 기능 노출이다.
모듈을 정의하는 가장 일반적인 패턴은 명백한 단일 진입점을 제공하기 위해서 단 하나의 함수나 클래스를 노출시킨다.
모듈 내부 접근을 제한하고 확장 가능성을 금지해 캡슐화 하여 use case를 줄이고 구현을 단순화하며, 유지관리를 용이하게하고 가용성을 높인다.
캡슐화 및 추상화: 내부 세부 정보를 숨김으로써 구현 복잡성을 노출하지 않고 명확하고 잘 정의된 API를 제공하여 다른 개발자의 모듈 사용을 단순화합니다.
원하지 않는 수정 방지: 내부 구성원에 대한 액세스를 제한하여 모듈의 기능을 손상시키거나 버그를 일으킬 수 있는 의도하지 않은 수정을 방지합니다.
안정성 및 유지 관리 가능성: 확장을 금지하면 모듈을 변경해도 관련 없는 외부 코드에 영향을 주지 않으므로 시간이 지남에 따라 모듈을 더 쉽게 유지 관리하고 발전시킬 수 있습니다.
보안: 내부 세부 정보를 숨기면 중요한 정보나 알고리즘이 승인되지 않은 사용자에게 노출되지 않도록 보호할 수 있습니다.