일부 원칙과 디자인 패턴들에는 Node.js 플랫폼과 생태계에 대한 개발자의 경험이 제대로 녹아있다. 가장 특별하게 생각할 수 있는 것은 아마도 콜백과 프라미스와 같은 비동기적 구성이 많이 사용되었다는 점이다. Node.js를 특별하게 만드는 중요한 측면들 중 하나는 그것의 철학이다. Node.js를 알아가는 것은 단순히 새로운 기술을 배우는 것이 아니라 Node.js 가 가진 문화와 커뮤니티를 받아들인다는 의미를 갖는다.
Node.js 철학
모든 프로그래밍 플랫폼은 자신들만의 철학, 커뮤니티에서 따르게 되는 일련의 원칙들과 지침, 플랫폼의 진화와 애플리케이션 개발 및 디자인에 영향을 주는 이데올로기를 가지고 있다. 이러한 규칙들은 강제적인 것이 아니며 항상 따를 필요도 없지만 우리들이 소프트웨어를 디자인하는 데에 있어 영감을 얻고자 할 때 많은 도움이 된다.
1. 경량 코어
Node.js 코어는 몇 가지 원칙들을 기반으로 자신의 기초를 구성하였다. 그 중 한 가지는 최소한의 기능 세트를 가지고 코어의 바깥 부분에 유저랜드(userland) 혹은 유저스페이스(userspace)라 불리는 사용자 전용 모듈 생태계를 두는 것이다. 이 원칙이 Node.js 문화에 엄청난 영향을 주었고 그 영향으로 엄격하게 관리되어 안정적이지만 느리게 진화하는 해결책을 갖는 대신 커뮤니티가 사용자 관점에서의 폭넓은 해결책을 실험해볼 수 있는 자유를 주었다. 코어를 최소한의 기능 세트로 관리하는 것은 관리의 관점에서 편리할 뿐 아니라 전체 생태계 진화에 있어 긍정적인 문화적 영향을 미칠 수 있다.
2. 경량 모듈
Node.js 는 프로그램 코드를 구성하는 기본적인 수단으로 모듈 개념을 사용한다. 모듈은 애플리케이션과 재사용 가능한 라이브러리를 만들기 위한 구성 요소이다. Node.js 에서 가장 널리 통용되는 원칙 중 하나는 코드의 양뿐 아니라 범위 측면에서도 작은 모듈을 디자인하는 것이다. 이 원칙은 Unix 철학에 근거하는데, 특히 다음의 두 가지 수칙이 있다.
- "작은 것이 아름답다."
- "각 프로그램은 한 가지 역할만 잘하도록 만들어라."
Node.js 는 패키지 관리자(npm, yarn)의 도움을 받아 각 패키지가 자신이 필요로 하는 버전의 종속성 패키지들을 갖도록 함으로써 종속성 지옥에서 벗어나게 해 준다. 이러한 측면은 패키지가 충돌의 위험 없이 잘 집중화되고 많은 수의 작은 종속성을 가질 수 있도록 해준다. Node.js 에서는 이러한 관행이 표준이고 재사용성 측면을 향상시켜 준다.
작은 모듈은 재사용성이라는 장점 외에도 다음의 장점이 있다.
- 이해하기 쉽고 사용하기 쉽다.
- 테스트 및 유지보수가 쉽다.
- 사이즈가 작아 브라우저에서 사용하기에 완벽하다.
더 작고 집중화된 모듈을 갖는 것은 모두에게 공유와 재사용을 가능하게 해준다. 이것은 완전히 다른 수준에 적용된 Don't Repeat Yourself(DRY) 원칙이다
3. 작은 외부 인터페이스
Node.js의 모듈들이 갖는 장점은 작은 사이즈와 작은 범위 그리고 최소한의 기능 노출이다. 이러한 것들이 명확하게 사용될 수 있고 잘못된 사용에 덜 노출되도록 하는 API 생산 효과를 갖는다. Node.js 에서 모듈을 정의하는 가장 일반적인 패턴은 명백한 단일 진입점을 제공하기 위해서 단 하나의 함수나 클래스를 노출시키는 것이다.
Node.js의 많은 모듈들의 특징 중 또 다른 하나는 그들이 확장보다는 사용되기 위해서 만들어졌다는 것이다. 확장의 가능성을 금지하기 위해 모듈 내부 접근을 제한한다는 것이 덜 유연하다고 생각되지만 사실은 유스케이스를 줄이고, 구현을 단순화하며, 유지관리를 용이하게 하고, 가용성을 높인다는 장점들을 가지고 있다.
4. 간결함과 실용주의
완벽하고 모든 기능을 갖춘 소프트웨어와는 반대로 단순하게 설계하는 것이 좋은 실천이다. 구현을 위해서 적은 노력이 들고, 가벼워서 빨리 보급 가능하며, 유지보수가 쉽고 빠른 이해가 가능하다. 이러한 요인들이 커뮤니티의 기여를 보다 용이하게 하고 소프트웨어 자체의 성장과 향상을 돕는다. Node.js 에서 이 원칙이 채택되는 것에 가장 큰 영향을 준 것은 JavaScript이다. 사실 우리의 소프트웨어가 항상 현실의 근사치이며, 우리는 많은 노력과 유지보수가 필요한 엄청난 양의 코드로 완벽에 가까운 소프트웨어를 만들어 내려고 애쓰는 것보다 합리적인 복잡성을 가지고 빠르게 일할 때 더 많은 성공을 이뤄낼 것이다. 싱글톤이나 데코레이터와 같은 상당수의 전통적인 디자인 패턴을 완전하지는 않더라도 간단하게 구현할 수 있으며, 대부분의 경우 완전하고 완벽한 설계보다 복잡하지 않은 실용적인 접근 방식이 얼마나 선호되는지 보게 될 것이다.
'💻 프로그래밍 > 🅽 Node.js' 카테고리의 다른 글
Factory Design Pattern 2 (0) | 2022.09.23 |
---|---|
Factory Design Pattern 1 (0) | 2022.09.21 |
Retry Promise Design Pattern (0) | 2022.09.20 |
Promise.all 병렬 실행 (0) | 2022.09.19 |
return vs return await 함정 (0) | 2022.09.19 |