서버/Express 17

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

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

ExpressJS express-validator 유효성 검사

ExpressJS Express express-validator 유효성 검사 각 서비스는 클라이언트가 존재하므로 폼이 존재한다. 서비스의 규모가 커질수록 더 많은 사용자의 데이터가 필요하게 되고 서버와 클라이언트가 데이터를 주고받기 위한 폼이 더 많아지게 된다. 사용자의 데이터는 대부분 데이터베이스에 저장되는데 저장되는 시점에 유효하지 않은 데이터가 저장되면 안 되므로 저장 전 클라이언트가 보낸 데이터의 유효성을 반드시 검사해야 한다. 1차적으로 클라이언트에서 사용자의 입력값을 필터링할 수 있지만 사용자는 자바스크립트 코드를 볼 수 있고 해제할 수 있어 완벽하지 않다. 사용자의 경험을 좋게 만들 순 있어도 전체적인 서비스 관점에서보면 결코 안전하지않다. 그럼 결국 서버에서 유효성 검사를 해야하는데 대부분..

서버/Express 2022.06.23

ExpressJS nodemailer 비밀번호 초기화

ExpressJS nodemailer 비밀번호 초기화 사용자 비밀번호 초기화는 요즘 웹 서비스에 없어서는 안 될 기능 중 하나다. 예전에는 휴대폰 인증 방식을 사용했지만 요즘은 비밀번호 초기화 링크를 사용자가 입력 한 메일로 보내주는 방식을 사용한다. 노드로 수천 또는 수만 건을 동시에 처리하는 메일 서버를 만드는 건 단순 요청과 응답을 처리하는 작업이랑 차원이 다르다. 다행히도 사용자에게 메일을 쉽게 보낼 수 있도록 도와주는 nodemailer 라이브러리가 존재한다. 실제 대부분의 웹 서비스들이 자사 메일 서버를 직접 구축해 사용하기보다 AWS 등 제3자 라이브러리를 이용한다. Use - npm i nodemailer - nodemailer 임포트 후 발신(서버) 설정과 수신(클라이언트)에 대한 설정을..

서버/Express 2022.06.21

ExpressJS moment

ExpressJS moment 토큰 만료 기간 설정도 중 알아두면 유용한 라이브러리를 찾았다. moment는 날짜 관련 라이브러리이다. 현재는 업데이트가 중단되었지만 여전히 많이 사용한다고 한다. 자바스크립트는 Date라는 날짜 관련 객체를 제공하지만 가독성이 떨어지는 경우가 있어 moment를 사용한다고 한다. 성능 영향이 있을 수 있으니 상황에 따라 사용하면 된다. Use - npm i moment - 단순 날짜 출력외에도 계산과 비교 등 생각보다 다양한 기능이 많으니 원할 경우 공식 문서를 참고하자.

서버/Express 2022.06.20

ExpressJS CSRF

ExpressJS CSRF 사용자의 의자와 무관하게 해커가 의도한 행위(결제/수정/삭제 등)을 특정 웹사이트에 요청하게 하는 사이트간 요청 위조 공격 방법 사이트 간 요청 위조는 특정 웹사이트가 사용자의 브라우저를 신용하는 상태를 노리는 의미이다. 쇼핑몰 사이트에 로그인된 사용자가 있다고 가정해 보자. 해커는 쇼핑몰 관리자인 거처럼 속여 사용자에게 개인 정보 보안 강화를 위한 내용으로 이메일을 보낸다. 사용자가 이메일 속 링크를 클릭하는 순간 로그인돼있는 사용자의 패스워드를 해커가 요청한 패스워드로 변경한다. 해커는 변경된 패스워드로 쇼핑몰을 이용할 수 있다. 우리가 알고 있는 2008년 옥션 1000만 회원 정보 유출 사건도 CSRF(Cross-Site-Request-Forgery) 공격 방법이 사용되..

서버/Express 2022.06.19

ExpressJS Sequelize transaction

ExpressJS Sequelize transaction 데이터베이스 상태를 변화시키기 위해 수행하는 작업 또는 한 번에 실행되어야 할 연산 이미 MySQL 사용법을 포스팅했었지만 ORM에서의 사용법을 기록하지 않아 작성한다. 트랜잭션을 설명할 경우 단골 예로 등장하는 예시가 있다. A와 B가 있다. A의 통장에서 B의 통장으로 돈을 송금한다. 송금 과정에서 A의 통장에서 출금은 되었지만 알 수 없는 오류로 B의 통장에 입금 처리가 되지 않았다. 이 예시로 쉽게 이해했었다. 데이터베이스의 상태를 변환시키는 쿼리이므로 즉 여러 개의 쿼리를 한 단위로 묶는다. MySQL은 방법이 하나지만 Sequelize transaction은 2가지 방법을 지원한다. User와 유저의 세부 정보를 담고 있는 Info 모델..

서버/Express 2022.06.17