꾸르빅 블로그
[디자인 패턴 바이블] 0. Design Pattern 공부 시작 본문
Node.js 공부를 하면서 스터디에도 도움이 될만한 강의 주제를 고민하다가
최근에 학습한 디자인 패턴이 Node.js에서 어떻게 활용되는지에 대해 공유하기로 결정했다.
따라서 앞으로 포스팅할 내용은 이 책의 내용 정리 및 서칭을 통한 추가 자료 정리 위주로 될 예정!

Node.js 디자인 패턴 바이블
http://www.yes24.com/Product/Goods/101686866
Node.js 디자인 패턴 바이블 - YES24
완벽한 Node.js 애플리케이션 설계를 위한 디자인 패턴 바이블효율적이고 강력한 Node.js 애플리케이션 구축에 필요한 디자인 패턴들을 한 권으로 정리한다. Node.js로 프로그래밍을 하는데 필요한
www.yes24.com
이번 포스팅은 책을 공부하기 전에 "디자인 패턴"이 무엇인지, 책에서 다루는 디자인 패턴들이 어떤 것인지에 대해 가볍게 워밍업하는 내용을 다룰 예정이다.
- 설계 패턴(Design Pattern)
소프트웨어 분야에 자주 일어나는 설계 문제에 대한 해결책들을 재사용 가능한 패턴으로 정리한 것.
- 개발자가 디자인 패턴을 알아두면 좋은 점
1) 디자인 패턴 지식을 기반으로 재사용 가능하고 유연한/확장가능한 프로그램을 개발
2) 개발자들끼리 커뮤니케이션을 할 때 어떻게 개발할지 or 개발한 코드가 어떤 구조로 되어있는지 좀 더 간결하게 말하기 가능
- Levels of Pattern [POSA]
1) 아키텍처 패턴(Architecture pattern) : 시스템 전체에 대한 골격 및 구성/조직에 적용되는 패턴
대표적 예시로 MVC 패턴이 있다(전체 시스템을 Model, View, Controller 구조로 구분하여 개발)

Model : 무엇을 할지(데이터 구조부분)
Controller : 모델이 어떻게 할지(로직처리 부분)
View : 화면에 보여주는 역할(UI)
※ Model이 View와 직접적으로 연결되서는 안되고, View가 Model의 데이터를 직접적으로 확인해서는 안되는 특성이 있음.
(non-UI인 Model과 와 UI인 View간의 연결이 약하다)
2) Design Pattern : 아키텍처 패턴 적용 후 결정된 subsystem들간의 관계를 설계할 때 사용하는 패턴
아키텍처 패턴보다 작은 규모여서 전체 시스템에 영향을 끼치지 않는다.
앞으로 다루는 항목이 이 Design Pattern이며, 개발하는 기능의 특성별(개발 시 주의해야 하는 조건들)에 따라 다른 패턴을 사용한다.
ex) 전체 시스템에 사용되는 기본 설정값은 시스템 상 딱 하나여야 하기 떄문에 '싱글턴 패턴'을 채택한다.
3) Coding pattern(Programming idiom) : 프로그램 언어에 적용되는 low level 패턴.
설계한 부분을 실제로 구현할 때의 문제점을 해결하는 부분이며 언어의 특성에 의존적인 부분이 있다.
ex) 자바에서는 멀티쓰레드이기 때문에 기본적인 싱글턴 기법을 사용할 때 어려움이 있으니 static으로 쓰자!

1) POSA 구조설명 : https://guysheep.tistory.com/entry/D-002-Idiom-Design-Patterns-Architectural-Patterns
D-002. Idiom, Design Patterns, Architectural Patterns
패턴 소개 우리가 알고 알는 디자인 패턴의 개념이 건축학에서 온 것은 알려진 사실입니다. 패턴은 전파하기 알맞게 포장되어 있다는 점에서 경험을 축적하고 전달하기에 좋다고 봅니다. 긍정
guysheep.tistory.com
2) JAVA에서 Static을 이용한 싱글턴 기법 사용 : https://hsik0225.github.io/design%20pattern/2020/12/17/Singleton-Pattern/
[디자인패턴] 싱글턴패턴(Singleton Pattern)
불필요한 인스턴스 생성을 방지하는 패턴
hsik0225.github.io
- Gof 패턴(Gang of Fours)
객체지향 프로그래밍에서 해결책으로 사용되는 패턴들 중 23가지를 카탈로그화 한 것.
23가지 패턴을 문제별(목적별) 사용하는 3가지 패턴으로 나눌 수 있다.
node.js 디자인 패턴 바이블에 나오는 패턴들 위주로만 가볍게 훑어보자
(전반적인 디자인 패턴의 한줄설명은 https://coding-factory.tistory.com/708 를 참고하자)
1. Creational Pattern(생성 패턴) : 객체의 생성과 관련된 패턴.
생성 시 다른 객체를 통해 만들면서 캡슐화를 한다 (ex. Object A = new Object()같은 직관적 방법 외 다양한 기법으로 생성)
▶ Factory : 여러 타입의 객체가 있을 때, 중간 클래스(공장.Factory)에서 생성할 객체의 타입을 받아 생성하는 패턴. 자바 문법으로는 switch 같은 형식으로 객체를 생성하는 방식이다. 객체타입이 추가되는 경우 유지관리가 용이하다.

▶ Builder : 객체를 생성할때 변수나 파라미터를 필수/옵션을 구분지을 때 사용하는 패턴. 필수값은 생성자를 통해 만들고, 옵션값은 메소드를 통해 입력받아 build를 통해 하나로 합쳐 생성한다. 파라미터가 많을 때 파라미터 관리 에러(변수 타입,순서) 방지 및 가독성을 높여주는 역할을 한다.


▶Singleton : 오직 하나의 인스턴스만 존재하도록 보장하는 객체 생성 패턴. 동일 클래스로 새로운 객체를 생성하는 경우에도 같은 객체를 전달받는다. 동일 인스턴스가 생기지 않게 구성하는 경우 사용된다. 보통 getInstance()를 이용해서 구현한다
참고로 singleton 패턴의 경우 JS에서 모듈을 가져올때 사용하는 require 함수를 예로 들 수 있다.
모듈을 맨 처음 로드하는 경우 require.cache에서 저장되고, 다시 부르는 경우 캐시에서 값을 가져오기 때문에 singleton 패턴이 기본적으로 보장된다. 즉, 추가로 구현하는것이 오히려 코드의 복잡도를 높일 수 있다고 하니 사용 시 주의하자!

1) Builder 설명1 : https://yceffort.kr/2021/01/nodejs-4-design-pattern
Home
yceffort
yceffort.kr
2) Builder 설명2 : https://velog.io/@namezin/%EB%B9%8C%EB%8D%94Builder
빌더(Builder)
빌더(Builder)
velog.io
3) JS에서 require 함수 설명 : https://kyungyeon.dev/posts/77
Node.js에서 singleton을 구현하려하지 마세요
당신은 하지 않아도 될 코드를 생성하고 있을지도 모릅니다
kyungyeon.dev
4) required 공식문서 : https://nodejs.org/api/modules.html#requireid
Modules: CommonJS modules | Node.js v18.10.0 Documentation
Modules: CommonJS modules# CommonJS modules are the original way to package JavaScript code for Node.js. Node.js also supports the ECMAScript modules standard used by browsers and other JavaScript runtimes. In Node.js, each file is treated as a separate mo
nodejs.org
5) node.js 모듈 설명 공식문서 : https://nodejs.org/api/modules.html#modules_caching
Modules: CommonJS modules | Node.js v18.10.0 Documentation
Modules: CommonJS modules# CommonJS modules are the original way to package JavaScript code for Node.js. Node.js also supports the ECMAScript modules standard used by browsers and other JavaScript runtimes. In Node.js, each file is treated as a separate mo
nodejs.org
6) factory 설명1 : https://velog.io/@lsj8367/%EC%9E%90%EB%B0%94-%ED%8C%A9%ED%86%A0%EB%A6%AC%ED%8C%A8%ED%84%B4
[Java] 디자인 패턴 - 팩토리 패턴(Factory pattern)
팩토리 패턴
velog.io
2. Structural Pattern(구조 패턴) : 이미 있는 객체들을 이용해 더 큰/복잡한 객체를 만들거나 객체의 구조를 나눌 때 사용하는 패턴
▶Proxy : 다른 객체로 접근하는 것을 제어하기 위해 관리자하는 객체를 생성하는 방식.
▶Decorator : 객체에 동적으로 기능 및 역할을 추가해주는 방식. 기본 기능에서 여러 옵션 기능들이 유연하게 확장하는 경우에 사용된다. 데코레이터는 기본 객체(대상)과 기능을 추가하는 객체(decorator)로 구성된다. java에서는 상속과 override 기능을 이용한다고 보면 된다!
특정 기능 앞뒤로 여러 패턴을 추가한다고 생각하면 좋다.
사용 예시 : https://coding-factory.tistory.com/713
1) 구조 패턴 기본적인 설명 : https://velog.io/@tastestar/JS-%EC%84%A4%EA%B3%84%ED%8C%A8%ED%84%B4-%ED%94%84%EB%A1%9D%EC%8B%9C-%EB%8D%B0%EC%BD%94%EB%A0%88%EC%9D%B4%ED%84%B0-%EC%96%B4%EB%8C%91%ED%84%B0
[JS] 설계패턴 (프록시, 데코레이터, 어댑터)
다른 객체에 대한 액세스를 제어할 수 있는 패턴Subject라고 하는 다른 객체에 대한 액세스를 제어하는 객체=> 객체의 여러 기본동작을 다른동작을 할 수 있게 도와주는 걸 말합니다.데이터 검증:
velog.io
2) Decorator 설명 1: https://velog.io/@koo8624/Javascript-Decorator
[Javascript] Decorator
ES6부터 자바스크립트에 데코레이터 문법이 추가되었다. 데코레이터는 그 이름처럼, 다른 함수를 꾸며주는 역할을 하는 함수로, 메서드를 인자로 받아 이를 감싸고 있는(wrapping) 새로운 함수를
velog.io
3) Decorator 설명 2 : https://gmlwjd9405.github.io/2018/07/09/decorator-pattern.html
[Design Pattern] 데코레이터 패턴이란 - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
4) Decorator 설명3 : https://coding-factory.tistory.com/713
[Design Pattern] 데코레이터 패턴(Decorator pattern)에 대하여
데코레이터(Decorator pattern) 패턴이란? 데코레이터 패턴(Decorator Pattenr)은 주어진 상황 및 용도에 따라 어떤 객체에 책임(기능)을 동적으로 추가하는 패턴을 말합니다. 데코레이터라는 말 그대로 장
coding-factory.tistory.com
3. Behavioral Pattern(행위 패턴) : 객체에 어느정도의 책임(responsiblities)을 부여할지 결정하는데 사용하는 패턴
객체가 수행해야 하는 작업을 여러개의 객체로 어떻게 분배할지, 객체끼리 어떤 관계를 가질지에 대한 문제를 해결하는 방식이다.
▶strategy : 객체의 기능을 동적으로 바꿔야 하는 문제가 자주 발생하는 경우 사용하는 전략. 객체의 기능을 직접 수정하는게 아닌 여러 기능을 미리 구현해놓고 특정 상황에서 기능의 교체가 가능하게 한다.
사용 예시 : https://victorydntmd.tistory.com/292
▶Iterator : 자료구조와 기능을 분리시켜 여러번 반복하는 작업이 있을때 자료구조에 상관없이 객체 접근 방법을 통일시키는 패턴.
사용 예시 : https://zion830.tistory.com/33
1) strategy 패턴 설명 : https://victorydntmd.tistory.com/292
[디자인패턴] 전략 패턴 ( Strategy Pattern )
전략 패턴 ( Strategy Pattern ) 객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화 하는 인터페이스를 정의하여, 객체의 행위를 동적으로 바꾸고 싶은 경우
victorydntmd.tistory.com
2) Iterator 패턴 설명 : https://zion830.tistory.com/33
[디자인 패턴] Iterator 패턴 (반복자 패턴)
Iterator 패턴은 무언가 많이 모여있는 것을 하나씩 지정해서 순서대로 처리하는 패턴이다. iterator는 무언가를 반복한다 는 의미를 가지고 있다. 보통 프로그래밍을 하면서 반복이 필요할 때는 for
zion830.tistory.com
'도서 > Node.js' 카테고리의 다른 글
| [디자인 패턴 바이블] 4장. 콜백을 사용한 비동기 제어 흐름 패턴 (0) | 2024.03.24 |
|---|---|
| [디자인 패턴 바이블] 3장. 콜백과 이벤트 (2) (0) | 2024.03.24 |
| [디자인 패턴 바이블] 3장. 콜백과 이벤트 (1) (0) | 2023.06.04 |
| [디자인 패턴 바이블] 2장. 모듈 시스템 (0) | 2023.03.05 |
| [디자인 패턴 바이블] 1장. Node.js 플랫폼 (0) | 2023.03.05 |