38.백엔드에 Prisma를 사용한 데이터베이스 관리, Prisma와 PostgreSQL을 통한 데이터베이스 설정

목차

  1. 1. 서론
  2. 2. Prisma란 무엇인가?
  3. 3. Prisma를 사용하는 이유
  4. 4. PostgreSQL 설정
  5. 5. Prisma 설치
  6. 6. Prisma 설정하기
  7. 7. 데이터베이스 스키마 정의
  8. 8. 데이터베이스 마이그레이션
  9. 9. Prisma Client 사용
  10. 10. 고급 기능
  11. 11. 결론

1. 서론

오늘날의 웹 개발에서는 데이터베이스 관리가 매우 중요합니다. 애플리케이션의 성능과 안정성은 초기 설계 단계에서 결정되며, 효율적인 데이터베이스 설계가 필수적입니다. 이 글에서는 Nest.js와 Next.js를 사용한 백엔드에서 Prisma를 활용하여 PostgreSQL 데이터베이스를 설정하고 관리하는 방법에 대해 설명하겠습니다.

2. Prisma란 무엇인가?

Prisma는 현대적인 애플리케이션을 위한 오픈 소스 ORM(Object Relational Mapping)입니다. Prisma를 사용하면 데이터베이스와의 상호작용을 간편하게 만들 수 있으며, 타입 안전성을 제공하고, 쿼리를 직관적으로 작성할 수 있도록 도와줍니다. Prisma는 다음과 같은 세 가지 주요 구성 요소로 구성되어 있습니다:

  • Prisma Client: 데이터베이스 쿼리를 수행하는 타입 안전한 클라이언트.
  • Prisma Migrate: 데이터베이스 스키마를 마이그레이션하는 도구.
  • Prisma Studio: 데이터베이스를 시각적으로 탐색하고 수정할 수 있는 UI 도구.

3. Prisma를 사용하는 이유

Prisma를 사용하는 이유는 다양합니다. 첫째, Prisma는 타입 안전성을 제공함으로써 코드의 품질을 높입니다. 둘째, 데이터베이스 쿼리가 직관적이며, 복잡한 쿼리를 단순화합니다. 셋째, Prisma Migrate를 이용해 데이터베이스 스키마를 쉽게 관리할 수 있습니다. 이를 통해 개발자는 데이터 모델의 변경을 수월하게 반영할 수 있습니다. 마지막으로, Prisma Studio를 통해 데이터베이스를 시각적으로 관리할 수 있어, 비즈니스 요구사항에 따라 더 나은 관리가 가능합니다.

4. PostgreSQL 설정

PostgreSQL은 세계적으로 인기 있는 오픈 소스 관계형 데이터베이스 시스템입니다. Prisma와 함께 사용할 수 있는 데이터베이스로 충분히 강력하며, ACID 준수를하는 안전한 데이터베이스입니다. PostgreSQL을 설치하기 위해 패키지 매니저를 사용할 수 있습니다.

sudo apt update
sudo apt install postgresql postgresql-contrib

설치 후, PostgreSQL 서버를 시작합니다:

sudo systemctl start postgresql
sudo systemctl enable postgresql

이후, PostgreSQL의 기본 사용자와 비밀번호를 설정해야 합니다.

5. Prisma 설치

Prisma를 사용하기 위해서는 Node.js 환경에서 Prisma CLI와 Prisma Client를 설치해야 합니다.

npm install prisma --save-dev
npm install @prisma/client

이러한 명령을 통해 Prisma의 모든 기본 기능을 사용할 수 있게 됩니다.

6. Prisma 설정하기

설치 후, Prisma를 설정하기 위해 다음 명령어를 사용하여 Prisma 초기화를 수행합니다:

npx prisma init

그러면 프로젝트의 루트 디렉토리에 Prisma라는 디렉토리와 .env 파일이 생성됩니다. .env 파일에서 PostgreSQL 데이터베이스의 연결 정보를 설정합니다.

# .env 파일 예시
DATABASE_URL="postgresql://USER:PASSWORD@localhost:5432/DATABASE"

USER, PASSWORD, DATABASE 값에 맞게 설정해주어야 합니다.

7. 데이터베이스 스키마 정의

Prisma의 스키마 정의 파일은 schema.prisma에 위치하며, 이 파일에서 데이터 모델을 정의합니다. 예를 들어, 사용자(User)와 게시글(Post) 모델을 정의할 수 있습니다.

model User {
  id        Int      @id @default(autoincrement())
  name      String
  email     String   @unique
  posts     Post[]
}

model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String
  published Boolean   @default(false)
  author    User?    @relation(fields: [authorId], references: [id])
  authorId  Int?
}

이렇게 정의된 모델은 이후 데이터베이스와의 상호작용에서 쉽게 사용할 수 있습니다.

8. 데이터베이스 마이그레이션

스키마가 정의된 후, 마이그레이션을 수행하여 데이터베이스에 변화를 적용해야 합니다. 다음 명령어로 마이그레이션을 생성할 수 있습니다:

npx prisma migrate dev --name init

이를 통해 생성된 마이그레이션 파일이 데이터베이스에 적용되고, 이전에 정의한 데이터 모델이 실제 데이터베이스에 생성됩니다.

9. Prisma Client 사용

마이그레이션이 완료된 후, 이제 Prisma Client를 사용하여 데이터베이스와 상호작용할 수 있습니다. 아래는 간단한 사용자 생성 예시입니다:

import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function main() {
  const newUser = await prisma.user.create({
    data: {
      name: 'Alice',
      email: 'alice@example.com',
    },
  });
  console.log('Created new user: ', newUser);
}

main()
  .catch(e => console.error(e))
  .finally(async () => {
    await prisma.$disconnect();
  });

이 코드는 Prisma Client를 통해 새 사용자 데이터를 데이터베이스에 추가하는 기능을 담고 있습니다.

10. 고급 기능

Prisma는 단순한 CRUD 작업 외에도 많은 고급 기능을 제공합니다. 예를 들어, 데이터 검증을 위한 커스텀 로직을 추가하거나, 트랜잭션을 사용해 여러 작업을 하나의 유닛으로 묶아서 작업할 수 있습니다. 또한 복잡한 쿼리도 쉽게 수행할 수 있도록 API를 제공합니다. 예를 들어, 특정 조건에 맞는 모든 게시글을 조회하고 싶을 때 다음과 같은 쿼리를 사용할 수 있습니다:

const posts = await prisma.post.findMany({
  where: {
    published: true,
  },
  include: {
    author: true,
  },
});

이렇게 다양한 기능을 활용하여 개발자들은 더 많은 가능성을 제공받을 수 있습니다.

11. 결론

Prisma와 PostgreSQL을 결합하여 효율적이고 타입 안전한 데이터베이스 운영을 구현할 수 있습니다. 이 글을 통해 Prisma의 기본 개념부터 고급 기능까지 전반적인 사용 방법을 알아보았습니다. 초기 설정에서 마이그레이션, 데이터베이스와 상호작용하는 방법까지, Prisma는 현대 웹 애플리케이션 개발에서 훌륭한 선택이 될 것입니다. 앞으로의 개발 업무에서 Prisma를 활용해보시기 바랍니다.