안녕하세요 꿀푸입니다.
예약 포스팅 관련 데이터를 저장하고 관리해주는 DB 라이브러리로 Prisma 를 사용하였습니다. 이유는 테이블을 객체 형식으로 생성 해주어 코딩 시 오류 체크 등의 편리함, SQL 쿼리문 대신 JSON 형식의 문법을 통해서 데이터를 조작할 수 있는 등등의 장점이 있어 선택을 하였고 사용법도 매우 간편하였구요.
Prisma 와 클라우드 기반의 PlanetScale DB 를 연동하여 데이터를 저장하고 있었는데 이게 무료 Plan 에서 제공하는 사용량을 초과하는 문제가 발생을 해서(언제 끊길지 모르는 불안함...) 서버 설치 방식의 Postgresql로 변경 작업을 진행하였습니다.
Prisma 초기 설정 및 기존 DB 접속 관련 설정이 되어 있는 상태에서 진행을 하였으며 매우 쉽게 처리할 수 있어 30분 내외로 걸린 듯 합니다.
먼저 DB 접속 관련 정보를 수정 합니다. .env에 DATABASE_URL 부분을 수정하여 줍니다.
DATABASE_URL="postgresql://<사용자>:<Password>@<IP:PORT>/<DB>?schema=public”
만약 Password에 !@# 같은 특수 문자가 있을 경우 아래 처럼 오류가 발생을 하며 percent Encoding 형식으로 변환하여 입력하여야 합니다. 여기 사이트에 접속하여 각 문자열에 대해 확인 가능합니다.
예) ! -> %21, $ -> %24
Error: P1013: The provided database string is invalid. invalid port number in database URL. Please refer to the
documentation in https://www.prisma.io/docs/reference/database-reference/connection-urls for constructing a correct connection string. In some cases, certain characters must be escaped. Please check the string for any illegal characters.
다음으로 Schema 파일을 수정 합니다. Provider 부분을 postgresql 로 변경하여 줍니다.
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
shadowDatabaseUrl = env("SHADOW_DATABASE_URL")
referentialIntegrity = "prisma"
}
만약 기존 DB에서 사용하던 Data Type이 postgresql에서는 지원을 안하는 문제가 발생된다면 아래 표를 참고 해서 적절한 Type으로 변경을 해주어야 합니다.
모든 작업이 완료 되면 아래 명령어로 schema 파일과 DB Schema 간 동기화를 수행해 줍니다. (테이블이 없다면 자동 생성)
$ npx prisma db push
나머지 소스 내 데이터 조작 관련된 부분은 수정 필요 없이 제대로 작동하는 걸 볼 수 있습니다. :-)
Posting by https://honeybeerbear.xyz/