개발/DB

🗃️MySQL:: 테이블 컬럼 타입 변경하기(+Spring JPA ddl-auto 옵션)

hyuunii 2023. 4. 18. 17:33

이 글은 이미 절찬리에 가동중인 DB의 테이블 컬럼 타입 변경을 기준으로 작성한 것입니다.
(즉, 혹시라도 만에 하나라도 DB를 절!!!!!!대로 날려먹을 수 없다는 대전제 존재)
*** 또한 기존 데이터 유실 방지를 위해 컬럼의 크기는 애당초 늘릴수만 있습니다.
 
만약 프로젝트 시작 단계에서 한참 스펙을 수정중일때는 그냥
ddl-auto를 create나 create-drop으로 해두고 바로바로 DB 날려가며 수정하면 됩니다.
(이 때는 아래처럼 Column 애노테이션에 속성 붙여주면 되며, ddl-auto update에서는 동작하지 않아서 create-drop으로 적용해야 합니다.)

@Column(columnDefinition = "LONGTEXT")

 
 
 
 
 
1. 이미 한참 가동중인 DB 테이블의 컬럼 타입을 변경하고자 하는 경우 코드상의 수정은 별 의미가 없음.
ddl-auto가 none이 걸려있기 때문.

spring.jpa.hibernate.ddl-auto=none

 
※ ddl-auto 옵션에 대해
application.properties에 추가한 jpa 옵션 중 주의 깊게 봐야 할 설정은 DDL AUTO 옵션이다.
spring.jpa.hibernate.ddl-auto 옵션을 통해 애플리케이션 구동 시 JPA의 데이터베이스 초기화 전략을 설정할 수 있다.
총 5개의 옵션이 있다.

  • none : 사용하지 않음
  • create : 기존 테이블 삭제 후 테이블 생성 
  • create-drop : 기존 테이블 삭제 후 테이블 생성, 종료 시점에 테이블 삭제 (DROP + CREATE)
  • update : 변경된 스키마 적용. 컬럼 삭제는 엄청난 문제를 발생시킬 수 있기 때문에 컬럼 추가만 반영된다. (운영 DB에는 사용하면 안됨!!!!)
  • validate : 엔티티와 테이블 정상 매핑 확인
  • 운영 장비에서는 절대 crate, create-drop, update 사용하면 안된다.
  • 개발 초기 단계는 create 또는 update
  • 테스트 서버는 update 또는 validate
  • 스테이징과 운영 서버는 validate 또는 none

개발 초기에는 create 또는 update 옵션을 이용해서 익숙해지는 데 집중하고 추후에 validate 옵션을 설정해주는 것이 좋다.
스테이징, 운영환경에서는 절대로 create, create-drop, update를 사용하면 안된다.
스테이징과 운영 서버에서는 테이블 생성 및 컬럼 추가, 삭제, 변경은 데이터베이스에서 직접하며, none을 사용하거나 validate를 이용해 정상적인 매핑 관계만 확인해야 한다.
 
 
 
 
2. 그러므로 MySQL 콘솔에서 직접 쿼리 날려 진행해야 한다.
우선 지금의 entity 설정을 확인한다.
e.g. testDB의 user 테이블 설정 확인
DESCRIBE databaseName.tableName;
// 테이블의 타입과 Null 기본 값 등등 출력
 

=>
DESCRIBE testDB.user

 
 
 
 
3. ALTER 쿼리를 날린다.
e.g. email column의 현재 데이터 타입이 varchar(55)이라서 longtext로 변경하고자 한다면 
email 컬럼 타입 변경 전 : varchar(50)
email 컬럼 타입 변경 후 : longtext
 
ALTER TABLE tableName MODIFY columnName LONGTEXT;
 

=>
ALTER TABLE user MODIFY email LONGTEXT