라벨이 Node.js인 게시물 표시

Ubuntu 18.04 nvm, Node.js, npm 설치하기

이미지
  # nvm 설치하기 $ sudo apt-get update $ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash 설치가 완료되면 잘 설치되었는지 확인 $ nvm -v 만약 "Command 'nvm' not found, ~~" 와 같은 내용이 보이거나 nvm 버전이 출력되지 않는다면 현재 terminal(터미널)을 닫았다가 다시 새로 열거나, shell 별로 아래 명령어를 통해 해당 문제를 해결할 수 있다. bash: source ~/.bashrc zsh: source ~/.zshrc ksh: . ~/.profile 참고 : nvm github https://github.com/nvm-sh/nvm https://github.com/nvm-sh/nvm#install--update-script # nvm으로 Node.js, npm 설치하기 $ nvm install node 잘 설치 되었는지 확인 $ node -v $ npm -v 설치된 Node.js 버전 확인 및 설치 가능한 버전들 확인 $ nvm ls 원하는 특정 버전 설치하기 $ nvm install --lts $ nvm install 12.17.0 현재 사용중인 버전을 다른 버전으로 변경하고 싶은 경우 $ nvm use 14.17.3

Node.js 에서 xml 데이터 파싱하여 json 형태로 변환하기

공공데이터 포털에서 OPEN API를 제공받아 사용해보려고 하면 일반적으로 JSON, XML 형식으로 데이터를 제공한다. 하지만 모든 OPEN API에 해당하는것은 아니며 XML 형식만 제공하는 OPEN API들이 있었다. 내가 사용하고자하는 OPEN API가 XML 형식으로만 지원했고 이러한 XML 형식의 데이터들을 JSON으로 바꾸어 사용하고 싶었다. 찾아보니 xml을 json으로 변경시켜주는 xml-js 라는 라이브러리가 있었다. https://www.npmjs.com/package/xml-js $ npm install xml-js request 예제 소스코드는 아래와 같다. const convert = require ( " xml-js " ) ; const request = require ( " request " ) ; const END_POINT = " http://apis.data.go.kr/B552584/EvCharger " ; const SERVICE_KEY = " 일반 인증키(Encoding) " ; const requestUrl = `${ END_POINT } /getChargerInfo?serviceKey= ${ SERVICE_KEY } &numOfRows=10&pageNo=1 ` ; request . get (requestUrl, ( err, res, body ) => { if (err) { console . log ( ` err => ${ err }` ) ; } else { if (res . statusCode === 200 ) { const result = body ; console . log ( ` body data => ${ result }` ) ; const xmlToJson = convert . xml2json (result, { com

[Node.js] __dirname, __filename

__dirname : 현재 실행중인 폴더 경로 __filename : 현재 실행중인 파일 경로 ex) 현재 실행중인 root 에 uploads 파일이 없으면 uploads 파일 생성 app . use ( ' / ' , express . static (path . join (__dirname , ' uploads ' ))) ;

[Node.js] Buffer 란?

Buffer 란? 바이너리 데이터들의 스트림을 읽거나, 조작하는 매커니즘. 간단히 말해 버퍼는 0, 1로 이루어진 컴퓨터 친화적인 데이터이다. Nodejs 공식문서에 아래와 같이 나와있다. The Buffer class was introduced as part of the Node.js API to enable interaction with octet streams in TCP streams, file system operations, and other contexts. 버퍼 클래스는 TCP 스트림, 파일 시스템 작업 및 기타 컨텍스트에서 옥텟 스트림과의 상호작용이 가능하도록 Node.js API의 일부로 도입되었다. Buffer란 Node.js 에서 제공하는 Binary 의 데이터를 담을 수 있는 객체이다. 바이너리 데이터라는 말그대로 1010011010 과 같은 데이터가 Buffer 객체에 담긴다. 여기서 바이너리 데이터(binary data)란  컴퓨터는 이진수로 데이터를 저장하고 표현한다. 이진수는 0과 1의 집합이다. 각 이진수에서 0 또는 1로 되어있는 자리를 비트(bit)라고 한다.  const buff = Buffer . from ( 'hello' , 'utf-8' ); // utf-8 인코딩 생략가능 console . log ( buff ); //<Buffer 68 65 6c 6c 6f> 여기서 이진법이라면 1001101010 이런식으로 되어있어야 하는거 아닌가라는 의문을 가질 수 있다. 하지만 실제로 버퍼가 메모리에 담고있는 값은 이진수 이지만 콘솔에는 16진수로 표시된다. utf-8은 생략가능하지만 작성하지 않을경우 글자가 깨질 수 있다. console . log ( buff . toString ()); //hello buffur를 사람이 읽기 쉬운 문자열로 변환하기 위해서는 toString()메서드를 사용한다. toString() 메서드의 경우 default로 utf-8이 설정되어있어서 깨지지않고

[Node.js] 주소 문자열과 요청 파라미터

이미지
주소 문자열과 요청 파라미터 위의 URL을 보면  https 는 프로토콜 www.youtube.com 은 도메인이라고도 하며 hostname ?뒤에 문장으로 오는 부분을 query string(요청 파라미터)이라고 한다. 이름과 값으로 이루어져있고 각각의 요청 파라미터 사이에는 &표시로 연결된다. const url = require ( 'url' ); const urlString = 'https://search.naver.com/search.naver?sm=top_hty&fbm=0&ie=utf8&query=tomato' ; let currentUrl = url . parse ( urlString ); //url을 받아와 객체를 반환한다. protocol, path, query 정보를 볼 수 있다. console . log ( currentUrl ); 결과👇🏼 추가적으로 내가 검색했던 tomato만 분리해내는것도 가능하다.  위에 코드에 이어서 아래 코드를 작성하면 const queryString = require ( 'querystring' ); const params = queryString . parse ( currentUrl . query ); console . log ( params . query ); 결과👇🏼 tomato 를 반환한다.

[Express.js] Route Parameter (동적 Routing ,동적 params)

이미지
Route Parameter 일단 아래 코드에서 라우팅 경로를 보자. app . get ( ' /category/html ' , ( req , res ) => { res . send ( ` hello html~~~~~ ` ) } ) app . get ( ' /category/css ' , ( req , res ) => { res . send ( ` hello css~~~~~ ` ) } ) app . get ( ' /category/javascript ' , ( req , res ) => { res . send ( ` hello javascript~~~~~ ` ) } ) app . get ( ' /category/nodejs ' , ( req , res ) => { res . send ( ` hello nodejs~~~~~ ` ) } ) .... '/category/html'  '/category/css'  '/category/javascript' '/category/nodejs' ... 공통적인 라우팅 경로로 /category 로 작성되어있고 뒤에 카테고리별 각각의 경로가 추가적으로 작성되어있다. 만약에 category 목록이 100개라면 100개에 대한 경로를 위에서 처럼 하드 코딩으로 100개나 적어줘야한다. 이러한 하드 코딩을 없애고 카테고리 목록에 따른 라우팅 주소를 동적으로 받을 수 있게 해주는 방법이 Route Parameter 이다. 위에서 하드코딩된 라우터를 Route Paramter를 통해 변경해 보자. Route Parameter는 아래 코드에서처럼 :categoryId 와 같이 작성해 주면 된다. 원하는 명칭을 : 기호와 함께 작성한다. app . get ( ' /category/:categoryId ' , async ( req , res )

[Node.js] Node.js 란 무엇인가?

Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임(실행기)이다. 그리고 비동기 방식으로 작성하고 콜백을 이용하는 방식으로 코드를 작성한다. 노드의 특징 이벤트 기반의 비동기 I/O 프레임워크 이다. 1. 이벤트 기반 2. 논블로킹 I/O 논블로킹이란 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고 나중에 오래걸리는 함수를 실행하는것이다. 그렇다고 백그라운드로 보낸 코드들이 랜덤적으로 실행되는것은 아니며 그 안에서 또다른 규칙에 의해 실행된다. 3. 싱글스레드 싱글스레드는 한명의 직원이 여러 고객을 응대하는 방식이다. 일반적으로 한명의 직원은 한명의 고객만 응대가능하므로 나머지 고객은 기다려야하는 일이 발생한다. 멀티스레드는 여러명의 직원이 여러 고객을 나눠서 응대하는 방식이다. 하지만 노드에서는 싱글스레드를 채택했다. 대신 논블로킹 모델을 채택 하여 한명의 직원이 모든 고객의 요청사항을 받아적고 완료가되면 고객을 불러서 처리된 요청사항의 결과물을 반환한다. 정확히 말하자면 client 측에서 어떠한 이벤트가 발생하면 Event Loop(single thread)를 돌게된다. 간단한 작업의경우 이벤트에 대한 결과를 바로 반환하겠지만 복잡한 작업 예를들어 특정이벤트가 발생하면 DB에 접근해서 데이터를 가져오는것과 같은 동작을 수행할 때 이러한 작업을 Non-blocking Worker로 전달하여 비동기로 처리한다.  그리고 해당 이벤트에대한 처리가 완료되면 다시 이벤트 루프로 해당결과를 던져준다. 그러면 그때 처리된 결과를 client에게 전달한다. 그리고 Node.js의 경우 비동기 작업을 기본적으로 4개의 단위로 실행되어 처리한다. 만약 10개의 비동기 작업을 동시에 요청하면 4개 / 4개 / 2개 단위로 비동기 작업을 처리한다. 한번에 10개를 처리하는것은 아니다. 하지만 이러한 작업 처리량을 설정해서 늘려줄 수 있다.  ex) UV_THREADPOOL_SIZE=8  이와 같이 작성하면 비동기작업을 8개씩 동시

GET vs POST 방식 (비교 및 용도)

GET vs POST 방식 (비교 및 용도) GET 방식 - URL에 데이터를 담아 전송하므로 보안에 취약하다. - query string에 따른 다른 정보를 보여줄 수 있다.(다른사람과의 정보 공유가 가능) - URL의 규격에 따라 길이의 제한이 있어 긴 내용의 컨텐츠를 전송하기에 부적합하다. POST 방식 - URL에 데이터를 담아 전송하지 않기때문에 보안에 좋다.(완벽x) - 서버에 데이터를 같이 보낼 수 있다. ex) 로그인 인증 - 불필요한 정보가 노출되지않는다.  - GET 방식과 달리 용량이 큰 데이터를 전송하는데도 문제가 없다. - 사용자의 개인정보(노출되면 안되는 정보)와 큰 컨텐츠(줄거리 등등)을 전송하는데 적합하다. 주소에 한글이 들어갈 경우 encodeURIComponent 를 사용하고 그 내용을 서버에서 받아서 decodeURICompoent로 디코드 해서 사용한다. expressjs의 경우 기본적으로 GET방식을 지원하며 POST방식을 사용하고자 할 때는 미들웨어인 body-parser를 설치하여 사용해야 한다.

[Node.js] NPM 명령어

NPM 명령어 npm 이란 노드 패키지 매니저 (Node Package Manager)를 의미한다. npm은 자바스크립트 런타임 환경인 Node.js 의 기본 패키지 관리자 역할을 한다.  그래서 npm을 통해 패키지 (package) 또는 모듈 (module) 이라고 불리는 자바스크립트 라이브러리를 자신의 프로젝트에 설치할 수 있다. 또한 npm을 통해 자신의 프로젝트에서 사용 중인 패키지들의 버전 업데이트도 관리할 수 있다. #설치 npm init : 패지키(외부모듈) 설치 환경과 package.json을 만드는 초기화 명령어이다. 새로운 프로젝트나 패키지를 만들 때 사용한다. npm init 명령어 실행 후 npm install 패키지명 으로 설치되는 패키지(모듈)들은 package.json 파일의 dependencies부분에 명시된다.  다른 환경에서 동일한 라이브러리를 설치하고자 할때 해당 프로젝트로 다운받고 npm install 명령어를 작성하여 실행하면 package.json 파일의 dependencies 부분에 명시되어있던 패키지들이 모두 다운되어 동일한 개발환경을 구성할 수 있다. 설치된 라이브러리들은 node_module 폴더내에서 관리된다. npm install 패키지명 :   해당 프로젝트에서 사용할 자바스크립트 라이브러리를 해당 프로젝트에 설치한다. npm install 패키지명 -g : 시스템 레벨에서 사용할 라이브러리를 설치할 때 사용한다. -g 로 설치된 패키지는 다른 모든 프로젝트에서 해당 패키지를 사용할 수 있도록 설치된다. npm install 패키지@버전 : 특정한 버전의 패키지를 설치할 수 있다. 패키지 설치시에 옵션을 줄 수 있는데 뒤에 --save 또는 -S를 하면 npm init 명령어로 생성되었던 package.json 파일의 dependencies에 추가된다. (npm5부터는 --save옵션이 기본적으로 설정되어 있기 때문에 안 붙여도 된다) dependencies에 추가되면 추후 다른 개