데이터베이스를 연결했더니 AI가 Prisma나 Drizzle을 설치했어요. 이게 뭔가요?
Prisma와 Drizzle 같은 ORM은 데이터베이스가 아니라 서버 코드가 DB를 일관된 방식으로 조회·저장하고 스키마 변경을 관리하도록 돕는 도구예요. 패키지 설치만으로 연결이 끝나지 않으므로 DB 주소·스키마·마이그레이션과 서버 전용 실행 여부를 확인해야 합니다.
핵심 요약
- ORM은 서버 코드의 객체와 함수로 SQL 데이터베이스를 다루게 하는 통역·작업 도구입니다.
- 스키마와 마이그레이션으로 구조 변경을 기록하고 타입 오류를 코드 단계에서 발견하는 데 도움을 줍니다.
- 실제 연결과 마이그레이션 적용을 확인하고 ORM 코드와 DB 비밀값은 브라우저가 아닌 서버에서만 사용합니다.
AI에게 데이터베이스를 연결해달라고 했더니 갑자기 여러 패키지를 설치합니다.
prisma
@prisma/client
drizzle-orm
drizzle-kit
프로젝트에는 처음 보는 파일도 생겨요.
prisma/schema.prisma
drizzle.config.ts
src/db/schema.ts
Supabase나 PostgreSQL을 연결해달라고 했을 뿐인데 Prisma와 Drizzle은 왜 설치된 걸까요?
이 도구들은 데이터베이스가 아닙니다. 서버 코드가 데이터베이스를 편하게 사용할 수 있도록 도와주는 ORM이에요.
ORM은 서버 코드와 데이터베이스 사이의 통역 도구예요
ORM은 Object Relational Mapping의 약자입니다.
이름은 어렵지만 역할은 비교적 단순해요.
데이터베이스는 보통 SQL이라는 언어로 데이터를 조회하고 저장합니다.
SELECT *
FROM users
WHERE id = 1;
ORM을 사용하면 같은 작업을 JavaScript나 TypeScript 코드로 표현할 수 있어요.
ID가 1인 사용자를 찾아줘
새로운 예약을 저장해줘
이 주문의 상태를 완료로 바꿔줘
ORM은 서버 코드의 요청을 데이터베이스가 이해할 수 있는 명령으로 바꾸고, 결과를 다시 서버에서 사용하기 편한 형태로 돌려줍니다.
서버 코드
→ ORM
→ 데이터베이스
ORM은 데이터를 저장하는 장소가 아닙니다. Supabase PostgreSQL 같은 실제 데이터베이스와 서버 코드를 연결해주는 작업 도구예요.
서버 코드와 데이터베이스가 웹앱의 어느 위치에 있는지부터 보고 싶다면 웹 애플리케이션의 기본 구조를 먼저 살펴보세요.
AI가 ORM을 설치한 이유
앞선 글에서는 브라우저가 데이터베이스에 직접 접근하기보다 앱의 서버가 데이터 접근을 맡는 구조를 살펴봤습니다.
브라우저
→ 앱 서버
→ 데이터베이스
서버에서 데이터베이스를 사용하려면 데이터를 조회하고 저장하는 코드가 필요합니다.
직접 SQL을 작성할 수도 있지만 AI는 Prisma나 Drizzle 같은 ORM을 선택하는 경우가 많아요.
ORM을 사용하면 다음 작업을 한 가지 방식으로 관리하기 편하기 때문입니다.
- 서버에서 데이터 조회와 저장
- 테이블과 컬럼 구조 정의
- 잘못된 데이터 타입 확인
- 테이블 사이의 관계 표현
- 데이터베이스 구조 변경
- 변경 기록 관리
즉 AI는 데이터베이스 주소만 연결한 것이 아닙니다. 앞으로 서버에서 데이터베이스 기능을 만들 때 사용할 도구를 함께 설치한 거예요.
ORM으로 데이터를 조회하고 저장해요
할 일 앱을 만든다고 가정해볼게요.
서버에는 다음과 같은 데이터베이스 작업이 필요합니다.
현재 사용자의 할 일 목록을 가져온다
새 할 일을 저장한다
완료한 할 일의 상태를 바꾼다
할 일을 삭제한다
ORM을 사용하면 이 작업을 서버에서 사용하는 프로그래밍 언어로 작성할 수 있습니다.
AI에게 기능을 요청할 때도 SQL 문법을 직접 설명할 필요가 줄어들어요.
로그인한 사용자의 할 일 목록을 가져오는 서버 API를 만들어줘. 데이터베이스 작업은 현재 프로젝트에 설치된 ORM을 사용해줘.
AI는 프로젝트의 데이터 구조를 확인하고 기존 ORM 방식에 맞춰 코드를 작성할 수 있습니다.
데이터 구조도 코드로 관리해요
ORM은 데이터 조회에만 사용하는 도구가 아닙니다.
많은 ORM은 데이터베이스의 테이블과 컬럼 구조를 코드 파일로 표현합니다.
예를 들어 사용자 테이블에는 다음 정보가 들어갈 수 있어요.
사용자
- 고유 ID
- 이름
- 이메일
- 가입일
예약 테이블에는 이런 정보가 들어갑니다.
예약
- 예약 ID
- 사용자 ID
- 수업 ID
- 예약 상태
- 예약일
이런 구조가 프로젝트의 스키마 파일에 작성됩니다.
AI는 스키마 파일을 읽고 어떤 테이블과 컬럼이 있는지 파악해요. 존재하지 않는 컬럼을 사용하거나 날짜를 넣을 곳에 잘못된 값을 저장하는 실수를 줄이는 데 도움이 됩니다.
데이터 구조와 스키마가 낯설다면 데이터베이스 스키마와 마이그레이션 글부터 읽어봐도 좋아요.
잘못된 데이터 사용을 코드에서 발견할 수 있어요
데이터베이스에는 값마다 종류가 있습니다.
이름 → 문자열
가격 → 숫자
결제 완료 → 참·거짓
예약 시간 → 날짜와 시간
ORM은 스키마를 바탕으로 서버 코드에서 어떤 값을 사용할 수 있는지 알려줍니다.
숫자가 필요한 곳에 문자열을 넣거나 존재하지 않는 컬럼을 조회하면 코드를 작성하는 단계에서 오류를 발견할 수 있어요. 코드 편집기의 자동완성에도 실제 테이블과 컬럼 이름이 나타납니다.
AI가 데이터 구조를 추측하지 않고 프로젝트에 정의된 구조를 따라 작업하는 데도 도움이 돼요.
데이터 타입에 관한 내용은 문자열·숫자·날짜가 왜 중요한지 글에서 이어서 볼 수 있습니다.
마이그레이션 파일은 데이터 구조의 변경 기록이에요
앱을 만들다 보면 데이터 구조가 계속 바뀝니다.
처음에는 예약 시간만 저장했지만 나중에는 예약 상태와 취소 사유가 추가될 수 있어요.
기존 예약 테이블
- 예약 시간
변경된 예약 테이블
- 예약 시간
- 예약 상태
- 취소 사유
코드의 스키마 파일만 바꾼다고 실제 데이터베이스가 자동으로 바뀌는 것은 아닙니다.
변경된 구조를 데이터베이스에 적용하는 과정이 필요해요. 이를 마이그레이션이라고 합니다.
ORM과 함께 설치된 도구가 변경 내용을 파일로 만들고 데이터베이스에 적용할 수 있습니다.
스키마 수정
→ 변경 파일 생성
→ 내용 확인
→ 데이터베이스에 적용
마이그레이션 파일이 있으면 언제 어떤 테이블이나 컬럼이 추가됐는지 확인할 수 있어요.
Drizzle을 사용하면서 운영 DB 적용까지 자동화하려면 GitHub Actions로 운영 DB 마이그레이션을 실행하는 방법을 참고하세요.
하지만 실제 데이터베이스에 적용하는 명령은 주의해야 합니다. 컬럼을 삭제하거나 이름을 바꾸는 변경은 기존 데이터에 영향을 줄 수 있기 때문이에요.
처음 보는 파일은 각각 역할이 있어요
ORM을 설치하면 패키지뿐 아니라 설정 파일과 폴더가 함께 생깁니다.
프로젝트마다 이름은 다를 수 있지만 대체로 다음 역할로 나눌 수 있어요.
데이터베이스 연결 설정
어떤 종류의 데이터베이스에 연결하고, 연결 주소를 어디에서 읽을지 정합니다.
PostgreSQL을 사용한다
DATABASE_URL 환경변수에서 주소를 읽는다
스키마 파일
테이블, 컬럼, 데이터 타입, 테이블 사이의 관계를 정의합니다.
데이터베이스 클라이언트
서버의 여러 기능이 같은 방식으로 데이터베이스를 사용할 수 있도록 연결 코드를 모아둡니다.
마이그레이션 폴더
테이블 생성과 컬럼 변경 같은 데이터 구조의 변경 기록을 보관합니다.
AI에게 각 파일의 역할을 물어보면 단순히 파일 내용을 설명하는 데서 끝내지 말고, 현재 프로젝트의 어느 기능이 그 파일을 사용하는지도 함께 확인하는 것이 좋아요.
ORM을 설치했다고 연결이 끝난 것은 아니에요
패키지가 설치됐다는 사실만으로 데이터베이스 연결이 완료된 것은 아닙니다.
다음 내용도 확인해야 해요.
데이터베이스 주소가 설정됐나요?
서버가 데이터베이스를 찾을 수 있도록 연결 주소가 환경변수에 있어야 합니다.
DATABASE_URL=...
이 값에는 데이터베이스 비밀번호가 들어갈 수 있으므로 브라우저 코드나 GitHub에 올리면 안 됩니다.
스키마가 실제 데이터베이스와 일치하나요?
코드에는 users 테이블이 있는데 실제 데이터베이스에는 없을 수 있습니다.
반대로 Supabase에는 테이블이 있지만 ORM 스키마에 반영되지 않았을 수도 있어요.
마이그레이션이 적용됐나요?
마이그레이션 파일만 만들고 실제 데이터베이스에 적용하지 않았다면 앱에서 테이블이나 컬럼을 찾지 못할 수 있습니다.
ORM 코드가 서버에서만 실행되나요?
데이터베이스에 직접 연결하는 코드는 브라우저에서 실행하면 안 됩니다.
화면 코드는 서버 API를 호출하고, ORM은 서버 안에서만 사용해야 해요.
브라우저
→ 서버 API
→ ORM
→ 데이터베이스
Prisma와 Drizzle이 둘 다 설치되어 있다면
일반적인 앱에서는 ORM 하나만 사용해도 충분합니다.
프로젝트에 Prisma와 Drizzle이 모두 설치되어 있다면 AI가 작업 도중 방식을 바꿨거나, 사용하지 않는 패키지가 남아 있을 수 있어요.
바로 삭제하기 전에 AI에게 실제 사용 여부를 확인해달라고 요청하세요.
이 프로젝트에서 실제로 사용하는 ORM이 무엇인지 확인해줘. Prisma와 Drizzle을 사용하는 파일을 각각 찾아서 목록으로 보여줘. 사용하지 않는 패키지가 있더라도 아직 삭제하지 말고 확인 결과부터 설명해줘.
중요한 것은 어떤 ORM이 더 좋은지 비교하는 것이 아닙니다. 프로젝트가 하나의 방식을 일관되게 사용하고 있는지 확인하는 것이 중요해요.
AI에게 이렇게 점검을 요청해보세요
ORM이 제대로 설정됐는지 모르겠다면 다음과 같이 요청할 수 있습니다.
이 프로젝트에 Prisma나 Drizzle이 왜 설치됐는지 확인해줘. 현재 실제로 사용하는 ORM이 무엇인지, 데이터베이스 연결 파일과 스키마 파일은 어디에 있는지 알려줘. 브라우저 코드에서 ORM을 직접 사용하고 있지는 않은지도 확인해줘. 아직 패키지를 삭제하거나 마이그레이션을 실행하지 말고 점검 결과부터 보여줘.
데이터베이스 구조를 변경하기 전에는 다음 내용도 확인하는 것이 좋습니다.
현재 ORM 스키마와 실제 데이터베이스 구조의 차이를 확인해줘. 실행되지 않은 마이그레이션이 있는지도 알려줘. 데이터가 삭제되거나 컬럼 이름이 바뀔 수 있는 작업은 실행하지 말고 먼저 설명해줘.
AI가 ORM을 설치했다고 해서 모든 명령을 바로 실행하게 둘 필요는 없습니다. 특히 실제 데이터가 들어 있는 데이터베이스에서는 변경 내용을 먼저 확인해야 해요.
정리
- Prisma와 Drizzle은 데이터베이스가 아니라 ORM입니다.
- ORM은 서버 코드가 데이터베이스를 조회하고 수정하는 작업을 도와줍니다.
- 데이터 구조를 코드로 표현하고 잘못된 타입이나 컬럼 사용을 발견하는 데도 사용됩니다.
- 데이터베이스 구조 변경은 마이그레이션으로 관리할 수 있습니다.
- 패키지가 설치됐다고 데이터베이스 연결과 마이그레이션이 모두 끝난 것은 아닙니다.
- 데이터베이스 연결 정보와 ORM 코드는 서버에서만 사용해야 합니다.
- 두 ORM이 모두 설치됐다면 실제로 사용하는 도구가 무엇인지 먼저 확인해야 합니다.
- 데이터베이스를 변경하는 명령은 실행 전에 내용을 확인하는 것이 안전합니다.
Prisma와 Drizzle이라는 이름을 처음 보면 새로운 데이터베이스가 하나 더 생긴 것처럼 느껴질 수 있습니다.
하지만 ORM은 데이터를 저장하는 장소가 아닙니다.
앱의 서버가 데이터베이스와 더 일관된 방식으로 대화하도록 도와주는 작업 도구라고 이해하면 됩니다.
인스타그램 @ddukddak.build · 페이스북 뚝딱







