본문 바로가기
Back-End Frameworks/Node.js

0)Node.js_ 시작! 핵심 개념 / 서버로의 노드 / 서버 외의 노드 / 개발환경 설정

by Downy_J 2023. 7. 2.
728x90
반응형
SMALL

아... 노드...

일반적으로는

처음 개발자의 길을 걷게될때

배우는 언어로 JAVA언어를 배운 다음 Spring 프레임워크로 백엔드를 배운다

 

학원에서 IoT반에 들어가 뒤져라 뭐..

Python과 센서 값 주고받고 IoT 쪽(?) 공부를 했는데

막상 21년 5월 입사 해서 딱히 렙업 한거 없이

23년 2월 퇴사를 하게 됬다. .

회사에서 뭐 원하지 않는 일도 할수도 있다 뭐 그러잖아?

근데. . .  난 개발자인데 왜 영상촬영과 편집을 주로 했나 몰라...... 그것만 시키드라고......

제품 시연영상과 편집, 발표 피피티제작,

 

그래서 첫 입사에 12명이던 인원들 중

난 최후의 1인으로 남아 그만 뒀다. .

 

다 나가고 이제 혼자 해야 되서 오다받아 한게.. 처음엔 C#언어로 만들어지는 .net을 공부해 그걸로 개발하래..

뒤져라 하고 있는데, 어서 뭘 들었는가 Python언로 된 Django로 개발 다시하래...

익숙한 언어라 뒤져라 공부해서 거의 완성일때쯤, 외주 맡길거래.. 걔들이 완성해서 보내주면 그걸 관리해줘야 하니

받어보고 뭘로 만들었다 분석해서 공부하래...

그게 JavaScript언어를 썻으며  Node.js 프레임워크를 사용했다는거지..

퇴사했지만 지금은. . ㅎㅎㅎ

시버럴거...... 23년도 와서 개발자 스텟 겁나 찍는중이네 ㄷㄷ


Node 핵심 개념

https://nodejs.org/ko

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

공식 사이트 들어가면 더 자세 할거지만

그래도 정리를 좀 해보자면

전반적으로 Node로 서버를 구축하고 실행하나

JS 프로그램을 실행하는 런타임으로써 사용하기도 함


Server

Server => 네트워크를 통해 Client에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램

Client => Request 하는 주체. 브라우저, 데스크톱 프로그램, 모바일 앱, 타 서버에 요청 보내는 서버 일수 있음

 

지금까지 공부한 HTML, CSS, JS로 웹 서비스 하나 기깔나게 만들었다 치자

그걸 도메인 받아 실 서비스를 한다면

이제 그 웹이 만들어져 서비스 되는 쪽이 웹 서버가 되는거지


JavaScript Runtime

Node => JS 런타임.

런타임 => 특정 언어로 만든 프로그램을 실행하는 환경

기존엔 웹 브라우저에서만 사용 가능 했으나

구글에서 이 v8을 만든 크롬을 출시했고

속도 면에서 너무 좋아젼 JS 엔진이라 오픈 소스를 공개해

이렇게. .오늘날 그냥 로컬에서도 JS언어를 런타임으로 쓸수있게 됬다


Event driven

이벤트 발생시 미리 정한 작업 수행하는것.

클릭 하거나 네트워크에 요청하는 등이 있음

시스템 =================2. 이벤트가 발생================> 이벤트 리스너

1. 이벤트 리스너에
콜백 함수 등록
 
<==============3. 등록된 콜백 함수 호출=============

이벤트 리스너에 콜백 함수를 등록 한다 라고함

https://whaledowny.tistory.com/26

비슷... 하지만

이때 메뉴 햄버거 버튼 만들때 사용했었음

이벤트 리스너

 

반응형 웹 메뉴바 만들기 - 드림코딩님 강의 들으며 정리 한것..

반응형 웹 사이트가 왜 나오게 됬거여? 요즘은 웹 사이트에 접속 할 수있는 단말기가 정말 다양해졌다 때문에 그에 맞게 웹 사이트 역시 변화가 필요 했고 단말기 사이즈에 맞게 반응형으로 만

whaledowny.tistory.com

루프 개념 등장.

동시 여러 이벤트 발생시 어떤 순으로

콜백 함수를 호출 할지 이벤트 루프가 판단함

 

Node는 JS 코드 상위줄 부터 한줄씩 실행함

이때 함수 호출부 발견하면 함수를 호출 스택에 넣는 식임

호출 스택

이런 식으로 호출 된다 치자

호출 순서는 first() 호출 후 그 안의 second() 호출 후 그 안의 third() 다

그리고 실행은 그 반대로 작동

anonymous 는 전역 함수 글로벌같은거

   
  • 이벤트 루프 : 이벤트 발생 시 호출 콜백 관리. 호출 콜백을 실행 순서 결정하고 노드 종료 때 까지 이벤트 처리를 위한 작업을 반복 하므로 루프라 부름
  • 백그라운드 : 타이머나 이벤트 리스너들 대기하는곳. 여러 작업 동시 실행 될 수 있음
  • 태스크 큐 : 콜백 큐 라고도 함. 정해진 순서대로 콜백들이 줄 서있음

먼저 호출 됬으니 START! 나왔고

다음은 이벤트 루프 2초 돌고있잖음?

다음으로  -END- 불러서 나오고

루프 끝났으니 runTime() 함수 실행 된거고


Non-blocking I/O

이벤트 루프 잘쓰면 정말 효율적으로 쓸수 있다

근데 이런 작업이란것도 동시 실행되는게 있고 아닌게 있다

 

JS 코드는 동시 실행이 될수 없다

그러나 I/O 작업 같은건 동시 처리가 된다

 

I는 Input O는 Output을 말하며

파일 읽고 쓰고, 네트워크 요청등이 이에 해당함

 

  • Non-blocking : 이전 작업 돌고있어도 따로 돌수있음
  • blocking : 이전 작업이 끝나야 다음 작업 돌는것

동시 처리 해도 되는건 최대한 묶어서 백그라운드로 넘겨버러야 시간 절약이 됨.


Single Thread

스레드가 하나뿐인걸 말함

JS 코드가 동시 실행 안되는 이유다

 

[ 프로세스와 스레드의 차이 ]

  • Process : OS에서 할당하는 작업 단위. Process간 메모리 등 자원 공유 안한다. 
  • Thread : Process 안에서 실행되는 흐름 단위. Thread들은 부모 Process의 자원을 공유함. 같은 주소 메모리갑에 접근이 가능해 데이터를 공유 할 수있다

 

멀티 쓰레딩 멀티 프로세싱
하나의 프로세스 안 여래개 스레드 사용 여러 개의 프로세스 사용
CPU 작업 많을때 씀 I/O 요청이 많을때 씀
프로그래밍이 어렵다 프로그래밍이 비교적 쉽다

근데 이거 개념 좀 중요한것 같음

Python으로 크롤링을 한다 했을때

하나 크롤링 다 도는데 걸리는 시간이 8시간이라면

이걸 멀티 스레딩을 하던 멀티 프로세싱을 하던 하면

시간이 정말 반토막 안에 끝나거덩


Node as Server

노드는 Single Thread, Non-Blocking 모델을 사용하므로, 노드 서버 역시 동일 모델이다

장단점 역시 같다

 

서버는 I/O 요청이 많기에 노드를 서버로 두기에 좋으나

CPU 부하가 큰 작업엔 적합하지 않음

 

작성한 코드는 모두 스레드 하나가 처리함

때문에 많은 CPU연산 요구는 스레드 혼자 감당하긴 어렵다

 

갯수는 많으나 크기가 작은 데이터를 주고받는 데 적합하다

실시간 챗팅 어플, 주식 차트, JSON 데이터 제공 API 서버 등이 노드를 많이 사용함

 

노드도 멀티 스레딩이 되긴하는데 프로그래밍 하는게 싱글 스레딩보다는 좀 어렵다 [ 나중에 멀티스레딩 공부하자 ]

때문에 이미지나 비디오 처리, 또는 대규모 데이터 처리 같은 CPU 많이 잡아먹는 프로그램 용도의 서버로는 권장하지않음

(지금 공부하는 이 노드 서버의 용도를 확실히 알고 개발을 들어가야함!!)

어라? 시벌럴거 왜 고생해서 만든 프로그램이 쓰레기지? 만든 내가 레기인가..?ㅜㅜ

 

싱글 스레드 방식이 멀티 스레드보다는 프로그래밍이 쉽지만

싱글로 서버를 운영하게 되면 서버 에러나 멈춰버릴수도 있음

에러처리에 있어 신중 해야 함

 

(공부하다 보니 Deno 라고 최근 새롭게 나온게 있던데...)

https://deno.land/

 

Deno — A modern runtime for JavaScript and TypeScript

Deno is a simple, modern runtime for JavaScript and TypeScript that uses V8 and is built in Rust.

deno.land

Node 장단점
장점 단점
멀티 스레딩에 비해 적은 컴퓨터 사용 싱글 스레드라 CPU 코어는 하나만 씀
I/O 작업이 많은 서버로 적합 CPU 작업이 많은 서버로는 부적합
멀티 스레딩 보다 쉽다 스레드가 하나뿐이라 멈추지않게 관리해야함
웹 서버가 내장되 있다 서버 규모가 커지면 서버관리 어렵다
JS를 사용 성능이 어중간하다
JSON 형식과 쉽게 호환  

 

노드를 사용하는 서비스

규모 큰곳으론 NASA, AirBnB, Uber, NetFlix, Linked In 등이 있고

결제 시스템들인 PayPal, Ebay, Walmart 도 있으며

국내에선 Naver, KAKAO, 위메프, 야놀자 등이 사용하고있다


Nodes other than servers

노드를 서버로만 쓰진 않는다

노드는 JS 런타임이라 그 용도가 꼭 서버에만 국한되진않음

 

웹, 모바일, 데스크톱 프로그램 등에도 개발되어 사용된다

 

그럼 이 노드기반 대표적 웹 프레임워크로는

 

등이 있으며

데스크톱 개발 도구로는 

등이 있다


Node.js 설치하기

https://nodejs.org/en

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org


LTS와 Current의 차이는

노드는 6개월 단위로 버전을 1씩 올리는데

왼쪽은 좀 안정적이되 최신 기술은 못쓰는것

오른쪽최신의 기술이 들어간것 이라보면된다

오른쪽 Current 눌러 설치파일 다운 받고

설치 마법사 실행해서 설치를 해보자
[ Next ]
라이센스 동의함?
[체크] [ Next ]
설치파일 경로 지정인데
기본 경로로 냅두고 [ Next ]
설치 프로그램 선택하라는거
- 노드 런타임
- 패키지 관리자의 여러 버전 설치 사용 여부 결정
- 노드 패키지 관리자
- 온라인 문서 바로가기
- cmd에 노드 명령서 쓸수있게 환경 변수 추가
[ Next ]
체크 후 [ Next ]
[ Install ]. . . 
저거 100% 되고나면
이 앱이 디바이스를 변경 할 수있도록 허용 할거냐
묻는데 [ 예 ] 하면
이 창이 뜰거고
[ Finsih ]
추가 도구 설치 화면 뜬다
아무키 누르라 했으니 눌러주고
도구 설치 진행 중 . . 
뭐가 자꾸 취소 됬다 뜨는데..
시간 지나니깐 저 창이 자연스래 꺼졌음. .

원래는  Type ENTER to exit: 표시 뜨면 [ enter ]
누르면 됨.
설치가 다 끝났다
이제 확인 할 차례다
CMD 창 열고
node -v 와 npm -v 를 눌러 버전확인인과 함께
잘 설치 된건지 확인 함 해보자

(npm은 노드 패키지 매니저다)
만약 설치 했음에도 에러뜨고 그런다면
echo %PATH% 를 입력해 환경변수 목록을 확인해 보자
node 머시기 없으면 등록이 안된건디. .

npm 버전 업데이트

이제 막 설치 했으니 최신 버전인건 맞는데

이 노드 패키지 매니져를 최신으로 업데이트 해주는 명령어가 있다

npm install -g npm

노드 역시 매번 새로운게 나오면 업데이트를 할수 있는데

매번 지우고 재설치가 꽤 번거롭다

[알게되면 정리. .]

 

자 이제. . Node의 세계로 가기 위한 빌드업은 끝났다. . .

728x90