2.9 KiB
2.9 KiB
DB 업데이트 쿼리 생성기 사용법
DbUpdateQueryGeneratorTest는 dev 스키마와 live 스키마의 테이블 구조를 비교해서, live에 필요한 DDL 쿼리를 생성하는 테스트 유틸이다.
현재 설정은 코드에 하드코딩되어 있다.
select = dev
update = live
생성되는 파일
테스트를 실행하면 아래 파일이 생성된다.
src/test/db/dev-to-live-update.sql
이 파일에는 live에 적용할 수 있는 테이블 생성 쿼리가 저장된다.
생성되는 쿼리
dev에는 있지만 live에는 없는 테이블이 있으면 다음 정보를 포함한 쿼리를 만든다.
CREATE SEQUENCE IF NOT EXISTSCREATE TABLE- 컬럼 타입
NOT NULLDEFAULTPRIMARY 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에서 실행할 때:
src/test/java/com/pandoli365/bibimbap/DbUpdateQueryGeneratorTest.java를 연다.printRequiredUpdateQueries()테스트를 실행한다.- 콘솔에
SQL file saved: ...메시지가 나오는지 확인한다. 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스키마가 기본 스키마로 잡힌 연결에서 실행해야 한다. devDB 접속 정보는src/main/resources/dev/db.properties를 사용한다.liveDB 접속 정보는src/main/resources/live/db.properties를 사용한다.