종단 간 타입 안전성
장난감 기차 세트가 있다고 상상해 보세요.
기차 선로의 각 조각은 퍼즐 조각처럼 다음 조각과 완벽하게 맞아야 합니다.
종단 간 타입 안전성은 기차가 떨어지거나 막히지 않도록 모든 선로 조각이 올바르게 맞는지 확인하는 것과 같습니다.
프레임워크가 종단 간 타입 안전성을 가진다는 것은 타입 안전한 방식으로 클라이언트와 서버를 연결할 수 있다는 것을 의미합니다.
Elysia는 RPC 스타일의 커넥터인 Eden을 통해 코드 생성 없이 기본적으로 종단 간 타입 안전성을 제공합니다
종단 간 타입 안전성을 지원하는 다른 프레임워크:
- tRPC
- Remix
- SvelteKit
- Nuxt
- TS-Rest
Elysia를 사용하면 서버에서 타입을 변경할 수 있고 클라이언트에 즉시 반영되어 자동 완성과 타입 강제를 지원합니다.
Eden
Eden은 코드 생성 대신 TypeScript의 타입 추론만을 사용하여 종단 간 타입 안전성으로 Elysia를 연결하는 RPC 스타일의 클라이언트입니다.
클라이언트와 서버 타입을 손쉽게 동기화할 수 있으며, 2KB 미만의 가벼운 크기를 자랑합니다.
Eden은 2개의 모듈로 구성됩니다:
- Eden Treaty (권장): Eden Treaty의 개선된 RPC 버전
- Eden Fetch: 타입 안전성을 갖춘 Fetch 스타일 클라이언트
다음은 각 모듈의 개요, 사용 사례 및 비교입니다.
Eden Treaty (권장)
Eden Treaty는 Elysia 서버의 객체 스타일 표현으로, 종단 간 타입 안전성과 크게 개선된 개발자 경험을 제공합니다.
Eden Treaty를 사용하면 전체 타입 지원 및 자동 완성, 타입 축소를 통한 에러 처리, 타입 안전한 단위 테스트 생성이 가능한 Elysia 서버와 상호 작용할 수 있습니다.
Eden Treaty 사용 예제:
import { treaty } from '@elysiajs/eden'
import type { App } from './server'
const app = treaty<App>('localhost:3000')
app.
// [GET] '/'에서 호출
const { data } = await app.get()
// [PUT] '/nendoroid/:id'에서 호출
const { data: nendoroid, error } = await app.nendoroid({ id: 1895 }).put({
name: 'Skadi',
from: 'Arknights'
})Eden Fetch
fetch 문법을 선호하는 개발자를 위한 Eden Treaty의 fetch 스타일 대안입니다.
import { edenFetch } from '@elysiajs/eden'
import type { App } from './server'
const fetch = edenFetch<App>('http://localhost:3000')
const { data } = await fetch('/name/:name', {
method: 'POST',
params: {
name: 'Saori'
},
body: {
branch: 'Arius',
type: 'Striker'
}
})참고
Eden Treaty와 달리 Eden Fetch는 Elysia 서버에 대한 Web Socket 구현을 제공하지 않습니다.
