
백엔드
NestJSNestJS
NestJS는 TypeScript 기반 구조화된 Node.js 백엔드 프레임워크다. Angular의 아키텍처 패턴(모듈, 컨트롤러, 서비스, 의존성 주입)을 서버 사이드에 적용해 대규모 엔터프라이즈 앱 개발에 적합하다.
핵심 구조
typescript
// 모듈
@Module({
imports: [TypeOrmModule.forFeature([User])],
controllers: [UserController],
providers: [UserService, UserRepository],
exports: [UserService],
})
export class UserModule {}
// 컨트롤러
@Controller('users')
@UseGuards(JwtAuthGuard)
export class UserController {
constructor(private readonly userService: UserService) {}
@Get(':id')
@UseInterceptors(CacheInterceptor)
async getUser(@Param('id', ParseIntPipe) id: number): Promise<UserDto> {
return this.userService.findById(id);
}
@Post()
@HttpCode(201)
async createUser(@Body() dto: CreateUserDto): Promise<UserDto> {
return this.userService.create(dto);
}
}
// 서비스
@Injectable()
export class UserService {
constructor(
@InjectRepository(User)
private readonly userRepo: Repository<User>,
) {}
async findById(id: number): Promise<UserDto> {
const user = await this.userRepo.findOneOrFail({ where: { id } });
return plainToClass(UserDto, user);
}
}파이프와 가드
typescript
// 커스텀 파이프 (데이터 변환/검증)
@Injectable()
class ParsePositiveIntPipe implements PipeTransform {
transform(value: string) {
const num = parseInt(value);
if (isNaN(num) || num <= 0) throw new BadRequestException();
return num;
}
}
// JWT 가드
@Injectable()
class JwtAuthGuard extends AuthGuard('jwt') {}