/ReactNative-practice

ReactNative practice

Primary LanguageJavaScript

ReactNative-practice

ReactNative practice

  • 리액트 네이티브 입문 & javascript 연습

- node.js란?

- node.js는 확장성 있는 네트워크 어플리케이션(특히 서버사이드) 개발에 사용되는 소프트웨어 플랫폼이다. 작성 언어로 자바스크립트를 활용하며 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다. 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 한다.
  • 관련 키워드 : 구글 V8 자바스크립트 엔진 / 고성능 네트워크 서버 / 단일 쓰레드(Single Thread) 이벤트 루프(Event Loop) 기반 비동기 I/O 처리(Non-Blocking I/O) / 자바스크립트 / 개발 생산성 향상 / 방대한 모듈 제공(NPM)

  • 중요한 특징 : 단일 쓰레드 기반 비동기 방식이다.

쓰레드 기반 동기방식(Blocking I/O)

  • 하나의 쓰레드가 request를 받으면 모든 처리가 완료될때까지 기다리다가 처리결과가 완료되면 다시 응답을 보냄
  • 기존 업무 처리가 완료되기 전에 또다른 request가 있으면 새로운 쓰레드가 업무를 처리함.
  • 동시 request가 많은 경우 많은 쓰레드가 필요하게 되어 서버 과부하를 불러 일으킬 수 있다.

단일쓰레드 이벤트 루프 기반 비동기방식( Non-Blocking I/O)

  • 하나의 쓰레드가 request를 받으면 바로 다음 처리에 요청을 보내놓고 다른 작업을 처리하다가 먼저 요청한 작업이 끝나면 이벤트를 받아서 응답을 보낸다.
  • 동시 request가 오더라도 처리가 완료될때까지 기다리지 않아도 되기 때문에 서버 부하가 적다.

장점

  • 자바스크립트를 동일하게 사용해서 서버단 로직을 처리할 수 있다는게 가장 큰 장점이다.
  • 새로운 언어를 습득하지 않고도 자바스크립트를 활용해 서버기술을 빨리 개발/응용할 수 있다.
  • 개발이 빠르고 쉽다. 서버 설치부터 화면 띄우는 것까지 금방 처리 된다.
  • Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능 (단일쓰레드 + 비동기)
  • 로컬에서 서버만 켜봐도 얼마나 가볍게 돌아가는지 알 수 있다. / 이벤트 기반 비동기방식이라 서버 무리가 적다.
  • java(jsp)는 쓰레드에 의한 동기방식이라 요청이 오면 반드시 결과를 받은 후에 다음 로직이 처리될 수 있다.
  • npm(node package manager)을 통한 다양한 모듈(패키지) 제공
  • npm을 이용해 자신이 필요한 라이브러리와 패키지를 검색해서 설치하고 사용할 수 있기 때문에 개발속도와 효율성이 크게 향상

단점

  • 이벤트 기반 비동기방식이라 서버단 로직이 복잡한 경우 콜백함수의 늪에 빠질 수 있다.
  • 예를 들어, 한번의 요청에 대해 DB에서 조회한 결과값에 따라 다른 로직을 처리해야 하며, 이런 로직이 여러개인 경우 콜백함수 늪 (Callback Hell) 에 빠진다.
  • 코드를 순차적으로 실행하는 것이 아니라 비동기 방식으로 이벤트를 보내고, 응답(이벤트)이 오면 처리하는 방식이기 때문에 java 개발을 했던 방식으로 설계하고 프로그래밍하면 큰 문제가 발생한다.
  • 단일 쓰레드(Single Thread)이기 때문에 하나의 작업 자체가 많이 걸리는 웹서비스에는 어울리지 않다.
  • 게시판형태와 같이 가벼운 I/O가 많은 웹서비스에 어울린다.
  • 코드가 수행되어야 코드에 에러가 있는지 알 수 있으며, 에러가 날 경우 프로세스가 내려가기 때문에 테스트가 엄청 중요하다. 반드시 모든 케이스에 대해 소스코드를 검증해야 한다.

node.js에 적합한 작업

  • 간단한 로직.
  • 대용량(동시에 여러 request를 처리)
  • 빠른 응답시간 요구
  • 비동기방식에 어울리는 서비스(네트워크 스트리밍 서비스, 채팅 서비스 등)

node.js가 어울리지 않는 서비스

  • 단일 처리가 오래 걸리는 경우 : 싱글 쓰레드이기 때문에
  • 서버 체크로직이 많은 경우 : 비동기 방식이기 때문에 CallBack에 빠지지 않기 위해
  • 업무 복잡도/난이도가 높은 경우 : 에러가 나면 서버가 죽어버리기 때문에

참고 사이트 : [https://junspapa-itdev.tistory.com/3]