schemats에서 DB 모드에서 Type Script 유형 정의

◯◯ to ts


최근에는 다양한 정보에서 Type Script로 변환할 수 있습니다.
  • GraphiQL
    → GraphQL Code Generator ( https://graphql-code-generator.com/ )
  • Protocol buffers에서
    → protobuf-ts ( https://github.com/timostamm/protobuf-ts )
  • OpenAPI
    → openapi-typescript ( https://github.com/drwpow/openapi-typescript )
  • 이러한 TypeScript 코드 생성 도구를 사용하면 백엔드 변경의 영향을 받는 프런트엔드 측 부분 등을 정적 감지할 수 있습니다.
    저도 실제로 업무 중에 GraphiQL Code Generator를 사용했지만 가장 편리합니다.

    DB의 패턴 변경도 따라가고 싶어요.


    상술한 예는 백엔드와 백엔드의 관계에서 매우 강한 효과를 발휘할 수 있다.
    여기서 만약에 어떤 방법으로 뒤에 있는 데이터베이스 모델의 변경을 따라갈 수 있다면 모델 변경에서 전방의 유형 정의까지 정적 검측을 할 수 있어 매우 즐거워질 것이다.
    또 서비스 규모에 따라 단순히 DB의 표와 대체로 동일한 데이터 구조의 상태로 REST로 되돌아오는 경우도 있겠죠.이 경우 DB 모드의 변경은 API의 IF에 직접적인 영향을 줄 수 있습니다.
    최근에는 프라이스마https://www.prisma.io/를 사용해 스카마와 연계된 형태로 DB에 접근할 수 있지만, 전용 API를 통해서 하기 때문에 순수하게 형만 정해서 정의하는 게 힘들다.(검증되지 않음)

    schemats


    그래서 schemats의 소개.
    https://github.com/SweetIQ/schemats schemats를 사용하면 PostgreSQL 또는 MySQL의 DB 모드를 바탕으로 TypeScript형 정의를 출력할 수 있습니다.

    실제로 해 보다


    ※ 2020년 2월 9일 현재 포스트지그스QL12.x와 노드 4.x 를 조합하는 중 오류가 발생할 수 있습니다.주의하십시오.
    https://github.com/SweetIQ/schemats/issues/120

    사전 준비


    먼저 Docker에서 PostgreSQL을 시작하여 준비합니다.
     docker run --rm -d \
        -p 5432:5432 \
        -v pgsql:/var/lib/postgresql/data \
        -e POSTGRES_HOST_AUTH_METHOD=trust \
        postgres:latest
    
    약간 그 맛이 나는 탁자를 만듭니다.
    table.sql
    CREATE TABLE users (
      id INTEGER,
      name VARCHAR(100),
      admin BOOLEAN
    );
    
    CREATE TABLE articles (
      id INTEGER,
      title VARCHAR(255),
      user_id INTEGER
    );
    
    psql -h localhost -p 5432 -U postgres -f table.sql
    

    schemats의 실행


    그런 다음 schemats의 README를 따라 명령을 실행하기만 하면 됩니다.
    설치하십시오.
    npm install -g schemats
    
    실행
    schemats generate -c postgres://postgres@localhost/postgres -s public -o db.ts
    
    이후 지정한 db.ts 파일 이름으로 패턴에 대응하는 형식 정의를 출력할 수 있습니다.
    db.ts
    /* tslint:disable */
    
    
    /**
     * AUTO-GENERATED FILE @ 2021-02-09 22:40:53 - DO NOT EDIT!
     *
     * This file was automatically generated by schemats v.3.0.3
     * $ schemats generate -c postgres://username:password@localhost/postgres -t articles -t users -s public
     *
     */
    
    
    export namespace articlesFields {
        export type id = number | null;
        export type title = string | null;
        export type user_id = number | null;
    
    }
    
    export interface articles {
        id: articlesFields.id;
        title: articlesFields.title;
        user_id: articlesFields.user_id;
    
    }
    
    export namespace usersFields {
        export type id = number | null;
        export type name = string | null;
        export type admin = boolean | null;
    
    }
    
    export interface users {
        id: usersFields.id;
        name: usersFields.name;
        admin: usersFields.admin;
    
    }
    
    간단하네.
    참고로 추가 옵션을 통해
  • -C: 낙타 껍질에서 출력
  • -t: 출력할 표를 축소
  • 이렇게 말할 수도 있고.
    또한 설정을 JSON 파일로 정의하고 실행하도록 지정할 수도 있어 조리개 테이블이 많은 경우 편리할 수 있습니다.

    실제 상황은 어떠한가


    앞으로 프라임이 채택되는 경우가 늘어난 것이다.prisma를 올바르게 활용하는 경우도 있지만 그 미래가 오기 전까지는 시간이 좀 더 필요할 것 같습니다.
    기존 DB를 기반으로 단순 출력형 정의를 내리는 것도 유용한데 현실에서도 그런 경우가 있지 않을까 생각한다.
    DB 구조와 기본적으로 같고 REST API에 데이터가 남아있는 경우에도 사용할 수 있지만, 이 경우 DB 구조가 프런트로 직접 유입되는지, 혹시라도 SourceMap이 유출될 경우DB 모드 정보가 직접 유출되는 점에 대해서는 상당히 신중해야 한다고 본다.
    그럼에도 불구하고 사용처를 정확히 알면 타입 스크립트 개발을 강력하게 지원할 것으로 보인다.

    좋은 웹페이지 즐겨찾기