강의

멘토링

커뮤니티

Inflearn Community Q&A

henu's profile image
henu

asked

Real-world! Spring Boot and JPA Utilization 1 - Web Application Development

프로젝트 실행시 'JPA 설정 - ddl-auto' 옵션에 대한 질문입니다.

Resolved

Written on

·

472

1

안녕하세요. 

이전 질문들에 대한 답변 감사드립니다.

이번에는 웹 애플리케이션 실행시 JPA 설정에 따른 모든 테이블의 DROP, CREATE에 대해 

궁금한 사항이 있어 여쭙습니다.

강의 초반에 gradle을 통한 스프링부트 프로젝트 및 .yml을 통한 Datasource 설정이 있었는데요.

application.yml(운영용)  JPA의 'ddl-auto:create' 설정은 애플리케이션 실행 시점에서 

테이블을 Drop하고, 다시 생성한다라고 언급을 해주셨습니다.

다만, 실제로 애플리케이션 재시작 시 문제는 안되지만,

로그를 살펴보니 테이블을 DROP 하는 부분에서 Error 로그가 출력되고 있어 분석해본 결과,

연관관계(외래키를 통해...) 설정 되어 있는 테이블에 대해서는,

외래키가 있는 테이블이 먼저 DROP이 된 후 상위 테이블(?)이 DROP이 되어야 하는데

이 행위가 순차적으로 이루어지지 않아서 발생하는 문제로 분석이 되었습니다.

혹시 서로 연관된 테이블에서 외래키가 설정되어 있다면 

먼저 외래키가 설정된 테이블이 DROP되고 상위 테이블이 DROP되게 하는 설정이 추가로 존재할까요?

[h2 version : 1.4.200,]

강의를 듣다가 추가 질문 사항이 생겨 내용을 좀 수정하였습니다.

'회원 등록 및 조회' 강의에서 마지막 쯤 팀장님께서 

<form> 데이터를 처리하기 위해서 Entity Class에 별도의 처리를 하지 않고,

DTO의 역할을 하는 Class를 만들어서 사용하는 것을 권장한다고 언급을 해주셨는데요.

저 같은 경우 흔히 DTO와 VO의 용어를 혼동에서 사용하는 때가 많습니다.

강의를 듣고 정리하자면,

<form> 데이터를 처리하기 위한 별도의  Class(MemberForm과 같은...)는 'DTO'가

Entity Class는 'VO'가 되는 것이라고 칭해도 될까요?

미리 답변 감사드립니다.

spring-boot웹앱javaJPAspring

Answer 1

1

yh님의 프로필 이미지
yh
Instructor

안녕하세요. Painkiller님^^

2 데이터베이스를 1.4.199 버전으로 로컬에 다시 설치해주세요.

(1.4.199로 다시 설치하면 로컬에 .jpashop.mv 파일도 함께 삭제하고 완전히 처음부터 진행하시길 권장드립니다.)

1.4.200 버전이 아직 안정화 버전이 아니어서 일부 이슈가 있습니다.

(DROP TABLE의 경우 말씀하신데로 순서 이슈가 있는데, 이 부분은 하이버네이트에서 패치가 함께 되어야 할 것 같더라구요. 우선은 방법이 없으니, H2 데이터베이스를 1.4.199 버전으로 사용하시길 권장드립니다.)

두번째 질문인 DTO와 VO에 대한 내용입니다.

DTO는 정말 데이터를 전송하기 위해 비즈니스 로직이 거의 없고, 정말 단순히 데이터만 전송할 목적으로 사용하는 객체입니다.

반면에 VO는 Value Object 인데, 이 부분은 DTO와 다릅니다. 우리가 아는 String, LocalDateTime 같은 객체들이 Value Object 입니다.

JPA 기본편 섹션9. 값 타입에서 VO에 대해서 매우 자세히 설명해드리고, JPA에서 실제 이것을 어떻게 활용하는지 이해하실 수 있을거에요^^

감사합니다.

henu's profile image
henu

asked

Ask a question