일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
- 프로그래머스
- GraphQL
- winston
- 인접리스트
- Deep Dive
- 탐욕법
- 알고리즘
- REST API
- bean
- html
- dfs
- 변수
- LifeCycle
- 코딩테스트
- java
- TIL
- node.js
- javascript
- queue
- JWT
- 자료구조
- css
- MySQL
- 인접행렬
- logger
- Interceptor
- typescript
- OOP
- nestjs
- Spring
- Today
- Total
목록FrameWork (54)
처음부터 차근차근
GraphQL이란? GraphQL에 대한 상세한 설명이 적혀 있습니다. [GraphQL] GraphQL이란? GraphQL이란? GraphQL은 API를 위한 쿼리 언어이며 이미 존재하는 데이터로 쿼리를 수행하기 위한 런타임 입니다. GraphQL은 API에 있는 데이터에 대한 완벽하고 이해하기 쉬운 설명을 제공하고 클라이 hangju95.tistory.com GraphQL installation GraphQL을 사용하기 위해선 아래에 있는 패키지가 필요합니다. # For Express and Apollo (default) $ npm i @nestjs/graphql @nestjs/apollo @apollo/server graphql NestJS에서는 두 가지 방법으로 GraphQL을 build할 수 있도..
Spring, NestJS 등 객체 지향 프레임워크를 사용하면 항상 나오는 제어 역전과 의존성 주입은 어떻게 동작하는 것이고, 왜 중요한 것일까요? NestJS와 Spring의 IoC는 비슷한 것 같으니, NestJS를 통해 정리해보겠습니다. 1. Inverse of Control 제어 역전을 한 마디로 표현해보겠습니다. 나 대신 프레임워크가 코드를 동작시키고 제어한다. 입니다. 단순한 Javascript 예시를 통해 알아보겠습니다. // 객체를 생성하는 Class class IoCExample { print() { console.log("hello world"); } } // 객체 생성 (개발자가 직접 코드를 구현) const object = new IoCExample(); // 생성한 객체의 메소드를..
NestJS는 decorator라는 기능으로 구성되어 있습니다. Decorator는 여러 프로그래밍 언어에서는 많이 알려져있지만, Javascript에서는 생소합니다. 이 부분은 Typescript 에서 자세히 다룹니다. Param decorators Nest에서는 Http route handler와 같이 사용할 수 있는 param decorator를 제공합니다. 우리가 만약 Request 객체에서 User를 받아올려고 한다면, @Body() user:userEntity를 사용해야 합니다. @Request(), @Req() req @Response(), @Res() res @Next() next @Session() req.session @Param(param?: string) req.params / re..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Wj8KN/btsAUJC5ukd/74RxpEgBKMG9jFx5srUd1k/img.png)
Exception filter Nest는 예외 처리를 진행하기 위해 exception layer를 내장하고 있습니다. 이 레이어는 app code에서 처리되지 않은 예외를 catch해서 정제된 응답을 제공합니다. 이러한 기능을 통해 유저 친화적인 응답을 제공하고 Server가 동작하지 않는 문제를 해결합니다. 기본적으로 Nest에 내장된 global exception filter가 HttpException 타입과 그 하위 타입의 예외들을 처리하고, 알 수 없는 예외(ORM Query 혹은 연결 문제 등)는 500 Internal server error를 디폴트로 응답합니다. 기본 exception filter는 statusCode와 message가 존재하는 exception이면 정상적으로 catch하고 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/curSxa/btsATEaUFxq/gE0NIvqJWe7135iKcfaVKK/img.png)
Pipe Pipe는 두 가지 역할을 합니다. transformation: transform input data to the desired form (e.g., from string to integer) validation: evaluate input data and if valid, simply pass it through unchanged; otherwise, throw an exception 파이프는 Route handler가 동작되기 전에 실행되며, route handler의 인자들이 도착하기 전에 작업을 처리합니다. Nest의 Pipe를 통해 인자들의 유효성 검사를 진행하거나, 인수를 변환하는 작업을 진행합니다. 주의할 점은 파이프는 Exception 영역 내부에서 실행됩니다. 만약 유효성 검사를..
Interceptor란? 의미 : 가로채는 사람, 가로채는 것을 의미합니다. interceptor는 컨트롤러 전, 후에서 다양한 역할을 해줍니다. 공식문서에 나와있는 예시로는 메서드(컨트롤러) 실행 전, 후의 추가적인 로직 수행 함수에서 반환된 결과 및 예외에 대한 변환(ex. Logger) 기본 함수 동작의 확장 특정 조건 하에서 완전한 함수의 재정의(ex. 캐싱 목적) 이렇게 있습니다. Interceptor는 AOP(관점 지향 프로그래밍 기법) 기술에서 영감을 받아 만들어졌습니다. 모든 interceptor에는 intercept() 메서드가 들어가며 두가지 중요한 인자가 들어가있습니다. Interceptor의 인자 1. Execution Context Execution Context(실행컨텍스트)는 ..
Guard란? Guard는 특정 경로로의 요청을 승인하는지에 대한 판단을 내리는 역할을 맡습니다. 주로 인증과 인가에 사용됩니다. Guard는 ExecutionContext(실행 컨텍스트)를 알고 있으며, Express와는 다르게 ExecutionContext를 통하여 request와 response를 받기 때문에 Middleware보다 더 똑똑합니다. Guards have a single responsibility. They determine whether a given request will be handled by the route handler or not, depending on certain conditions (like permissions, roles, ACLs, etc.) - NestJS..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bwIY7W/btsAVpJtJ7v/H5ssFaEZ5pBNCWuWFRyLoK/img.png)
Middleware 미들웨어는 클라이언트로 들어온 요청을 각 컨트롤러의 요청 핸들러가 처리하기 이전에 코드를 실행할 수 있는 기능을 의미합니다. NestJS 요청 생명주기에서 클라이언트로부터 들어오는 request가 가장 먼저 처리되는 핸들러입니다. Express에서 많이 다루던 분이면 알겠지만, Request와 Response의 중간에 위치하여 Middleware라고 불리며, Middleware는 요청과 응답 객체를 수정할 수 있습니다. 그리고 next()라는 메서드를 호출하여 그 다음 미들웨어 혹은 라우터가 작업을 처리할 수 있도록 하거나, 혹은 Request를 보류할 수도 있습니다. Nest의 Middleware는 기본적으로 Express와 동일하며 다음과 같은 기능을 수행합니다. 어떠한 코드를 살..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/6cw65/btsAPIdnxmL/VLZ7ka6w7CfAMiyZ7BNLsk/img.png)
NestJS Request Lifecycle 이번 글에서는 NestJS Application에서 어떠한 Request가 오고 나서 Response의 생명주기를 다룹니다. NestJS는 Node.js의 Express가 해결해주지 못했던 아키텍쳐에 대한 고민을 해결하기 위해 VueJS, AngularJS 등을 참고하여 만든 백엔드 프레임워크입니다. 그렇기 때문에 NestJS에는 클라이언트의 요청을 처리하기 위해 프레임워크가 제공하는 일련의 생명주기가 존재합니다. 위 그림을 예시로 봤을때 큰 틀에서 보면 Middleware -> Guard -> Interceptor -> Pipe -> Controller -> Interceptor 이러한 순서대로 처리됩니다. 그리고 각 단계에서 global, controlle..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/di9OaZ/btsAULMpZu3/mHejV8gqjdedTlDhdc4v6K/img.png)
Module이란? Module은 Nest가 Application structure를 Organize하는데 사용되는 Metadata를 제공한다. Nest에는 기본적으로 Root Module이라는 것이 존재한다. 루트 모듈은 Nest가 애플리케이션 그래프(Nest가 module 과 Provider의 relationship & dependencies를 해결하는데 사용되는 내부 date 구조)를 구축하는데 사용하는 시작점이다. 또한 Nest에서는 모듈 간 연결이 효율적으로 가능하다. root module 외에도 추가로 밀접하게 연관된 기능들을 모아 여러개의 모듈을 구성하는 것을 권장하며, Nest에서는 이를 효율적으로 가능하도록 도와준다. @Module 데코레이터는 Nest가 App 구조를 만들 때 사용할 수 ..