소개
Sonamu는 Node.js/TypeScript 기반의 풀스택 프레임워크입니다.
Sonamu는 E2E Type-safety, 효율적인 서브셋 쿼리, 스캐폴딩을 통한 반복작업 자동화 등 프론트엔드와 백엔드가 타입스크립트라는 동일한 언어를 사용한다는 장점을 최대화합니다.
목적
Sonamu는 아래의 목적에 따라 만들어졌습니다.
- 타입스크립트는 컴파일 타임에만 검증이 가능한데, 런타임에도 타입으로 검증을 수행하고 싶다.
- 프론트엔드와 백엔드 사이의 E2E Type-safety를 보장하고 싶다.
- 서브셋을 이용하여 효율적으로 데이터를 쿼리하고 싶다.
- 기능 추가 시 매번 반복하는 작업을 자동화하고 싶다.
- 백엔드와 프론트엔드의 언어가 동일한데, 이 특징을 더 잘 이용하고 싶다.
런타임 타입 검증
타입스크립트는 자바스크립트의 Superset 언어입니다. 타입스크립트의 기능은 컴파일 타임에만 적용될 뿐, 외부 데이터가 전달되는 런타임에는 다른 검증 수단이 있어야 안전하게 요청을 처리할 수 있습니다.
DB 스키마를 기반으로 생성한 타입에 Zod를 결합하여 API 요청 파라미터 검증까지 가능합니다.
E2E Type-safety
Sonamu는 DB 스키마를 기반으로 서버에서 생성한 타입을 프론트엔드로 복사함으로써 프론트엔드와 백엔드 양쪽에서 항상 동일한 타입을 사용할 수 있습니다.
서브셋을 사용한 효율적인 데이터 쿼리
Sonamu UI를 사용하여 서브셋을 변경하면, 서버에서 해당 서브셋을 쿼리하는 SQL 구문을 자동 생성합니다. 이를 통해 필요한 데이터만을 효율적으로 가져올 수 있습니다.
반복 작업 자동화
“이런저런 작은 기능 하나 추가해주세요. 간단하죠?”
작은 기능을 추가하기 위해 우리가 항상 해야하는 작업이 있습니다.
- 우선, DB에 컬럼을 추가해야 할 수 있습니다. 그렇다면 마이그레이션 코드를 작성해야 하고, up/down 테스트를 실행해야 하며, 해당 변경을 실 서버에 적용해야 합니다.
- 모델 코드와 타입과 단위테스트도 작성해야 합니다. 관련 필드를 입력/삭제하는 메소드를 추가하고, 타입을 작성하고, 모델 메소드를 테스트하는 단위테스트도 추가합니다.
- 컨트롤러 코드도 추가해야 합니다. 위에서 만든 모델 코드를 외부로 오픈하는 API 엔드포인트가 필요합니다. 필요에 따라 서비스/어드민 양쪽 모두 작업해야 할 수도 있습니다. 여기서도 타입을 작성합니다.
- 새 API가 추가되었으니, 이를 받아오는 프론트엔드 서비스 코드를 작성하고, 뷰 작업을 해야 합니다. 여기서도 또 타입을 작성합니다.
Sonamu는 위의 각 작업을 대신 수행합니다.
할 수 있는 일
Sonamu를 이용하여 수행할 수 있는 서버 작업으로는,
- Sonamu UI를 사용하여 스키마를 수정하면 ORM 방식의 엔티티 정의를 생성하고, 해당 엔티티 정보와 DB 테이블 정의를 비교하여 마이그레이션 코드까지 자동 생성합니다.
- 엔티티 정보를 사용하여 BaseSchema 타입을 생성하고, 모델의 CRUD 로직과 테스트 코드를 스캐폴딩할 수 있습니다.
- API 데코레이터를 사용하여 간단하게 API를 오픈할 수 있습니다.
클라이언트 작업으로는,
- 엔티티 정보로 생성된 BaseSchema 기반 타입 동기화
- API를 호출하는 서비스 코드를 프론트엔드 코드베이스에 자동 생성
- 엔티티 정보를 사용하여 리스트, 폼 등 기본적인 컴포넌트 스캐폴딩