Hun's Blog

Prisma CRUD, data modeling, aggregations (prisma 공식 유튜브 영상) 본문

Backend/GraphQL

Prisma CRUD, data modeling, aggregations (prisma 공식 유튜브 영상)

jhk-im 2020. 11. 25. 16:39

!! 해당 예제는 prisma 2.3.0 을 사용합니다.

두부랩(dooboolab)의 오픈 소스 프로젝트인 hackatalk에서 GraphQL을 구현하기위해 Prisma를 사용합니다. 정확히는 Apollo Server +Prisma + nexus로 구현되어 있습니다. 그렇기 때문에 처음 프로젝트를 분석할때 도대체 어디서 부터가 prisma인지prisma가 정확히 무엇인지 파악하는 것이 쉽지만은 않습니다.

해당 글은 Prisma 공식 유튜브에 올라온 Building a modern backend with TypeScript, PostgreSQL and Prisma — Part 1을 소개합니다.

이 예제는 prisma를 활용해 schema를 직접 작성하고 CRUD를 구현하는 prisma methods를 사용하여 seed를 구현합니다. (seed란 씨앗, 종자라는 뜻 과 같이 데이터베이스에서 기본적으로 가지고 있어야 할 데이터를 서버가 시작될 때 자동으로 추가 해주는 것을 말합니다.)

기본적인 prisma의 흐름을 파악하는데 매우 유익한 영상입니다. 시간이 되시는 분들은 영상을 보면서 처음부터 순서대로 직접 작성하시는 것을 추천드립니다.

 

 

다음은 해당 예제의 기술사양입니다.

  • PostgreSQL
  • Node.js
  • Prisma
  • TypeScript
  • Jest
  • 실행환경 : mac os

1. postgresql 설치

$ brew install postgresql

$ brew services start postgresql

2. 튜토리얼 git clone

https://github.com/2color/real-world-grading-app/tree/part-1/

$ git clone https://github.com/2color/real-world-grading-app.git

$ cd real-world-grading-app

$ npm install

3. Docker 설치

Docker 설치 가이드

https://docs.docker.com/docker-for-mac/

$ docker-compose up -d

$ docker ps

 

4. .env 파일 추가

prisma 폴더에 .env파일을 생성하고 다음의 내용을 입력합니다.

DATABASE_URL=”postgresql://prisma:prisma@127.0.0.1:5432/grading-app”

여기서 데이터베이스 url 은 다음과 같습니다.

database://id:password@localhostAddress/tableName

.env
DATABASE_URL

즉, postgresql에 등록된 id와 password로 생성된 localhost 주소에 있는 테이블에 연결하겠다 라는 뜻입니다.

다음 명령어를 입력하여 id 를 생성합니다.

$ createuser -P -s prisma

-> 생성 후 비밀번호를 prisma 로 설정합니다.

postgreSQL id 생성

다음 명령어를 입력하여 id가 생성 되었는지 확인 후 빠져 나옵니다.

$ psql postgres

$ \du

id 생성확인

$\q

 

5. 스키마 & typescript 작성

사진처럼 prisma 폴더와 src폴더안에 2개의 파일이 생성되어있습니다.

schema.prisma / seed.ts

./src/seed.ts

./src/seed.soved.ts

./prisma/schema.prisma

./prisma/schema.solved.prisma

solved가 붙은 파일에는 예제에서 끝까지 진행된 내용이 담겨져 있습니다.

영상을 보면서 작성되는 과정을 보실 분들은 copy하지 않고 해당 파일을 처음부터 작성하시면 됩니다.

여기서는 solved 파일의 코드와 스키마를 seed.ts와 schema.prisma에 copy 하도록 하겠습니다.

 

6. prisma migrate

$ npx prisma migrate save — experimental

다음과 같이 grading-app 테이블을 생성할 것인지 물어봅니다.

migrate-save

-> yes! -> migarte 이름 설정 (자유롭게)

$ npx prisma migrate up — experimental

이제 테이블이 생성되었습니다.

 

7. pg-cli

예제에서 해당 플러그인을 활용하여 데이터를 터미널에서 보다 편리하게 열람합니다.

$ brew install pgcli

$ pgcli postgresql://prisma:prisma@localhost:5432/grading-app

다음과 같은 명령어로 테이블을 확인합니다.

$ /d

$ /d “Course”

$ /d “User”

pgcli

8. prisma generate

$ npx prisma generate

9. ts-node로 typescript 실행

이제 데이터베이스 설정이 완료 되었으니 seed 데이터를 추가하도록 하겠습니다.

$ npm ts-node

$ ts-node src/seed.ts

 

 ts-node

pgcli로 추가된 데이터를 확인해보도록 하겠습니다.

$ pgcli postgresql://prisma:prisma@127.0.0.1:5432/grading-app

쿼리문을 사용하여 열람할 수 있습니다.

$ select * from “Course”

 

pgcli query

10. prisma studio

prisma에서는 데이터를 더욱 편리하게 열람할 수 있도록 studio명령어를 제공합니다.

$ npx prisma studio — experimental

다음과 같이 변경된 데이터를 브라우저에서 확인할 수 있습니다.

prisma studio
prisma studio

끝까지 예제를 완성 하였다면 hackatalk - server안에서 prisma의 역할에 대해 어느정도 도움이 되셨을것이라 생각됩니다.