바야흐로 개강을 앞둔 2월 중순, 우리 팀 아보카도는 요구사항 설계 및 데이터베이스 설계를 마쳤다.
이제 할 일은? → JPA를 이용한 엔티티 설계 및 관계 매핑!
마침 자바 ORM 표준 JPA 프로그래밍을 공부하던 중이였고, 하고 싶었던 공부였기에 술술 진도가 나가던 찰나!
갑자기 스친 생각이 있었다.
JPA를 사용하면 개발자가 직접 SQL을 작성하지 않아도 된다는 건 이해했다!
이전에 데이터베이스 설계를 마쳤기에, 물리적 설계과정에서 직접 DDL을 작성하기도 했다.
근데 스프링 부트와 JPA를 이용하면 애플리케이션을 시작할 경우 자동으로 CREATE 쿼리가 날라가는데,
‘굳이 DDL을 내가 작성해야 할까?’ 라는 생각이 스쳤다.
현재 프로젝트 환경
- 나는 아직 설계 초기 단계이고, 로컬 h2 DB를 사용 중인데
- 현재 내
application.yml
은spring.jpa.hibernate.ddl-auto: create
옵션으로 되어있다.
- 참고로 이 옵션은 해당하는 테이블이 있으면 drop하고, 테이블을 새로 만드는 명령이다.
- 반드시 로컬 환경에서만 써야 한다! 운영 환경에서는 기존 데이터가 있는 테이블을 다 날려버리기 때문!
- 이와 관련된 실수는 개발바닥의 호돌맨님이 직접 자신의 썰을 푼 링크를 첨부한다.
create
옵션을 붙여놔도 상관없기에 이 옵션 덕에 DDL이 자동으로 생성되지만,짤막하게 배우고 가는
ddl-auto
옵션 종류
create
: 기존 테이블을 삭제 후 생성 (drop + create)create-drop
: create와 같으나 종료시점에 테이블을 dropupdate
: 변경된 내용만 반영 → 운영 DB에서는 사용하면 안된다고 한다.validate
: 엔티티와 테이블이 정상 매핑되었는지만 확인none
: 사용하지 않음 → 사실상 없는 값이지만 관례상 none이라고 한다.
주의할 점
- 운영 장비에서는 절대 create, create-drop, update를 사용하면 안된다.
- 개발 초기 단계는 create 또는 update
- 테스트 서버는 update 또는 validate
- 스테이징과 운영 서버는 validate 또는 none
- 로컬 환경을 제외한 나머지 서버에서는 최대한 직접 쿼리를 날려서 적용하는 것이 가장 좋다고 한다.
그래서 답이 뭐냐고요