생산자-소비자 패턴
생산자(Producer) 소비자(Consumer) 패턴

- 생산자(Producer)-소비자(Consumer) 패턴은
작업 목록
을 가운데에 두고 작업을 생산해내는 주체
와 작업을 처리하는 주체
를 분리시키는 설계 방법입니다.
- 각 객체의 부하를 조절할 수 있다는 장점이 있습니다.
- 그림처럼 Producer는 작업을 큐에 쌓아두고, Consumer는 작업을 가져다 처리합니다.
비동기 처리
- Event Emitter나 Promise는 실행 방식은 다르지만, 결국 순차적으로 실행되지 않는다는 공통점이 있습니다.
- 이 공통점은 결국 코드
가독성
을 떨어뜨리고, 디버깅이 어렵다
는 결론으로 이어지게 됩니다.
Promise, async/await와 EventEmitter의 차이점
Node.js | EventEmitter란? (feat. Promise와의 차이점)
Promise
- Promise는 비동기 작업이 완료될 때 실행할 콜백 함수를 등록하는 기존의 방식보다 깔끔하게 비공기 작업을 처리할 수 있도록 하는 객체입니다.
- 비동기 작업을 수행하는 함수가 반환하는 객체로, 성공하면 결과 값을, 실패하면 에러를 반환합니다.
- 이를 통해 Promise는 비동기의 성공 또는 실패를 쉽고 간결하게 처리할 수 있습니다.
- 정확히는 3가지 상태가 존재합니다.
Pending
(대기)
Fulfilled
(이행)
Rejected
(실패)
async/await
Promise와 async/await 차이점
- async/await는 가장 최근에 나온 비동기 처리 문법으로, callback이나 Promise의 단점을 해소하고자 만들어졌습니다.
- 그 단점은 보통 콜백 지옥, then() 지옥이라고 불리는, 꼬리에 꼬리를 무는 가독성이 나쁜 chain 구조로, 이런 코딩을 방지하기 위함입니다.
- Promise와의 차이점
- Promise는 .catch()로 에러 핸들링이 가능하지만, async await은 그것이 불가능해 try-catch()를 사용해야 합니다.
- 대신 async/await가 가독성이 보통 더 좋다고 평가됩니다.
EventEmitter
- EventEmitter는 이벤트 기반 프로그래밍에서 사용됩니다. 이벤트 기반은 비동기랑 다릅니다!
- 이벤트를 발생시키고, 이벤트가 발생했을 때 처리할 콜백 함수를 등록합니다.
- 이벤트는 이름과 함께 발생하며, 발생한 이벤트를 처리할 수 있는 모든 리스너에게 알립니다.
- 이를 통해 여러개의 콜백 함수를 동시에 처리할 수 있습니다.
비동기 디버깅
- 비동기는 동작 방식이 복잡해 디버깅이 까다로우며 특히 쓰레드 처리의 경우 자원 공유(
동기화
)의 문제 등이 자주 발생합니다.
Debugging asynchronous JavaScript with Chrome DevTools - Chrome Developers
크롬 개발자 도구
등에서 비동기 디버깅을 위한 툴을 제공합니다!

퀴즈
- 객체지향 설계
- 생산자(Producer)-소비자(Consumer) 패턴은 작업 목록을 가운데에 두고 작업을 생산해내는 주체와 작업을 처리하는 주체를 분리시키는 설계 방법이다.
- 정답 : O
생산자(Producer) 소비자(Consumer) 패턴
- 비동기
- EventEmitter로 생성된 이벤트는 setTimeout(), setInterval()과 같이 Node.js의 libuv 라이브러리에서 시스템 이벤트로 처리된다.
- 정답 : X (EventEmitter는 libuv에서 처리되는 Event Loop와 관계없는 동기 방식의 api이다.
Nodejs에 대한 잘못된 상식 몇가지
참고 자료