서버 36

ExpressJS Google Spreadsheet API

ExpressJS Google Spreadsheet API API 사용 전 GCP에 프로젝트와 사용자(IAM)를 생성해야 한다. 생성 방법은 이미 여러 사이트에 나와있으므로 생략한다. 설치 npm i google-spreadsheeet Instance 생성 인수로 스프레드시트의 아이디를 넣어준다. (Sheet의 고유값을 의미) const doc = new GoogleSpreadsheet(process.env.GOOGLE_SPREADSHEET_ID); 사용자 Authentication useServiceAccountAuth 메서드는 객체를 인수로 받으며 사용자 정보가 들어간다. 여기서 사용자 정보는 프로젝트명-""-"".json 파일에 데이터를 의미한다. 사용자 인증과 사용자 로드 동작의 결과값이 unde..

서버/Express 2023.01.06

NodeJS xlsx Excel

NodeJS xlsx Excel 최근 회사에서 OTA(Over The Air) 차량 업데이트 관련 업무를 진행하였다. 업데이트는 Button 클릭 시 HTTP Request를 통해 이루어지는 방식이다. Button 클릭 시 총 5번의 Request가 일어나며 Polling이 포함되어 있고 소요 시간은 최대 1분이다. Button을 클릭하여 1분 동안 대기 후 업데이트 결과를 확인하여 Excel 파일에 기록해야 했다. 설치 npm i xlsx Parsing 할 xlsx 파일(예시)에 내용은 다음과 같다. xlsx.readFile(Path, ParsingOption)을 통해 Parsing 할 xlsx 파일 전체를 읽은 후 Sheet 메서드를 사용해 특정 시트만 읽는다. Parsing 된 시트는 Sheet_t..

서버/Node 2023.01.04

NestJS Module

NestJS Module 특정한 기준(도메인)으로 쪼개진 코드 집합이며 @Module 데코레이터가 달린 클래스를 의미한다. 기능별로 코드를 모듈화(쪼개는) 하는 이유는 책임을 나누고 응집도를 높여 코드의 이해도와 유지 보수가 용이한 이점을 가져가기 위해서다. 하나의 애플리케이션은 하나 이상의 Root 모듈이 존재하고 Root 모듈 아래 여러 개의 하위 모듈로 구성된다. 모듈은 기본적으로 프로바이더를 캡슐화하며 현재 모듈에 속해있지 않거나 가져온 모듈에서 export 하지 않는 프로바이더는 주입할 수 없다. Root Module 프로젝트 main.ts 진입 파일에서 NestFactory에 create 메서드 인수로 들어가는 모듈을 의미한다. @Module 데코레이터는 다음 코드와 같은 ModuleMetad..

서버/Nest 2022.12.12

NestJS Controller Versioning

NestJS Controller 애플리케이션의 관문이며 기본적으로 클래스와 데코레이터를 사용한다. 클라이언트로부터 특정 요청을 수신하고 그에 대한 응답을 반환하는 인터페이스 역할을 수행한다. 서버에서 정의한 리소스를 클라이언트와 어떤 식으로 주고받을지에 대한 정보와 데이터의 구조를 정의한다. 각각의 컨트롤러는 하나 이상의 경로(/user, /user/:userId)가 있고 각기 다른 로직을 실행할 수 있다. - 컨트롤러 클래스 작성 후 @Controller 데코레이터를 사용해 Prefix를 명시한다. - @Get, @Post 등 HTTP Method 데코레이터 인수로 경로(Path)를 명시한다. 다음 사용자 컨트롤러의 getUserList 메서드의 경로는 /user/user-list와 같다. import..

서버/Nest 2022.12.06

NestJS

NestJS NodeJS에 Decorator와 Reflection 기능을 기반으로 작동하는 서버 사이드 프레임워크다. IoC, DI를 채용한 객체 지향 프로그래밍으로 프로젝트 유지 보수성이 뛰어나며 모듈과 컴포넌트 기반의 코드 작성으로 재사용성과 복잡한 프로젝트 폴더 관리에 용이하다. 타입스크립트가 기본 언어지만 바벨을 사용해 자바스크립트로 작성 가능하다. 내부적으로 Express 또는 Fastify 프레임워크를 Rapping 한다. 기본적으로 Express를 사용하는데 이는 범용적 측면과 미들웨어 호환성을 고려한 이유다. Express와 Nest Express는 미니멀 리스트다. Nest와 다르게 웹 프레임워크가 기본적으로 제공해야 할 대부분의 기능을 사용자가 직접 구현해야 한다. 장점으로는 특정 아키..

서버/Nest 2022.11.19

ExpressJS typedi

ExpressJS typedi 의존성 주입(Dependency Injection)은 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉이며 코드를 구조화하는데 사용되는 패턴이다. 생성자를 통해 클래스와 함수의 의존성을 주입하는 방식으로 모듈 안에서 클래스를 불러오거나 새로 생성하는 걸 피할 수 있으며 객체 지향적 아키텍처 설계를 통해 유지 보수성을 높일 수 있다. 의존성: 함수, 클래스 등이 내부에 다른 함수, 클래스를 사용 주입: 함수, 클래스 등이 내부에 사용하는 다른 함수, 클래스를 내부에서 생성하는 게 아닌 외부에서 생성하여 넣어줌 의존성 다음은 User 클래스가 Attack이라는 클래스에 의존하고 있는 코드다. class Attack { public normalAttack() {} } class..

서버/Express 2022.11.01

ExpressJS sharp

ExpressJS sharp Nodejs 환경에서 사용 가능한 이미지 처리 라이브러리이다. 최근 진행했던 프로젝트에서 매우 유용하게 사용했다. 내부는 libvips라는 C언어 기반으로 구현되었으며 다양한 형식을 지원하고 퍼포먼스 또한 훌륭하여 노드 진영에서 이미지 관련 라이브러리 중 비교할 대상이 없다. 설치 sharp는 다양한 운영체제를 지원한다. 플랫폼을 별도로 명시하지 않으면 현재 자신이 사용하고 있는 운영체제를 기준으로 설치된다. 운영체제별로 기능의 차이는 없으며 윈도우 플랫폼이 설치된 node_modules 폴더를 리눅스에 옮겨 실행하면 문제가 되므로 반드시 개인에 맞는 실행 환경을 확인해야 한다. npm i sharp // 자신의 운영체제 npm i --platform=win32 // 윈도우 ..

서버/Express 2022.10.08

ExpressJS Jest ES6 import export

ExpressJS Jest ES6 import export 현재 토이 프로젝트는 ES6 모듈을 사용하여 진행 중인데 문제가 발생했다. 테스트 코드를 작성하려고 했는데 모듈과 바벨 관련 에러 메세지가 출력된다. 예전에 CommonJS 환경에서 테스트 코드를 작성한 적이 있어서 문제없을 줄 알았는데 찾아보니 ES6 모듈 환경에서 Jest를 사용하려면 별도의 추가 설정이 필요하다. mkdir jest-using-import && cd jest-using-import npm init -y npm install -D jest @types/jest @babel/core @babel/preset-env package.json 설정 { "name": "jest-using-import", "version": "1.0.0..

서버/Express 2022.08.10

NodeJS 작동 원리

Nodejs 작동 원리 V8 엔진은 자바스크립트 실행을 담당하는 호출 스택을 담당하며, libuv는 비동기 I/O와 이벤트 루프를 담당한다. 노드 실행은 하나의 스레드에 의해서만 수행되고 하나의 콜 스택을 가짐 콜 스택은 동기적 블로킹 작업이므로 이를 극복하기 위해 Event Loop를 추상화한 libuv를 사용 libuv 내부에 Event Loop는 메인 스레드에 상주하여 비동기 작업을 수행 요청의 특징(블로킹 또는 논 블로킹)에 따라 Thread Pool에 작업을 위임하고 콜백 함수를 실행하기 위해 Event Queue에 적재된 콜백 함수를 빈 상태의 콜 스택으로 이동시킴 Event Loop는 6개의 단계로 이루어져 있으며 각 단계별로 Event Queue를 소유 Event Loop는 각 단계를 순차..

서버/Node 2022.07.25

NodeJS

node 크롬 V8 엔진으로 빌드 된 자바스크립트 런타임 노드는 서버와 자바스크립트 엔진이 아니다. 런타임이다. 싱글 스레드 이벤트 기반 아키텍처 논 블로킹 I/O 모델 서버의 역할도 수행할 수 있는 자바스크립트 런타임 노드로 자바스크립트 언어로 작성된 서버를 실행 서버 실행을 위해 필요한 http/https/http2 모듈을 제공 내부는 내장 코어 라이브러리와 V8 그리고 libuv로 이루어져 있음 런타임이란 특정 언어로 작성된 프로그램을 실행할 수 있게 해주는 실행기(가상 머신) Node는 자바스크립트 실행기이다. 자바스크립트 언어 노드 런타임(실행기) 엔진 V8 노드 등장 전의 자바스크립트 브라우저가 HTML 파일을 읽으며 HTML 내부에 포함된 자바스크립트 코드를 읽어 실행했다. 이는 HTML 파..

서버/Node 2022.07.23