📍 Node의 특징, 강점, 약점
- io는 지금까지와는 다르게 되어야한다 라고 node를 개발한 사람은 말했다
- 이는 노드가 무엇을 위해서 만들어졌는지 알려주는 핵심적인 말이다
- 비동기 성질을 이용해 I/O bound 프로그램에 가장 큰 문제인 요청하고 기다리기를 해결하는 열쇠로 보았다
- JavaScript식 비동기 처리 방식은 cllback을 사용하도록 되어있는데, 이것은 기존 io 방식에서 한 줄씩 실행되야 다음줄로 넘어가던 걸 응답이 오기 전에도 다음줄을 실행할 수 있다 - 일단 다 요청을 보내버리고 돌아오면 하나씩 대응하도록 ) - 기존 JavaScript의 특성
- Offloading 방식
- 저수준의 오래걸리는 일은 Node에게,
고수준의 로직은 메인 스레드에서
- Node가 빠른 속도와 매우 높은 확장성을 가지는 근본적인 이유이다
- Node의 대표적인 약점은 저수준( 컴퓨터 친화적인 ) 처리는 Node가 빠르게 처리하기에 매우 어렵다
❗ 그래서 Node는 C와 WebAssembly모듈을 바인딩해 사용하는 방법을 제공한다
- 방대한 오픈 소스 생태계로부터 많은 정보를 얻을 수 있다는게 장점인데 npm에 전부 오픈소스로 등록되어있다
npm = Node를 위한 패키지 매니저
📍 npm , 포맷터, 린터
- Node 패키지 매니저로 대표적인 건 npm인데, 노드를 설치할 때 자동으로 함께 설치가 된다
- npm외에도 여러가지 패키지 매니저가 있는데(yarn, pnpm) 사용하려면 따로 설치해주어야한다
- npm init -y
- package.json을 생성
- 아무것도 없는 빈 폴더에 package.json을 생성하게 되면 name, main 등.. 필드들이 있는데, node 패키지로 보고 생성을 하는 요소들이라서 패키지를 만들기 전에는 큰 의미가 없다
- 만약 다 지운다면 scripts 하나가 남는데, npm을 사용하면서 자주 사용하게 되는 script들을 간단하게 호출할 수 있도록 만들어 준 필드이다
- npm run [scripts안에 들어있는 명령어]
- Node 프로젝트를 진행하다보면 여러가지 문제가 생길 수 있다( 포매팅이 계속 잘못될 수도 있고, 여러사람이 작업을 하면 엉망인 코드가 계속 들어올 수도 있고, 혹은 테스트가 되지 않은 코드들이 들어올수도 있고 등... )
- 이런 여러가지 문제들을 IDE에서 제공하는 린터 , 포맷터 기능들을 사용해서 어느정도 해소할 수 있다
- 우리가 완전히 문제에 맞닥뜨리기 전에, run 타임에 코드가 넘어가기 전에, 사용자들이 우리 서비스를 사용하기 전에 최대한 문제들을 잡아줄 수 있도록 환경을 만들어준다
- Formatting : prettier
- npm install --save-dev prettier
- vscode 확장프로그램중에 prettier install 하기
- 설정파일 작성해주기
- Linting : ESLint
- npm install --save-dev eslint
- 설정파일 작성해주기
- npm install --save-dev eslint-config-airbnb-base eslint-plugin-import
(에어비앤비에서 내놓은 ESLint 플러그인이 있다)
npm install --save-dev eslint-config-prettier
(prettier로 클론을 지워주라는걸 같이 사용하고 있으면 에러나서 충돌이 생기면 설치)module.exports ={
extends: ['airbnb-base','prettier']
}
console.log('Hello, world!')
- npm install --save-dev eslint-plugin-node
module.exports ={
extends: ['airbnb-base','plugin:node/recommended','prettier']
}
exports = 3
이렇게 Formatting, Linting를 사용한다면, 여러사람이 같이 코드를 작성하게 되면 이렇게 룰을 정하고 하는게 어느정도 버그를 잡아주기 때문에 도움이 될 것이다