ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • prisma2 초기 설정 및 시작하기
    Apollo 2020. 12. 20. 04:21

    yarn add @prisma/client 를 통해 @prisma/client 설치

     

    npx prisma init 명령어를 통해 기본설정을 하고나면 prisma폴더 안에 schema.prisma와 .env 파일이 생긴다

     

     

    schema.prisma에서 type의 형식

    schema.prisma안에는 위 사진처럼 저장할 데이터의 형식을 정해줄 수 있다.

    db로는 postgreSQL, mySQL 등등을 사용하여 연결시켜줄 수 있다.

     

    저장할 데이터의 형식을 저장하고 나서는 datasource의 url부분에 연결할 db의 url을 적어준다.

    (기본 설정으로 .env안의 "DATABASE_URL"로 지정이 되어있으므로 .env 파일 안의 내용을 알맞게 수정하자)

     

    나는 postgreSQL을 사용했는데 이때 url의 형식은 아래와 같다.

     

    DATABASE_URL = 'postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=SCHEMA'

    (postgreSQL 설치 방법 및 초기 설정은 www.postgresql.org/ 참고)

     

    일반적으로 postgreSQL을 설치할 때 default값으로 user=postgres, host=localhost, port=5432, schema=public으로 되어있으므로 아래와 같은 내용으로 입력해주면 된다.

     

    DATABASE_URL = 'postgresql://postgres:pass1212@localhost:5432/movie-data?schema=public

     

    다 되었다면 Prisma Migrate라는 기능을 통해 postgreSQL db에 테이블을 생성한다.

    npx prisma migrate dev --preview-feature 를 통해 테이블 생성

    (migration은 아직 테스트 단계이므로 --preview-feature과 함께 사용한다)

    ※이 과정에서 에러가 발생할 경우 npx prisma migrate reset --preview-feature을 먼저 해보고 위의 명령어를 실행해보자. 

     

    Prisma의 존재 이유이자 가장 편리한 점은 입력된 데이터의 형식들로 생성, 삭제, 업데이트 등을 할 수 있는 함수를 자동으로 생성해준다.

     

    create, findFirst, findMany 등 다양한 종류로 생성, 삭제, 검색등을 할 수 있다.
    함수 중 create의 사용 형식

     

    update의 사용 형식

    생성된 데이터를 확인하고 싶을 경우, npx prisma studio라는 명령어를 이용하면 현재 저장되어있는 db를 인터페이스 형식으로 확인할 수 있다.

     

    prisma2의 기능 중 한가지 단점은 Delete할 때 Cascade를 지원하지 않는다는 것이다. Delete에서의 Casecade란 User가 있고 User가 올린 Post들이 있다고 치면, User을 지울때 함께 연결되어 있는 Post들이 같이 지워지는 것을 말한다.

    특히, User와 Post를 연결시키는 relation 기능이 User을 지울 때 연결되어 있는 Post가 있다면 에러를 발생시키기까지 한다.

     

    해결 방법을 찾아본 결과 사용할 수 있는 방법을 3가지 정도 발견하였다.

    User와 Post로 예를 들자면,

     

    1. User을 지우려고 할 때, Post가 남아있는지 확인하고 남아있다면 Post먼저 지운 뒤 User을 지운다. 

       (이 방법은 일일이 확인하여 지워줘야 하는 번거로움이 있다)

    2. User에 연결되어 있는 Post의 User부분을 전부 null로 만든 뒤 User을 지운다.

       (이 방법은 User가 지워져도 Post가 남아있다는 단점이 있다)

    3. @paljs/plugins 패키지를 설치하여 Cascade 기능을 사용한다.

     

    Prisma 공식 문서에서도 3번 방법을 언급하였기에 나는 3번으로 이용하였다.

     

    방법은 다음과 같다.

     

    schema.prisma에 onDelete(CASECADE) 삽입

    1. schema.prisma에서 Casecade를 사용할 부분 위에 ///@onDelete(CASECADE)를 넣어준다. 슬래쉬(/)는 꼭 세개를 써줘야한다.

     

    2. 위와 같은 형태로 사용한다

     

    댓글

Designed by Tistory.