# DB 업데이트 쿼리 생성기 사용법 `DbUpdateQueryGeneratorTest`는 `dev` 스키마와 `live` 스키마의 테이블 구조를 비교해서, `live`에 필요한 DDL 쿼리를 생성하는 테스트 유틸이다. 현재 설정은 코드에 하드코딩되어 있다. ```java select = dev update = live ``` ## 생성되는 파일 테스트를 실행하면 아래 파일이 생성된다. ```text src/test/db/dev-to-live-update.sql ``` 이 파일에는 `live`에 적용할 수 있는 테이블 생성 쿼리가 저장된다. ## 생성되는 쿼리 `dev`에는 있지만 `live`에는 없는 테이블이 있으면 다음 정보를 포함한 쿼리를 만든다. - `CREATE SEQUENCE IF NOT EXISTS` - `CREATE TABLE` - 컬럼 타입 - `NOT NULL` - `DEFAULT` - `PRIMARY KEY` - 컬럼 `COMMENT` 예시: ```sql 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'; ``` ## 생성하지 않는 쿼리 데이터 복제 쿼리는 생성하지 않는다. 아래와 같은 쿼리는 만들지 않는다. ```sql 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으로 실행할 때: ```powershell $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`를 사용한다.