study/Node.js & NestJS 7

NestJS의 Interceptor, Filter, Middleware, Pipe, Guard

Interceptor (인터셉터)요청 및 응답 정보 로깅, 응답 포맷 변경예외 처리// 전역 적용async function bootstrap() { const app = await NestFactory.create(AppModule); app.useGlobalInterceptors(new LoggingInterceptor()); await app.listen(3000);}bootstrap();// 특정 컨트롤러 적용@Controller('cats')@UseInterceptors(LoggingInterceptor)export class CatsController { @Get() findAll() { }}// 특정 라우트 적용@Controller('cats')export class CatsContr..

Joi 라이브러리의 실사용 장점

Joi란?JavaScript 객체의 유효성을 검사하는 라이브러리로, 주로 입력 데이터가 예상한 구조와 형식을 따르는지 확인할 때 사용실사용 장점환경변수 누락 방지 → ConfigModule과 함께 사용하여 빌드 시 환경변수가 제대로 선언되었는지를 확인하고, 제대로 선언되지 않았다면 애플리케이션이 시작되기 전에 에러를 발생시킬 수 있었음

CommonJs와 ES6 모듈 시스템

자바스크립트 환경에서 모듈을 정의하고 사용하는 방법을 제공하는 모듈 시스템 문법모듈 로드 방식사용 환경모듈 정의 범위CommonJSrequire, exports동기적주로 Node.js파일 범위ES6 (ESM)import, export비동기적브라우저와 Node.js 모두블록 범위CommonJS모듈이 동기적으로 로드되기 때문에 모듈 로드 순서가 예측 가능함문법이 비교적 간단하나 브라우저에서 지원되지 않으며 순환의존성을 다룰 수 없음ES6모듈을 비동기적으로 로드할 수 있어 성능이 향상됨순환의존성을 다룰 수 있으나 기능이 많아 문법이 복잡함

import vs require

💡 JavaScript에서 외부 모듈을 가져오는 데 사용하는 키워드 require / exportsNode.js에서 사용되고 있는 CommonJS 모듈 시스템에서 사용됨모듈을 동기적으로 가져옴CommonJS에서는 동적 모듈 로딩에 더 적합함CommonJS에서는 모듈을 파일 단위로 정의하고 각 파일은 독립적인 모듈로 간주됨CommonJS 모듈은 동기적으로 로드되므로 모듈을 처음 로드할 때 모듈의 코드를 실행하고 module.exports된 객체를 반환함(1)// 모듈 정의 (module.js)const name = '이름';module.exports = name;//모듈 로드const name = require('./module');(2)// 모듈 정의const add = (a, b) => a + b;c..