분류 전체보기 182

[Nest.js] JWT 인증/인가

가드 인증은 미들웨어로 구현하는 것이 좋은 사례입니다. 애플리케이션은 사용자의 권한을 확인하기 위해 인증과 인가를 수행해야 합니다. 인증은 요청자가 자신이 누구인지 증명하는 과정입니다. 최근에는 매 요청마다 헤더에 JWT 토큰을 실어 보내고 이 토큰을 통해 요청자가 라우터에 접근 가능한지 확인하는 방식을 많이 사용합니다. 이해 비해 인가는 인증을 통과한 유저가 요청한 기능을 사용할 권한이 있는지를 판별하는 것을 말합니다. 퍼미션, 롤, 접근 제어 목록 같은 개념을 사용하여 유저가 가지고 있는 속성으로 리소스 사용을 허용할지 판별합니다. 인가는 가드를 이용하여 구현할 수 있는 좋은 사례입니다. 보통 인증과 인가에 실패할 경우 응답에 대한 HTTP 상태 코드는 각각 401 Unauthorized와 403 F..

BackEnd/Nest.js 2023.05.26

[Nest.js] 파이프와 유효성 검사

파이프 파이프는 요청이 라우터 핸들러로 전달되기 전에 요청 객체를 변환할 수 있는 기회를 제공합니다. 미들웨어의 역할과 비슷하지만 메들웨어는 애플리케이션의 모든 콘텍스트에서 사용하도록 할 수 없습니다. 미들웨어는 현재 요청이 어떤 핸들러에서 수행되는지, 어떤 매개변수를 가지고 있는지에 대한 실행 콘텍스트를 알지 못하기 때문입니다. 라우트 핸들러는 웹 프레임워크에서 사용자의 요청을 처리하는 엔드포인트마다 동작을 수행하는 컴포넌트를 말합니다. 라우트 핸들러가 요청 경로와 컨트롤러를 매핑해준다고 이해하면 됩니다. 파이프는 다음 두 가지 목적으로 사용됩니다. 변환: 입력 데이터를 원하는 형식으로 변환. 예를 들어 /users/user/1 내의 경로 매개변수 문자열 1을 정수로 변환 유효성 검사: 입력 데이터가 ..

BackEnd/Nest.js 2023.05.16

[Nest.js] Config 패키지

Nest는 dotenv를 내부적으로 활용하는 @nestjs/config 패키지를 제공합니다. 이를 이용해서 COnfigModule을 동적으로 생성할 수 있습니다. $ npm i --save @nestjs/config 이 패키지에는 ConfigModule 이름을 가진 모듈이 이미 존재합니다. 이 모듈을 동적 모듈로 가져옵니다. ... import { ConfigModule } from '@nestjs/config'; @Module({ imports: [ConfigModule.forRoot()], ... }) export class AppModule {} 정적 모듈을 가져올 때와는 달리 ConfigModule.forRoot() 메서드를 호출합니다. forRoot 메서드는 DynamicModule을 리턴하는 ..

BackEnd/Nest.js 2023.05.16

[Nest.js] 프로바이더

프로바이더 컨트롤러는 요청과 응답을 가공하고 처리하는 역할을 맡습니다. 하지만 서버가 전달하는 핵심 기능은 전달받은 데이터를 어떻게 비즈니스 로직으로 해결하는가입니다. 앱이 제공하고자 하는 핵심 기능, 즉 비즈니스 로직을 수행하는 역할을 하는 것이 프로바이더입니다. 컨트롤러가 이 역할을 수행할 수도 있겠지만 소프트웨어 구조상 분리해두는 것이 단일 책임 원칙에 부합합니다. 프로바이더는 서비스, 저장소, 팩터리, 헬퍼 등 여러 가지 형태로 구현이 가능합니다. Nest에서 제공하는 프로바이더의 핵심은 의존성을 주입할 수 있다는 점입니다. 의존성을 주입하기 위한 라이브러리가 많이 있지만 Nest가 이를 제공해주기 때문에 손쉽게 사용할 수 있습니다. 의존성 주입은 OOP에서 많이 사용하는 기법입니다. 의존성 주입..

BackEnd/Nest.js 2023.05.16

[PostgreSQL] PostgreSQL 기본

데이터베이스는 무엇인가 데이터베이스 데이터베이스의 정의 데이터는 현실에 존재하는 사실적인 자료들의 집합이라고 볼 수 있습니다. 예를 들어 온도, IQ, 가격 등과 같이 그 자체로는 단순한 사실만을 나타내는 것을 데이터라고 합니다. 이러한 데이터들이 가치를 가지려면, 이들 사이에 논리적인 연관성이 있어야 합니다. 논리적으로 연관된 데이터들을 체계화해서 여러 사람이 공유하여 사용할 목적으로 통합한 것을 데이터베이스라고 합니다. 통합 데이터: 데이터들이 모여있으면 중복되는 데이터들이 있을 수 밖에 없습니다. 그러한 데이터들을 통합하여 중복되는 데이터를 줄이하는 것 저장 데이터: 종이에 쓰인 문서나 책 등이 아니라 컴퓨터 내부에 저장되어 있는 데이터 운영 데이터: 조직을 운영하는 데 도움이 되는 데이터들이 저장..

DataScience 2023.05.08

[Nest.js] 인터페이스

컨트롤러 Nest의 컨트롤러는 MVC 패턴에서 말하는 그 컨트롤러를 말합니다. 컨트롤러는 들어오는 요청을 받고 처리된 결과를 응답으로 돌려주는 인터페이스 역할을 합니다. 컨트롤러는 엔드포인트 라우팅 메커니즘을 통해 각 컨트롤러가 받을 수 있는 요청을 분류합니다. 컨트롤러를 사용 목적에 따라 구분하면 구조적이고 모듈화된 소프트웨어를 작성할 수 있습니다. 다음과 같이 컨트롤러를 생성합니다. $ cd [project folder] $ nest g controller [controller name] AppModule에는 방금 생성한 UserController와 프로젝트를 생성할 때 만들어진 AppService를 임포트해서 사용하고 있습니다. 그 밖의 Nest 구성 요소에 대한 약어는 nest -h 명령어로 확인..

BackEnd/Nest.js 2023.05.08

[Nest.js] 백엔드 개발 기본 지식

Node.js Nest는 Node.js를 기반으로 동작합니다. 정확히는 Nest로 작성한 소스 코드를 Node.js 기반 프레임워크인 Express나 Fastify에서 실행 가능한 자바스크립트 소스 코드로 컴파일 하는 역할을 합니다. 따라서 Node.js의 동작 원리를 이해하면 개발할 때 도움이 됩니다. Node.js의 등장으로 자바스크립트를 이용하여 서버를 구동할 수 있게 되었습니다. 프론트엔드와 백엔드에서 같은 언어를 사용한다는 것은 큰 장점입니다. 구글은 크롬 브라우저를 출시하면서 자체 개발한 자바스크립트 엔진인 v8 엔진을 크롬에 내장했고 v8의 뛰어난 성능은 자바스크립트는 느리다는 인식을 바꾸어주었습니다. 단일 스레드에서 구동되는 논블로킹 I/O 이벤트 기반 비동기 방식 여러 작업 요청이 한꺼번..

BackEnd/Nest.js 2023.04.27

[Nest.js] Get Started

NestJS의 장점 NestJS는 Node.js에 기반을 둔 웹 API 프레임워크로서 Express 또는 fastify 프레임워크를 래핑하여 동작합니다. Express와 Fastify는 모두 Node.js를 쉽게 사용하기 위해 만들어진 프레임워크입니다. NestJS는 Express를 사용하는데, 이러한 이유는 Express가 가장 널리 사용되고 있고 수 많은 미들웨어가 호환되기 때문입니다. Node.js는 손쉽게 사용할 수 있고 뛰어난 확장성을 가지고 있지만, 과도한 유연함으로 인해 프로젝트의 품질이 일정하지 않고 알맞은 라이브러리를 찾기 위해 사용자가 많은 시간을 할애해야 합니다. 이에 반해 NestJs는 데이터베이스, 객체 관계매핑(ORM) 설정, 유효성 검사 등 수많은 기능을 기본 제공합니다. 그러..

BackEnd/Nest.js 2023.04.27

[Vue] requestAnimationFrame

requestAnimationFrame() 는 브라우저에서 작동하는 애니메이션을 알려주고 다음 리페인트 진행 전에 해당 애니메이션을 업데이트하는 함수를 호출하게 합니다. 이 메서드는 리페인트 이전에 실행할 콜백을 인자로 받습니다. 리페인트 ? 리페인트란 리플로우 과정이 끝나고 재생성된 레이아웃 트리(렌더 트리)를 다시 레이어에 그리는 작업을 말합니다. 여기서 리플로우는 DOM 노드의 레이아웃 변경 시 영향을 받는 모든 노드의 수치를 다시 계산하여 레이아웃 트리(렌더 트리)를 재생성하는 작업을 의미합니다. css에서 width, height 같은 레이아웃에 영향을 주는 속성을 말합니다. 리페인트를 발생하게 하는 속성은 css에서 시각적으로 보여지는 모든 속성이며 이 외에도 레이아웃에 영향을 주는 것은 아니..

FrontEnd/Vue 2023.04.25

[Node.js] cluster

cluster 모듈은 기본적으로 싱글 프로세스로 동작하는 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈입니다. 포트를 공유하는 노드 프로세스를 여러 개 둘 수도 있어, 요청이 많이 들어왔을 때 병렬로 실행된 서버의 개수만큼 요청이 분산되게 할 수 있습니다. 서버에 무리가 덜 가게 되는 셈입니다. 예를 들어 코어가 여덟 개인 서버가 있을 때 노드는 보통 코어를 하나만 활용합니다. 하지만 cluster 모듈을 설정해 코어 하나당 노드 프로세스 하나가 돌아가게 할 수 있습니다. 성능이 꼭 여덟 배가 되는 것은 아니지만, 코어를 하나만 사용할 때에 비해 성능이 개선됩니다. 하지만 장점만 있는 것은 아니며, 메모리를 공유하지 못하는 등의 단점도 있습니다. 따라서 세션을 메모리에 저장하는 경우 문제가 될 ..

BackEnd/Node.js 2023.04.25