봇에 데이터를 저장하려면 데이터베이스가 필요합니다. 최근에는 ORM(Object Relational Mapping) 도구인 Prisma를 활용하면, SQL을 직접 다루지 않고도 손쉽게 데이터베이스를 사용할 수 있습니다. Prisma는 SQLite를 비롯해 다양한 데이터베이스를 지원하며, 타입 안전성과 코드 자동완성 등 개발 편의성이 뛰어납니다.
준비 과정
npm install prisma @prisma/client
로 패키지를 설치합니다.npx prisma init
명령어로 Prisma 설정을 초기화하면,prisma/schema.prisma
파일이 생성됩니다.schema.prisma
파일에서 데이터베이스를 SQLite로 지정하고, 모델을 정의합니다.
예시:
// prisma/schema.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = "file:./dev.db"
}
model User {
id String @id
points Int @default(0)
}
npx prisma migrate dev --name init
명령어로 데이터베이스와 테이블을 생성합니다.
예제 코드
아래는 Prisma Client를 사용해 유저별 포인트를 저장하고 불러오는 예시입니다.
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
async function addPoint(userId) {
await prisma.user.upsert({
where: { id: userId },
update: { points: { increment: 1 } },
create: { id: userId, points: 1 }
});
}
async function getPoint(userId) {
const user = await prisma.user.findUnique({ where: { id: userId } });
return user ? user.points : 0;
}
코드 리뷰 및 설명
- PrismaClient: Prisma가 자동 생성한 타입 안전한 DB 클라이언트입니다.
- upsert: 해당 유저가 없으면 새로 만들고, 있으면 포인트를 1 증가시킵니다.
- findUnique: 유저의 포인트를 조회합니다. 없으면 0을 반환합니다.
- Prisma는 비동기 함수이므로, 실제 봇 코드에서는
await
또는.then()
을 사용해야 합니다.
실전 팁
- Prisma는 타입스크립트와 궁합이 좋지만, 자바스크립트에서도 문제없이 사용할 수 있습니다.
- 데이터베이스 파일(
dev.db
)은 프로젝트 폴더 내에 생성됩니다. 백업이 필요하다면 주기적으로 복사해두세요. - Prisma 스키마를 수정한 후에는 반드시 마이그레이션을 다시 실행해야 합니다.
- 대규모 봇이나 동시 접근이 많을 경우, SQLite 대신 MySQL, PostgreSQL 등으로 datasource를 변경할 수 있습니다.
마무리
Prisma를 활용하면 SQL 쿼리를 직접 작성하지 않아도, 안전하고 편리하게 데이터베이스를 다룰 수 있습니다. 기본 구조를 익힌 뒤, 더 복잡한 모델과 관계로 확장해보세요.
'봇 개발 팁 > Discord.js' 카테고리의 다른 글
Sharding이란? 대규모 봇에서의 필수 구조 이해 (0) | 2025.05.23 |
---|---|
디스코드 봇에서 유저 포인트 시스템 구현하기 (0) | 2025.05.22 |
디스코드 봇 + OpenAI 연동하기 (ChatGPT API) (1) | 2025.05.20 |
환경변수와 .env 파일로 토큰 안전하게 관리하기 (0) | 2025.05.18 |
단 10줄로 만드는 간단한 디스코드 봇 (1) | 2025.05.17 |