Skip to Content

더 빠르게 시작하고,
더 안정적으로 완성하세요

효율적이고 안정적인 Node.js에서 동작하는 TypeScript 풀스택 백엔드 프레임워크.
데코레이터 하나로 DB 컬럼 · Swagger 문서 · 런타임 타입을 한 번에 정의하세요.

빠르게 시작하기

한 번 선언, 세 곳 적용

TypeIs 데코레이터 하나가 Sequelize 컬럼 정의, Swagger 스키마, 런타임 타입 강제 변환기를 동시에 생성합니다. 필드를 한 번만 선언하세요.

@TypeIs.STRING({ comment: '이메일' })
email: string;
DB ColumnDataTypes.STRING()
Swagger{ type: "string" }
TypeCoerceString(value)

플러그인
기반 아키텍처

6개의 독립 패키지를 필요한 만큼 조합하세요. 의존성은 최소, 유연성은 최대.

@asapjs/core
기반 모듈 · DI 컨테이너
@asapjs/router
데코레이터 라우팅 · Swagger
@asapjs/sequelize
ORM 통합 · 마이그레이션
@asapjs/socket
Socket.IO 실시간 통신
@asapjs/error
타입 안전 에러 핸들링
@asapjs/cli
스캐폴딩 · 개발 서버

@Get 하나로
라우트 완성

Swagger 문서, JWT 인증, 페이지네이션 파싱이 자동으로 처리됩니다.

@Get('/', {
  auth: true,
  query: UserQueryDto,
  response: UserDto,
})
getUserList = async ({ paging, user }) => ...

@Dto로
API ↔ DB 연결

하나의 DTO 클래스가 Swagger 스키마, Sequelize 쿼리 옵션, 런타임 타입 변환을 모두 처리합니다.

@Dto({ defineTable: UsersTable })
class UserDto extends ExtendableDto {
  @TypeIs.INT() id: number;
  @TypeIs.STRING() email: string;
}

JWT 인증,
auth: true 한 줄

auth: false공개 라우트
auth: trueJWT 필수 · 자동 검증
userJwtPayload 자동 주입
헤더.페이로드.서명

구조화된
에러 처리

error() 팩토리로 타입 안전한 에러 코드를 선언하고, 일관된 응답 형식을 보장합니다.

// 선언
NOT_FOUND: error('USER_001', '사용자 없음')

// 응답
// { status: 404,
//   errorCode: 'USER_001',
//   message: '사용자 없음' }

CLI로 즉시 시작

@asapjs/cli로 프로젝트 스캐폴딩부터 개발 서버 실행까지 모든 것을 처리합니다.

$ npx @asapjs/cli new my-app
✓ Creating project structure...
✓ Installing dependencies...
$ cd my-app && asapjs dev
◆ Server is listening at 3000

명확한 4계층 아키텍처

각 레이어는 단일 책임을 가집니다. 비즈니스 로직이 HTTP 계층에 오염되지 않습니다.

ControllerHTTP 경계 · 데코레이터 라우팅
Application비즈니스 로직 · 에러 처리
Repository데이터 접근 추상화 · 페이지네이션
EntityDB 테이블 · TypeIs 컬럼

Swagger 문서
자동 생성

별도의 Swagger 파일 없이, 라우트 데코레이터의 title, body, response, errors 옵션으로 OpenAPI 스펙이 자동 완성됩니다.

GET/users🔒 JWT
Parameterspagelimitsearch
Response 200UserDto[]
Errors401 · 404
POST/users
BodyCreateUserDto
Response 201UserDto
Errors400 · 409
DELETE/users/:id🔒 JWT
Parametersid
Response 204No Content
Errors401 · 404

페이지네이션
내장

모든 라우트에서 paging.page, paging.limit이 자동 파싱됩니다. pagingMap()으로 표준 응답을 반환하세요.

dataT[]
pagenumber
max_pagenumber
has_nextboolean
total_elementsnumber

그 외에도...

탐험할 기능이 무궁무진합니다.

Socket.IO
WebSocket 기반 실시간 통신
멀티 DB
MySQL · PostgreSQL · SQLite
TypeScript Strict
완전한 타입 안전성 보장
Mocha + Supertest
통합 테스트 내장 지원
Sentry 통합
에러 모니터링 자동화
경량 아키텍처
필요한 패키지만 선택 설치