분류 전체보기

자바스크립트는 웹 개발에서 광범위하게 사용되는 다재다능하고 강력한 프로그래밍 언어입니다. 자바스크립트의 고유한 기능 중 하나인 클로저는 매우 강력한 기능을 제공하지만 이를 처음 접했을 때는 다소 이해하기 어려울 수 있는 개념입니다. 이 글에서는 자바스크립트 클로저의 작동 방식과 사용하는 예제를 살펴보면서 자바스크립트 클로저의 세계에 대해 자세히 알아보는 시간을 가져볼 것입니다. 1. 함수 스코프(Function scope) 자바스크립트에서 변수와 함수에는 프로그램 내에서 액세스할 수 있는 위치를 결정하는 특정 '범위(scope)'가 있습니다. 이는 코드를 작성하고 구성하는 방법뿐만 아니라 문제를 디버깅하고 성능을 최적화하는 방법에도 영향을 줄 수 있습니다. 함수 스코프는 JavaScript의 가장 기본적..
1. Interceptors란?통상적으로 interceptor는 요청과 응답을 가로채서 중간에 로직에 변화를 줄 수 있도록 하는 컴포넌트를 말합니다. Nest에서는 이를 @Injectable() 데코레이터가 붙은 클래스를 통해 만들 수 있고, Nest에서 제공하는 NestInterceptor 인터페이스를 상속받아 구현할 수 있습니다. interceptor는 AOP 기법으로부터 영감을 받아 그와 관련된 몇 가지 유용한 기능들을 할 수 있습니다.부가적인 로직을 메서드 실행 전 후에 바인딩함수의 반환 결과를 변환함수의 에러를 변환함수의 기본 동작을 확장특정 조건에 의존하는 함수를 완전히 override(e.g., 캐싱 목적) interceptor는 그 개념만 보면 middleware..
1. Module 이란?소프트웨어 설계에서 module이란 '애플리케이션을 기능 단위로 분해하고 추상화하여 재사용 및 공유 가능한 수준으로 만들어진 단위'를 의미합니다. 이를 통해 나온 '모듈화'의 의미는 소프트웨어의 성능을 향상시키거나 시스템의 디버깅, 테스팅, 통합 및 수정을 용이하도록 하는 작업입니다. Nest에서의 module도 이러한 개념에서 크게 벗어나지 않습니다. Nest에서 module이란 @Module() 데코레이터가 붙은 클래스를 의미합니다. @Module() 데코레이터는 Nest가 애플리케이션 구조를 조직할 때 보다 더 용이하게 만들어주는 메타데이터를 제공하는 역할을 합니다. 각 애플리케이션은 적어도 하나의 module을 가지게 되는데, 그 module은 root m..
1. 데코레이터 1-1. Decorator Pattern (데코레이터 패턴) 데코레이터는 무엇일까요? 파이썬을 해 보신 분들은 아시겠지만 파이썬에서 데코레이터는 고차 함수를 호출하기 위한 매우 간단한 구문을 제공합니다. 파이썬 데코레이터는 다른 함수를 받아 명시적으로 수정하지 않고도 후자의 함수의 동작을 확장하는 함수입니다. 파이썬에서 가장 간단한 데코레이터는 다음과 같이 보일 수 있습니다: 저 맨 위에 붙어 있는 것(`@mydecorator`)이 데코레이터이며, ES2016(ES7)에서도 크게 달라지지 않습니다. '@'는 Parser(파서)에게 데코레이터를 사용 중임을 알리게 위해 표시하는 것이며, mydecorator는 해당 이름으로 함수를 참조합니다. 데코레이터는 인자(데코레이션되는 함수)를 받아 ..
1. Provider란?Providers는 Nest에서 기본을 구성하는 요소 중 하나입니다. Nest에서는 사용되는 대부분의 기본 클래스를 Provider로 취급합니다.Nest에서 클래스는 services, repositories, factories, helpers, 등의 요소로 활용됩니다. Provider의 핵심 아이디어는 그러한 클래스들이 의존성 주입이 가능하다는 점입니다. 이는 객체들이 서로서로 다양한 관계의 형성과 그러한 객체들 간의 연결을 맺어주는 기능을 Nest 런타임 시스템에게 온전히 맡겨지기 때문에 가능한 것입니다.  위 사진에서 component가 객체 하나라고 보면 되고, 그들이 서로 의존하는 관계가 화살표로 표시되어 있는데 이러한 component의 생성과 각 연결을..
1. ControllerController는 요청을 받아들이고 클라이언트에게 응답을 반환하는 역할을 합니다. controller의 목적은 애플리케이션의 구체적인 요청을 받는 것입니다. routing 이라는 메커니즘은 어느 controller가 어느 요청을 받을지 관리하는 역할을 수행합니다. 대부분의 경우, 각 controller는 하나 이상의 라우트를 갖고 각각의 라우트는 모두 다른 기능을 수행합니다. 기본 controller를 만들기 위해 Nest에서는 클래스와 데코레이터를 사용합니다. 데코레이터는 클래스를 필요한 메타데이터와 연결시켜주고 Nest가 라우팅 맵(routing map)을 생성할 수 있도록 합니다. 1-1. Routing다음 예시에 @Controller() 데코레이터가 사용..
이전 포스팅들을 통해 NestJS와 관련된 많은 용어와 개념들에 대해서 정리를 해보았습니다. 이번에는 그러한 개념들을 NestJS에서 실제 사용하는 방식에 대해서 알아보려고 합니다. 해당 포스팅을 잘 이해하기 위해서는 이 글을 먼저 읽고 보시는 것을 추천드립니다! 1. Controller NestJS로 프로그래밍을 시작하는 가장 간단한 방법은 모든 일을 다 처리하는 Controller를 하나 만드는 것 입니다. validation부터 데이터베이스와 연동하여 비지니스 로직을 다루는 요청 처리까지 말이죠. 코드는 다음과 같습니다: 수행하는 기능은 인자로 받은 숫자에 80을 곱한 값으로 변환하여 해당 값을 응답하는 것입니다. // simpel.controller.ts /* GET /simple/convert/..
이번 시간에는 서비스를 운영하면서 상당히 중요하게 작용하는 요소 중 하나인 로깅을 NestJS 어떻게 하면 잘 할 수 있는지에 대해 알아보는 시간을 갖도록 하겠습니다. 완벽한 로깅 시스템을 갖추면 버그가 발생하더라도 우리는 로그를 그저 읽고 해당 요청 동안 어떤 일이 발생했는지 완벽히 이해하고 로컬 서버 또는 DB 워크벤치에 무슨 일이 벌어지는지 정확히 시뮬레이션 할 수도 있습니다. Interceptor의 기본 개념을 이용하여 로깅을 하는 방법은 여기를 참고하세요. 1. 로깅 기초 1-1. Middleware + console.log로 로깅하기 요청 로깅 1. 미리 정의된 app.controller의 호출을 가로채는 logger.middleware를 다음과 같이 정의합니다. import { Injecta..
이번 포스팅에서는 NestJS에서 데이터베이스를 사용하는 경우 custom validation을 어떤 방식으로 할 수 있는지 단위 테스트(Unit testing)과 함께 알아보도록 하겠습니다. 추가적으로 Error Handling은 또 어떤 식으로 할 수 있는지 알아보도록 합시다. 1. Class Validation 여기서 사용된 기술 스택은 다음과 같습니다. 데이터베이스: MySQL ORM 라이브러리: TypeORM validation 라이브러리: class-validator 요청과 함께 날라온 데이터를 validate(검증)하는 방식은 여러 가지가 존재합니다. 우리는 더 가독성 있는 코드를 만들면서 컨트롤러와 데이터 검증을 분리할 수 있도록 하는 NestJS의 class-validator를 사용할 수..
· IT 소식
최근 Github Trending 탭을 구경하다가 신기한 프로젝트가 나와 소개해드리려 글을 쓰게 되었습니다. 바로 Spotube라는 오픈소스 프로젝트인데요. 무려 Spotify 프리미엄을 구독하지 않고도 Spotify 계정을 사용하여 크로스 플랫폼, 즉 여러 기기(데스크탑, 핸드폰)에서 "Spotube"라는 플레이어를 사용하여 무료로 음악을 들을 수 있는 프로그램인 것입니다. Star 히스토리를 보시면 아시겠지만 갑자기 폭등한 것을 볼 수 있습니다. 이 애플리케이션은 Spotify의 데이터를 사용하여 음악을 식별하지만 오디오 자체는 Youtube에서 스트리밍을 한다는 굉장히 신기한 구조를 가지고 있습니다. Spotify API를 사용하여 대량의 음악 목록을 관리하고 이를 Youtube API를 통해 오디..
cdragon
'분류 전체보기' 카테고리의 글 목록 (3 Page)