상세 컨텐츠

본문 제목

[TIL] 2024.01.25 RAW-QUERY ORM Prisma

[TIL]

by 재호링 2024. 1. 26. 02:17

본문

오늘 한 일

  • RAW-QUERY 이해 및 실습
  • ORM Prisma 이해 및 실습

Raw Query란 뭘까?

SQL에 직접 Query를 요청하는 것.

node.js 환경에서 쿼리를 요청하는 것을 말하는데

디비에 연결하고 테이블 생성 및 조회 등

디비와 상호작용을 해주는 것.

 

몽고디비 실습때와 비교되는 것은

몽고디비는 schema를 이용해

연결해주는 방식인데

 

Raw Query는 app.js 에서 SQL문으로

CREATE TABLE 을 만들고 테이블 생성 API를 작성하는 차이가 있다.

app.post("/api/tables/", async (req, res, next) => {
    const { tableName } = req.body;

    await connect.promise().query(`
        CREATE TABLE ${tableName}
        (
            id        INT         NOT NULL AUTO_INCREMENT PRIMARY KEY,
            name      VARCHAR(20) NOT NULL,
            createdAt DATETIME    NOT NULL DEFAULT CURRENT_TIMESTAMP
        )`);

    return res.status(201).json({ message: "테이블 생성에 성공하였습니다." });
});

 

이처럼 connect.promis().query()를 활용해

테입블과 컬럼을 생성할 수 있다.

app.get("/api/tables/", async (req, res, next) => {
    const [tableList] = await connect.promise().query(`
    SHOW TABLES
    `);
    
    const tableName = tableList.map((table) => Object.values(table)[0]);
    return res.status(200).json({ tableList: tableName });
});

 

여기서 의문이 들었다.
const [tableList]는 왜 "[]" 이 값으로 감싸주는지

 

정답은 SHOW TABLES 또는 SELECT 문법의 조회 메소드는

반환값이 존재하기 때문이다. 즉 Raw Query를 이용해 조회된 결과값은

배열의 첫번째에 할당되어 배열 구조분해할당 문법을 이용한 것.

배열의 첫번째의 값만 tableList 변수에 할당한 것이라 볼 수 있다.

 

ORM Prisma

Prisma 라이브러리 설치하기

# yarn 프로젝트를 초기화합니다.
yarn init -y

# express, prisma, @prisma/client 라이브러리를 설치합니다.
yarn add express prisma @prisma/client

# nodemon 라이브러리를 DevDependency로 설치합니다.
yarn add -D nodemon

# 설치한 prisma를 초기화 하여, prisma를 사용할 수 있는 구조를 생성합니다.
npx prisma init

 

- 데이터베이스 URL

대여받은 RDS의 속성값을 입력해주면된다.

  • 데이터베이스 엔진: mysql
  • 마스터 사용자 이름: root
  • 마스터 암호: aaaa4321
  • RDS 엔드포인트: express-database.clx5rpjtu59t.ap-northeast-2.rds.amazonaws.com
  • Port 번호: 3306
  • 사용할 DB 이름: prisma_crud
DATABASE_URL="mysql://root:aaaa4321@express-database.cr2wkyc04qhk.ap-northeast-2.rds.amazonaws.com:3306/prisma_crud"

 

이렇게 작성해주면된다.

 

- Prisma CLI 명령어

prisma db push
// 파일에 정의된 설정값을 실제 데이터베이스에 반영 하는것
prisma init
// prisma를 사용하기 위한 초기 설정 다른 init 명령어랑 똑같다.
prisma generate
// prisma Client를 생성하거나 업데이트 하는 것
// 구조 변경이 이뤄졌을때, 이 명렬어로 최신 상태 유지
prisma db pull
//현재 연결된 DB의 구조를 prisma.schema 파일로 가져오는 것
// 최신상태로 유지하기 가능

-> Prisma CLI 명령어를 자세히 알고 싶다면,,

https://www.prisma.io/docs/orm/reference/prisma-cli-reference#synopsis

 

회고

오늘 Raw Query와 Prisma에 대해 배웠는데

이전에 몽구스를 쓸 때와 비교해보자면

살짝 더 복잡한 것 같다. 그래도 장점을 꼽자면

SQL문을 NODE.JS 환경에서 사용하니까

관리하기 용이하니 장점으로 다가오는 것 같다.

 

관련글 더보기