2018년 9월 18일 화요일

Node Sep 19 공부중 노트

NodeJS를 사용한지 일년이 슬슬 되어가는 요즈음, 소켓 통신과, 두 서버와 클라이언트간의 데이터를 주고받는 부분에서 수많은 애로사항과 싸우고 있는 도중에, 다시금 기초를 볼 필요를 느끼고 있습니다..
급하게 프로젝트를 동작시키기 위해 필요한것만 읽고 넘어갔던 수많은 기초들을 다시 들여다 볼 시간 말이지요!
초반 한달간 시작점이 되었던 책을 다시금 집어들었고, 이번에는 리스너쪽을 읽어보았습니다.

이벤트 리스너는 모든 언어에서 모든 장비에서 쓰일 정도로 중요한 역할을 갖고 있지요, 하지만 운 좋게 지금까지는 이벤트 리스너의 필요성이 크지 않았습니다. 하지만 이제는 아닙니다.

Html단에서 이벤트 리스너는 보통 아래와 같은 객체에 선언합니다.
window.addEventListener(‘eventName’,()=>{})
window 객체에 이벤트를 연결 할 수 있었습니다.

Node에서는
process 객체에서 이벤트를 연결합니다.
process.on(‘exit’,()=>{});
//해당 노드가 종료될때 발생하는 이벤트입니다.

위 처럼 정의가 가능합니다. process 의 다큐먼트를 찾아보면 이미 정의되어잇는 몇가지 이벤트가 보입니다.
이떄 주의할 점은, Uncaught Exception을 사용하기 위해 try catch를 버리는 행위는 삼가하라고 합니다. why?

setMaxeventListener() 는 방금같이 선언하고 사용하는 리스너의 허용 갯수를 이야기 합니다.
노드는 이벤트가 발생될때 event Emitter 에 push되는것 같습니다.

진행했떤 프로젝트인 jellojay 에서 이러한 에러문을 자주 접하게 되었었고, 구글링을 하면서도 깔끔히 이해가 가지 않았었는데, 오늘 정리가 되네요.

이 eventEmitter가 허용하는 갯수 이상의 이벤트가 쌓이면 에러를 띄우는것 이었습니다.
이는 서버를 개발하다보면 어쩔수 없는 부분인거 같습니다.
특정 기능을 위해 이벤트가 발생될 수 밖에 없을것이며, 이를 근본적으로 해결하려 한다면, 하나의 이벤트에서 모든 일을 처리해야 할 터인데, 이렇게 되면 객체지향이 의미가 없어질태니 말이죠.

하지만 싱글 스레드로만 작동하는 Node에서는 이벤트의 갯수를 아주 카운트 할 필요가 없는것은 아닙니다. setMaxEventListener(0)를 이용해 이벤트 에미터의 제한을 풀 수 는 있겠지만, 결코 이것이 해결법이 아니란것은 설명이 없어도 가능하겠죠. 만일 본인이 짠 코드가 잘못작동하여 과도한 이벤트를 호출하는데, 이러한 문제를 인지하지 못한상태로 라이브 서버를 올렸고, 초반엔 문제가 없더라고 - 후반에 메모리 문제 등에 맡닿드릴 여지는 얼마든지 있기 때문입니다.

그러므로 저는 우선 이벤트 에미터의 제한을 조정하지 않는 상태로 두어, 개발을 완료하여 서비스 테스트를 거치며, 어느 기능에서 많은 이벤트 호출을 요하는지 판단하여, 문제의 여지를 확인 할 때까지 두는쪽으로 택했습니다. ( 마침내 에러 이슈 하나를 close!)

댓글 없음:

댓글 쓰기