← 전체 글로 돌아가기

DB

로컬 SQLite 개발에서 운영 PostgreSQL로 이전할 때 체크리스트

SQLite 기반 개발 환경을 PostgreSQL로 마이그레이션할 때 확인해야 할 사항들을 정리했다.

SQLite는 개발할 때 편하지만, 운영 환경에서는 PostgreSQL이나 MySQL 같은 프로덕션 데이터베이스를 써야 한다. 로컬과 운영의 데이터베이스가 다르면 예상치 못한 문제가 생길 수 있다.

스키마 검증부터 시작하기

SQLite와 PostgreSQL은 SQL 문법이 조금 다르다. 특히 데이터 타입과 제약 조건이 다를 수 있다. Prisma를 쓰고 있다면 npx prisma validate 명령으로 스키마가 유효한지 먼저 확인하자. 그리고 마이그레이션 파일을 확인해서 PostgreSQL에서 정상적으로 실행될 수 있는 문법인지 검토해보자.

npx prisma validate
npx prisma migrate status
npx prisma migrate deploy

DATABASE_URL 환경 변수 확인하기

로컬에서는 SQLite 파일 경로를 DATABASE_URL로 썼지만, 운영 환경에서는 PostgreSQL 연결 문자열을 써야 한다. 환경 변수가 제대로 설정되었는지 확인하자. 데이터베이스 호스트, 포트, 사용자명, 비밀번호, 데이터베이스 이름이 모두 정확한지 다시 한 번 확인해야 한다.

타임존과 문자 인코딩 확인하기

SQLite는 타임존을 자동으로 UTC로 저장하지 않을 수 있지만, PostgreSQL은 시간을 다르게 처리할 수 있다. 특히 날짜와 시간 비교를 하는 쿼리가 있다면 타임존 설정을 확인해야 한다. 또한 문자 인코딩이 UTF-8인지 확인하는 것도 중요하다.

마이그레이션 순서와 의존성 확인하기

SQLite에서는 외래 키 제약을 기본적으로 비활성화할 수도 있지만, PostgreSQL에서는 외래 키를 엄격하게 검사한다. 마이그레이션을 적용할 때 테이블 생성 순서가 올바른지 확인하자. 부모 테이블이 먼저 생성되고, 그 다음에 자식 테이블의 외래 키가 설정되어야 한다.

데이터 타입 호환성 확인하기

SQLite의 INTEGER와 PostgreSQL의 BIGINT, SERIAL, BIGSERIAL은 다르게 동작할 수 있다. Prisma의 @db.Int, @db.BigInt 같은 속성을 정확하게 지정했는지 확인하자. 텍스트도 VARCHAR와 TEXT 차이가 있을 수 있으니, 로컬 SQLite 스키마와 운영 PostgreSQL 스키마가 정확히 일치하는지 비교해보자.

인덱스와 제약 조건 검증하기

SQLite에서 생략했던 인덱스나 unique 제약이 PostgreSQL에서 제대로 생성되었는지 확인하자. 성능 문제로 나중에 인덱스를 추가하려면 큰 테이블에서 시간이 많이 걸릴 수 있으니, 처음부터 필요한 인덱스를 모두 설정하는 게 좋다.

마이그레이션 테스트 환경 따로 만들기

운영 데이터베이스에 직접 마이그레이션을 적용하기 전에, PostgreSQL 테스트 환경을 따로 만들어서 마이그레이션이 정상적으로 돌아가는지 확인하자. 혹은 운영 데이터베이스의 백업본을 로컬에 받아서 실제로 마이그레이션을 돌려보는 것도 좋은 방법이다. 이렇게 하면 예상치 못한 에러를 미리 발견할 수 있다.