bibimbap/docs/db-update-query-generator.md

2.9 KiB

DB 업데이트 쿼리 생성기 사용법

DbUpdateQueryGeneratorTestdev 스키마와 live 스키마의 테이블 구조를 비교해서, live에 필요한 DDL 쿼리를 생성하는 테스트 유틸이다.

현재 설정은 코드에 하드코딩되어 있다.

select = dev
update = live

생성되는 파일

테스트를 실행하면 아래 파일이 생성된다.

src/test/db/dev-to-live-update.sql

이 파일에는 live에 적용할 수 있는 테이블 생성 쿼리가 저장된다.

생성되는 쿼리

dev에는 있지만 live에는 없는 테이블이 있으면 다음 정보를 포함한 쿼리를 만든다.

  • CREATE SEQUENCE IF NOT EXISTS
  • CREATE TABLE
  • 컬럼 타입
  • NOT NULL
  • DEFAULT
  • PRIMARY KEY
  • 컬럼 COMMENT

예시:

CREATE SEQUENCE IF NOT EXISTS "users_id_seq";
CREATE TABLE "users" (
    "id" bigint DEFAULT nextval('users_id_seq'::regclass) NOT NULL,
    "display_name" character varying(80) NOT NULL,
    "created_at" timestamp with time zone DEFAULT now() NOT NULL,
    PRIMARY KEY ("id")
);
COMMENT ON COLUMN "users"."id" IS '사용자 고유 ID';

생성하지 않는 쿼리

데이터 복제 쿼리는 생성하지 않는다.

아래와 같은 쿼리는 만들지 않는다.

INSERT INTO "games" (...) SELECT ... FROM "dev"."games";
UPDATE "games" SET ...;
SELECT setval(...);

즉, 이 유틸은 데이터 복사가 아니라 스키마 구조 업데이트용이다.

실행 방법

IntelliJ에서 실행할 때:

  1. src/test/java/com/pandoli365/bibimbap/DbUpdateQueryGeneratorTest.java를 연다.
  2. printRequiredUpdateQueries() 테스트를 실행한다.
  3. 콘솔에 SQL file saved: ... 메시지가 나오는지 확인한다.
  4. src/test/db/dev-to-live-update.sql 파일을 열어 생성된 SQL을 확인한다.

Maven으로 실행할 때:

$env:JAVA_HOME='C:\Users\acst0\.jdks\azul-21.0.10'
.\mvnw.cmd -Dtest=DbUpdateQueryGeneratorTest test

적용 방법

생성된 SQL은 바로 운영 DB에 적용하지 말고 먼저 내용을 확인한다.

확인할 항목:

  • 생성 대상 테이블이 맞는지
  • DEFAULT nextval(...) 시퀀스 이름이 의도한 이름인지
  • NOT NULL, DEFAULT, PRIMARY KEY가 맞는지
  • 컬럼 코멘트가 깨지지 않았는지

문제가 없으면 live DB에 접속한 상태에서 src/test/db/dev-to-live-update.sql의 내용을 실행한다.

주의사항

  • 이 유틸은 DB에 직접 변경을 적용하지 않는다.
  • 테스트 실행 시 DB에는 읽기 쿼리만 수행한다.
  • 생성된 SQL에는 "live". 스키마 prefix를 붙이지 않는다.
  • 따라서 SQL을 실행할 때는 반드시 live 스키마가 기본 스키마로 잡힌 연결에서 실행해야 한다.
  • dev DB 접속 정보는 src/main/resources/dev/db.properties를 사용한다.
  • live DB 접속 정보는 src/main/resources/live/db.properties를 사용한다.