100%를 한번에 바꾸는건 어려워도 1%를 100번 바꾸는건 쉽다.

생각정리 자세히보기

개발/Node.js (NestJS) 14

[Node.js] Prisma VS MikroORM VS Drizzle

prisma에 대해서 어느정도 학습을 해보면서 약간 아쉬운 점들이 많았습니다. 그래서 Node.js 진영의 다른 ORM은 어떻게 하고있을까? 그 궁금함에 세 ORM을 비교하며 학습해보기로 하였습니다. 3가지 ORM의 특징특성PrismaMikroORMDrizzle ORM사용 편의성매우 직관적이고 설정이 간단하며, 빠르게 학습할 수 있음.관계 설정 및 모델링이 초기 구성이 Prisma에 비해 다소 복잡할 수 있음.API가 간단하고, 최소한의 설정으로 사용할 수 있도록 하여 사용자가 직접 필요한 부분을 확장마이그레이션 관리강력한 마이그레이션 관리 지원함. 마이그레이션 변경 사항 추적 및 자동화가 쉬움.Migration 기능이 내장되어 있으나, Prisma에 비해 설정과 관리가 복잡할 수 있음.마이그레이션 관리..

[Node.js] 413 Payload Too Large 오류 해결

안녕하세요. 이번 시간에는 413 Payload Too Large 오류를 해결해보는 시간을 가져보겠습니다. 413 Payload Too Large란?서버에서 처리할 수 있는 요청이 지정된 제한보다 큰 오류 RFC 9110부터는 Content Too Large로 오류 명이 수정됨. https://developer.mozilla.org/ko/docs/Web/HTTP/Status/413 413 Content Too Large - HTTP | MDNHTTP 413 Content Too Large 응답 상태 코드는 요청 엔터티가 서버에 의해 정의된 제한보다 크다는 것을 나타냅니다. 서버는 연결을 닫거나 Retry-After 헤더 필드를 반환할 수 있습니다.developer.mozilla.org 해결 방법우선 저는..

[Node.js] Prisma 한방 쿼리로 성능 개선

현재 NestJS와 MySQL 그리고 Prisma라는 ORM의 조합으로 백엔드 개발을 하고 있습니다. 개발을 진행하면서 늘 불편하다고 느껴왔던 부분에 대한 개선이 필요하다고 판단하여 진행하게 되었습니다. 불편했던 점을 어느정도 개선할 수 있는 가이드라인이 되었으면 하는 바램에서 이 글을 작성해봅니다. 내가 마주했던 문제점기능을 추가하게 되면서 table을 하나 더 Join하게 되었고 그 과정에서 기존에는 평균 100ms의 응답속도를 가지던 API가 최소 6배, 최대 10배 정도 느려지는 현상을 발견하였습니다. 다음 사진은 Thunder Client를 사용하여 테스트한 결과입니다. 보통 API의 응답 속도가 느려지는 원인은 여러가지가 있지만 이 경우는 한번에 가져올 수 있는 쿼리를 여러번에 걸쳐서 나눠서 ..

[Node.js] puppeteer libatk-bridge-2.0.so.0 이슈 해결

최근 회사에서 puppeteer를 사용하여 크롤링을 해야하는 일이 있었다. 그렇게 로컬에서 잘 테스트를 마치고 배포를 하였는데, 갑자기 서버가 죽어버렸다. 에러코드는 다음과 같았다. error while loading shared libraries: libatk-bridge-2.0.so.0: cannot open shared object file: No such file or directory 열심히 해당 내용을 구글링했고, 다음의 게시글을 발견하였다. https://github.com/puppeteer/puppeteer/issues/1598 Error while loading libatk-bridge-2.0.so.0 · Issue #1598 · puppeteer/puppeteer When running..

[Node.js] Express에 HTTPS 적용하기

최근, 프로젝트에 HTTPS를 써야하는일이 생겨서 적용을 시키게 되었습니다. 배움에는 끝이 없다... 정말... 적용법을 시작하기 앞서 각각의 개념에 대해서 정리해보았습니다. HTTPS란? HTTP에서 보안이 강화된 프로토콜로, SSL을 이용하여 암호화를 합니다. 기존의 HTTP의 경우 암호화되지 않은 방법으로 데이터를 전송하므로, 메시지를 주고 받는 과정에서 감청당할 수 있습니다. 만약 중요한 정보를 전송한다면, 메시지를 주고받는 과정이 암호화 되지않은 상태로 노출될 수 있습니다. SSL이란? SSL은 서버와 클라이언트간의 통신을 제 3자가 보증하는 전자문서로, 주로 하는 역할은 암호화입니다. SSL은 암호화된 데이터를 전송하기 위해서 공개키와 대칭키를 혼합해서 사용합니다 자세한 내용 https://o..

[Node.js] EC2에 Express APP 배포하기

안녕하세요! 최근에 사이드 프로젝트를 진행하면서, 배포를 진행했습니다! 배포과정이 참 쉽지않았지만, 처음부터 끝까지 그 과정을 다 끝내고 다니 뿌듯했습니다. 그 과정을 자세하게 서술해보겠습니다. EC2 인스턴스 생성 먼저, AWS 계정을 만들고 인스턴스를 생성해야합니다. 계정은 생성했다는 전제하로 설명드리겠습니다. 계정을 생성하고 들어가면 인스턴스 시작 버튼을 누릅니다. 인스턴스 시작을 누르고 넘어가면 많은 운영체제들을 설치 할 수 있습니다. 저는 ubuntu 20.04 LTS 버전으로 진행했습니다. 취향에 따라 다른 운영체제를 선택하셔도 좋습니다. 다음은 인스턴스의 스펙을 설정하는 부분입니다. 저는 프리티어로 설정했습니다. 그 다음으로 넘어가면, 키 페어를 생성하는 화면으로 넘어가게 됩니다. 이 키 페..

[Node.js] Passport (로컬 로그인 with session)

Passport란? Passport is authentication middleware for Node.js. Extremely flexible and modular, Passport can be unobtrusively dropped in to any Express-based web application. A comprehensive set of strategies support authentication using a username and password, Facebook, Twitter, and more. 즉, Passport는 Node.js에서 인증을 도와주는 미들웨어이며, 여러가지 전략 (인증 방법을 전략이라고 칭한다.)을 지원함. 필자는 API서버로서 session기반의 전통적인 ID, PW..

[Node.js] Cookie 공부

프로젝트를 하면서 인증에 관련된 부분을 진행하면서 지식의 부족함을 느꼈다. 그래서 생활코딩의 강의를 참고해서 공부를 진행하였다, 추후에 더 공부를 해야할 것 같다. 예제 코드 var http = require('http'); // 서버 모듈 var cookie = require('cookie'); // cookie를 파싱하는 모듈 http.createServer(function(req, res){ var cookies = {}; // 쿠키를 담을 객체 if (req.headers.cookie !== undefined) { // 쿠키 예외처리 cookies = cookie.parse(req.headers.cookie); // 객체에 헤더안의 쿠키를 파싱 } res.writeHead(200, { 'Set-c..

[Node.js] Node.js에 MVP 패턴을 적용하기

디자인 패턴이란? 프로그램이나 어떤 특정한 것을 개발하는 중에 발생했던 문제점들을 정리해서 상황에 따라 간편하게 적용해서 쓸 수 있는 것을 정리하여 특정한 "규약"을 통해 쉽게 쓸 수 있는 형태로 만든 것. 즉, 더 쉽고 편리하게 개발을 할 수 있는 특정한 방법들이다. MVP패턴이란? 어플리케이션을 3가지로 나눠서 구축하는 개발 방법론이다. MVC패턴에서 파생된 디자인 패턴중에 하나이다. Model : 데이터를 처리하고 가공하는 핵심 알고리즘 및 로직 View : 그래프, 그림 등 사용자에게 보여지는 UI Presenter : View에서 들어오는 요청을 받고 Model에 데이터를 요청후, 다시 View에 응답 Node.js에 MVP 패턴 적용. Node.js에서는 Router에서 요청을 받고 DB에 접..