티스토리 뷰
반응형
1) 핵심 요소
Nest.js는 Module, Controller, Service, Provider를 기본 요소 하며, 이들을 조합해 애플리케이션을 구성
(1) 모듈(Module)
- Nest.js 애플리케이션의 구성 요소를 그룹화하는 단위
- 모든 애플리케이션은 최소 하나의 루트 모듈(AppModule)이 잇어야 함
- 모듈은 서비스, 컨트롤러, 레포지토리, 쿼리팩토리, 다른 모듈을 포함
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [], // 다른 모듈을 가져올 수 있음
controllers: [AppController], // 컨트롤러 등록
providers: [AppService], // 프로바이더 등록
})
export class AppModule {}
(2) 컨트롤러(Controller)
- 클라이언트의 요청(HTTP 요청)을 처리하는 역할
- 비즈니스 로직을 수행하는 서비스를 호출하고, 응답을 반환
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller('app') // 라우트 경로 지정
export class AppController {
constructor(private readonly appService: AppService) {}
@Get() // GET 요청 핸들링
getHello(): string {
return this.appService.getHello();
}
}
(3) 서비스(Service)
- 애플리케이션의 비즈니스 로직을 처리하는 곳
- DB 엑세스, 외부 API호출, 기타 복잡한 로직을 구현
- 컨트롤러와 레포지토리 사이의 중간 역할
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello, World!';
}
}
(4) 프로바이더(Provider)
- Nest.js에서 의존성 주입을 통해 객체를 관리하는 단위
- 서비스뿐만 아니라, 레포지토리, 헬퍼, 공통 로직을 구현할 때도 프로바이더를 사용
import { Injectable } from '@nestjs/common';
@Injectable()
export class UtilityService {
formatDate(date: Date): string {
return date.toISOString();
}
}
2) 추가 요소
(1) 레포지토리(Repository)
- DB와 상호 작용을 위한 Repository 패턴을 지원
- TypeORM, Mongoose, Prisma 같은 ORM/ODM과 함께 사용
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
email: string;
}
(2) 미들웨어(Middleware)
- 요청이 컨트롤러에 도달하기 전에 실행되는 함수를 정의
- 인증, 로깅, 요청 데이터 변환 등을 처리
import { Injectable, NestMiddleware } from '@nestjs/common';
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
use(req: any, res: any, next: () => void) {
console.log('Request...');
next();
}
}
(3) 가드(Guard)
- 인증, 권한 부여와 같은 특정 조건을 기준으로 요청을 허용하거나 거부할 수 있음
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
@Injectable()
export class AuthGuard implements CanActivate {
canActivate(context: ExecutionContext): boolean {
const request = context.switchToHttp().getRequest();
return request.headers.authorization === 'valid_token';
}
}
(4) 인터셉터(Interceptor)
- 요청과 응답을 가로채서 추가 로직을 수행
- 로깅, 응답 데이터 가공, 캐싱 등을 처리
import {
Injectable,
NestInterceptor,
ExecutionContext,
CallHandler,
} from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
@Injectable()
export class TransformInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
return next.handle().pipe(map(data => ({ success: true, data })));
}
}
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 카운팅 정렬
- DFS
- 우선순위 큐
- 투 포인터
- 스프링 부트 crud 게시판 구현
- DP
- c++ string
- 유니온 파인드
- 반복문
- 자바스크립트
- HTML5
- 자료구조
- java
- 세그먼트 트리
- 스택
- 이분 매칭
- C++ Stack
- 에라토스테네스의 체
- C++
- 자바
- CSS
- js
- 알고리즘 공부
- 유클리드 호제법
- 백준 풀이
- BFS
- Do it!
- 알고리즘
- 백준
- html
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함