프로젝트 관련 질문
**만약 해보지 않았던 거라도 지금 내가 알고있는 것으로 지금이라면 어떻게 하겠다고 이야기 하기.
왜 Node js를 사용하였나?? -> 과거에는 각 api를 하나의 jsp 파일로 만들어서 처리하였다. 이는 매우 불편하고 생산성이 떨어졌고 Node js를 사용하면서 생산성이 많이 향상되었다. 또 npm으로 모듈을 쉽게 관리할 수 있었고 single thread에서 비동기 이벤트 방식으로 동작하기 때문에 멀티 쓰레드에서의 복잡한 동기 문제에 대해 덜 신경쓸 수 있었다.
-> Node js는 Cpu Bound 작업에 약하다. single thread가 모두 처리하기 때문에 한 작업이 길어질 경우 다른 작업을 처리하지 못해 반환 시간이 길어지게 된다. -> 작업을 나누어 setTimeout을 통해 일정시간 뒤에 작업을 넣는 방식으로 처리하면 이런 문제를 극복할 수 있다.
비동기 처리를 하다보면 Callback hell 문제가 발생할 수 있는데 이를 어떻게 해결할 수 있나?? 프로젝트 당시 이 문제를 만났을 때는 waterfall이라는 라이브러리를 사용하였고 이는 내부적으로 promise로 구현된 것으로 알고 있다.
*서비스 규모가 커질 경우에 대해 생각해보았나 ->
서비스 규모가 커지면 요청이 많이 발생해서 Cpu 사용량도 증가하고 DB나 네트워크 I/O도 매우 커질 것이다. 서버가 많은 요구 사항을 처리하다 보면 에러가 일어날 수 있기 때문에 이 일련의 과정을 트랜잭션으로 처리하는 것은 필수 인 것 같다.
그리고
- 서버 작업을 하면서 Node js로 프로그래밍 하다보니 AWS 상에서 작업해야 할 경우가 많이 생겼다. 단순히 Putty에서 vi를 통해 코딩하는 것은 어려움이 있어서 WebStorm을 이용하여 sftp로 원격접속하여 편집하였다.
- 팀 프로젝트를 하면서 어려웠던 점이 없었나? -> 서버 개발, 클라이언트 개발을 나누어 하다보니 api의 요청 값과 응답 값들에 대해서 서로 맞추는게 어려웠다. 그래서 PostMan을 이용해서 작성한뒤 문서를 공유했다.
- TCP/UDP -> TCP는 신뢰성, UDP는 비신뢰성, TCP는 신뢰성 있는 통신을 하기 위해서 handshaking과 흐름제어 , 오류제어를 한다. 그리고 TCP는 네트워크의 과부하를 막기 위해서 혼잡제어도 사용한다.