인프런 커뮤니티 질문&답변

윤정길님의 프로필 이미지
윤정길

작성한 질문수

탄탄한 백엔드 NestJS, 기초부터 심화까지

express 싱글톤 패턴, 서비스 패턴

node.js 에서 싱글톤이 필요한 이유가 무엇인가요?

작성

·

1K

3

https://stackoverflow.com/questions/13179109/singleton-pattern-in-nodejs-is-it-needed (9년 전 글입니다)
 
싱글톤 패턴이 무엇인지 찾아보다가 스택오버플로어에 관련 글을 찾았습니다. 글에서는 nodejs에서는 싱글톤패턴이 필요하지않다라고 쓰여있는 거 같습니다. 강의에서 말씀해주신 "최초의 한번에 뉴 연산자를 통해서 객체를 만들 수 있기 때문에 추후 객체에 접근할 때 메모리 낭비를 방지할 수 있습니다. 또한 다른 클래스간의 데이터 접근이 쉽다".
node.js express에도 해당되는 말인가요 ?
읽어주셔서 감사합니다.
 

답변 1

7

윤상석님의 프로필 이미지
윤상석
지식공유자

안녕하세요!

아래는 싱글톤 패턴의 큰 장점 두 가지입니다.

1. 메모리 효율

2. 도메인 또는 프로그램에서 인스턴스가 절대적으로 한 개만 존재한다는 것을 보증 받습니다.

강의에서 Server라는 클래스는 하나의 인스턴스를 만들었습니다. 그리고 이 인스턴스는 고유하는 것을 보증 받습니다. 이 인스턴스는 프로그램에서 한 번만 사용되어야 하기 때문입니다. 애초에 여러 서버를 여는 것이 아니라는 것이 확실하기에 서버 인스턴스는 하나만 필요합니다. 이 경우, 다수의 Server 인스턴스를 찍어서 사용 하는 것은 복잡함을 야기하고 불필요합니다.

하나의 인스턴스만을 찍어내고 사용하는 것, 이것이 싱글톤 패턴입니다.

Node.js에서 모듈 캐싱으로 싱글톤 패턴에 의미가 없다는 것은

예를들어 import * as express from "express"; 이 문장을 여러번 찍어도 캐싱이 되기 때문에 모듈을 import 하는 관점에서는 의미가 없다는 것입니다.

싱글톤 패턴은 소프트웨어 코드 작성에 있어 의미가 있습니다. 설령 메모리 효율에 있어서 장점이 없다 해도, 코드 디자인 측면에서 장점이 있다면 의미가 있습니다.

추가적으로 싱글톤 패턴이 항상 좋은 것은 아닙니다. 잘못 적용하면 SOLID 원칙에 위배 될 수 있습니다. 이로 인해 어떤 관점에서는 안티 패턴이 될 수 있습니다.

아주 분명한 경우에 적용하는 것이 맞습니다. 서버 실행과 같이 딱 한 번 사용됨을 보증 받아야 하는 경우가 바로 그것이죠. 그리고 대체적으로 프레임워크의 도움을 받는 것이 좋습니다. 뒤에 NestJS에서는 컨트롤러, 서비스 등 레이어가 딱 한 번 인스턴스를 만들어 사용되는 것을 보증받도록 만들어져 있습니다.

윤정길님의 프로필 이미지
윤정길

작성한 질문수

질문하기