Session 21. CRUD

*🔐Study Keyword :

🔑CRUD에 개념과 🗝️Prisma Client를 이용한 C,R 구현해보기

- CRUD

  • CRUD란 CREATE, READ , UPDATE, DELETE의 줄임말로 데이터 생성 조회 수정 삭제를 의미하며 데이터를 다루는 네가지 경우에 해당된다

-C: 회원가입, 글작성 ,상품등록
-R: 회원조회, 상품 조회
-U: 유저 정보 변경, 상품명 변경
-D: 유저 삭제
=> D의 경우 사실 실제로는 삭제되지 않고 isDelete같은 칼럼을 만들어서 넣어놓는다.
=> 이를 소프팅 딜리트 형태라고하며 지우긴했지만 지운게 아닌 것을 의미한다.

- Prisma Client

  • 프리즈마를 통해서 데이터베이스에 더 쉽게 접근 하기 위해 Prisma Client를 설치한다. 프리즈마 클라이언트는
  • Prisma ClientPrisma로 연결되어 있는 데이터베이스의 테이블들을 쉽게 접근할 수 있게 해주는 Client 역할을 한다
  • Prisma Client는 마치 고객이 제공받는 것을 사용하는 입장으로 Prisma는 이미 만들어 놓은 것을 이용할 수 있는 라이브러리이다.
  • 이 라이브러리를 사용하면 데이터베이스에 쉽게 접근할 수 있다.

Prisma Client 설치과정

1> Prisma Client 라이브러리 설치

npm install @prisma/client --save

2> Prisma Client를 import 해준다.

import {Prisma Client} from "@prisma/client"

3> 클래스 생성된 Prisma Client를 new 연산자를 사용해 인스턴스를 만든다.

const prisma = new Prisma Client()

  • prisma client를 설치하면 prisma generate 라는 명령어도 함께 실행된다.
  • prisma generate는 prisma.schema 파일을 읽어서 이 파일에 있는 모델 형태에 맞는 client를 생성한다.
  • prisma generate의 역할은 schema 파일을 읽어서 파일에 있는 모델 형태에 맞는 클라이언트 생성해줌으로서 schema 파일이 변경되면 위 명령어가 실행되어 클라이언에 반영되어 자동완성되어 사용이 가능하다.

Prisma에서 C.R. 구현

app.post('/categories', async (req, res) => {
  await prisma.$queryRaw`
    INSERT INTO categories (name)
    VALUES ('콜드 브루');
  `;
  const [category] = await prisma.$queryRaw`
    SELECT *
    FROM categories
    ORDER BY id DESC
    LIMIT 1
  `;
  res.json(category);
});
  • 함수의 리턴 값이 카테고리에 담기면 리턴 값을 res.json으로 반환하여 만든 데이턷들을 그대로 돌려준다.
  • get은 단순히 데이터를 읽어만 오는 것이고 데이터를 추가하는 것처럼 생성 자체는 post이다.
  • prisma에서 사용할 수 있는 메서드들이 있는데 EX> find many, uniquie등이 존재하지만 sql문도 prisma에서 사용 할 수 있다.

비동기 처리

  • async 키워드를 사용한 이유는 비동기 처리하기 위해서
  • 비동기 처리란? 처리가 오래걸리는 코드를 빼두고 빠르게 처리하는 코드들 먼저 실행하고 빼놓았던 코드를 다시 실행하는 것
  • 즉, 비동기란 기다리지 않는 것으로 순서대로 처리하지 않는 것을 의미한다.
  • 이렇게 시간이 오래걸리는 로직 중 하나가 DB랑 통신하는 것으로 서버간에 연동을 할 때 통신이 이뤄지고 대부분 비동기 작업으로 이루어진다.
    => 통신 = 비동기, 데이터베이스 접근 = 통신

비동기 처리 사용법

인자 앞에 async를 붙임으로 함수 자체를 비동기로 만들면
이 함수의 역할은 DB에 접근하여
1> 데이터를 가져온 다음
2>반환하는 순으로 진행되는데
이떄 1> 데이터를 가져오는 것 보다 2> 반환이 먼저 이루어지면 안되기 때문에 비동기처리를 통해 1> 데이터 접근이 끝난 뒤 2> 반환을 하는 순서를 보장받는다.

데이터를 조회하는 방식 2가지

1> select * 모든 데이터 조회하는 것
2> select table.column 특정 데이터만 조회하는 것

app.post('/categories', async (req, res) => {
  await prisma.$queryRaw`
    INSERT INTO categories (name)
    VALUES ('콜드 브루');
  `;
  const [category] = await prisma.$queryRaw`
    SELECT *
    FROM categories
    ORDER BY id DESC
    LIMIT 1
  `;
  res.json(category);
});
  • ORM을 사용했을 때처럼 최근 추가한 데이터를 반환하지 않기 때문에 추가 SQL문을 작성하여 반환해준다.
  • queryRaw 메서드의 특징은 반환 타입의 결과가 항상 배열이기에 하나만 반환하기 위해서 배열 비구조화를 해서 사용한다.
  • *는 보통 안쓰며 c.id , c.name 같이 from categories c처럼 줄여서 적어준다

*💡conclusion

  1. CRUD가 뭔지에 대해서 CREATE, READ 하는 법
  2. 코드 단에선 데이터베이스 접근하는 것 조차도 통신(8000 - 3036 포트에서 과정은 오래걸리기 때문에 비동기로 처리)
  3. 비동기를 처리하기 위해 ASYNC/AWAIT, AWAIT는 비동기 코드가 안지나가고 데이터베이스 접근하고 반환하는 걸 받아와야하기 때문에 기다려줘야하는 문법으로서 사용된다.
  4. creat.findMany 같은 프리즈마 메서드가 존재하는 정도만 알고 rawQuery을 더 잘 쓰는게 중요하다.
    +) 만약 방금 추가한 데이터가 뭔지 알아야하는 경우에는 추가한 내용을 읽어오는 것까지 해주면 친절한 백엔드 개발자로 거듭날 것이다.

#📑Study Source

  • 위코드 강의 중 벡엔드 파운데이션에 돌아온 관희님의 강의 중:>

좋은 웹페이지 즐겨찾기