Skip to content
v1.11.1 출시됨 · GitHub에서 보기

Nestelia

Elysia와 Bun을 위한 모듈형 프레임워크.
데코레이터 · DI · 모듈 · Elysia 속도.

데코레이터 기반 라우팅

@Controller, @Get, @Post, @Body 등 — Elysia 위에서 네이티브로 실행되는 깔끔한 선언적 데코레이터 API.

nestelia는 각 데코레이트된 라우트를 Elysia 핸들러에 직접 매핑하여 프레임워크 레이어에서 완전한 타입 추론과 스키마 검증을 제공합니다.

users.controller.ts
import { Controller, Get, Post, Body } from 'nestelia'
import { CreateUserDto } from './dto'

@Controller('/users')
export class UsersController {

  @Get()
  findAll() {
    return { users: [] }
  }

  @Post()
  create(@Body() dto: CreateUserDto) {
    return dto
  }
}

의존성 주입

reflect-metadata로 구동되는 싱글톤, 일시적, 요청 스코프를 지원하는 생성자 기반 DI.

@Injectable()로 클래스를 표시하고 프로바이더로 선언하면 — nestelia가 부트스트랩 시 전체 의존성 그래프를 자동으로 해결합니다.

users.service.ts
import { Injectable } from 'nestelia'

@Injectable()
export class UsersService {
  private users: User[] = []

  async findAll(): Promise<User[]> {
    return this.users
  }

  async create(dto: CreateUserDto): Promise<User> {
    this.users.push(dto)
    return dto
  }
}

모듈형 아키텍처

컨트롤러, 프로바이더, 임포트를 명확하고 명시적인 구조를 가진 응집력 있고 재사용 가능한 모듈로 캡슐화.

createElysiaApplication 한 번 호출로 전체 의존성 그래프를 연결하고 준비된 Elysia 인스턴스를 반환합니다.

main.ts
import 'reflect-metadata'
import { createElysiaApplication } from 'nestelia'
import { AppModule } from './app.module'

const app = await createElysiaApplication(AppModule)

app.listen(3000)
// Listening on http://localhost:3000

성능

NestJS 스타일의 DX를 Elysia 수준의 속도로 — 데코레이터와 DI의 오버헤드는 거의 제로.

1.7x faster than Fastify
1.9x faster than Express
2.3x faster than NestJS
ElysiaBun
74,395 reqs/s
NesteliaBun
71,703 reqs/s
FastifyNode
42,640 reqs/s
ExpressNode
37,825 reqs/s
NestJSNode
30,582 reqs/s
초당 요청 수로 측정. GET / → 일반 텍스트 'Hello World'. 500 연결, 10초.

MIT 라이선스로 배포됩니다.