inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

현업에서 JPA로 마이그레이션하면서 문제를 겪었습니다.

820

김종완[와니Wani]

작성한 질문수 5

0

안녕하세요 영한님! 우아콘 영상 잘봤습니다. 최근에 현업에서 JPA 사용하면서 부딪힌 문제가 있는데 발표해주신 상황이랑 비슷한것같아서 의문점이 생겨서 질문을 드립니다!

현재 저희 서비스에서는 PHP (코드이그나이터) 기반의 코드로 작성이 되어있습니다.

그러다 보니 데이터 베이스(mariaDB) 스키마는 제가 한땀한땀 작성하면서 만들었습니다.

그런데 JAVA기반의 JPA로 마이그레이션을 진행하려고 합니다.

같은 테이블에서 JPA로 짜다보니까 현재 서비스되는 데이터베이스 구조와 

JPA에서 ddl-auto로 자동으로 만들어지는 데이터베이스구조가 달라서,

JPA select를 사용할때 구조가 달라서 에러를 뿜으면서 죽습니다.

예시)

"No enum constant co.kr.test.domain.partner.entity.BusinessType.individual; nested exception is java.lang.IllegalArgumentException: No enum constant

1) 배달의 민족에서도 php에서 spring으로 넘어가면서 겪으신 다른 기술을 마이그레이션 하는 팁이 있을까요?

2) 제가 생각하는 마이그레이션 방법입니다. 좋은 방법일지 아니면 더좋은 방법이 있을지 답변남겨주시면 감사하겠습니다!

- 해당 맞는 서비스에서 JPA로 비즈니스 로직을 짠다.

- JPA로 데이터베이스 구조를 v2로 복사하여 생성한다.

- JPA로 생성된 데이터베이스  v2에 원래있던 데이터를 밀어넣는다.

- 당분간은 두 데이터베이스가 공존한다.

- 안정화 되면 v1데이터베이스를 끊는다.

감사합니다!

java JPA

답변 2

1

김종완[와니Wani]

정성스러운 답변 감사합니다!

1

김영한

안녕하세요. 종완님

우선 JPA에서 ddl-auto로 만들어지는 구조와 지금 있는 데이터베이스 구조를 맞추셔야 합니다.

데이터베이스에 컬럼이 추가로 더 있는 상황은 괜찮지만, 컬럼 자체가 없으면 당연히 문제가 됩니다.

그래서 php에서 스프링으로 넘어가더라도, 데이터베이스 테이블 구조와 JPA의 매핑 구조는 맞추어주셔야 합니다.

그런데 정말 현제 데이터베이스 테이블 구조에 문제가 있어서, 데이터베이스 테이블 설계 자체를 크게 변경하려면, 과거 데이터베이스 -> 신규 데이터베이스로 모든 데이터를 마이그레이션 하셔야 합니다. 서비스를 일시적으로 중단할 수 있다면 마이그레이션 스크립트를 미리짜두고, 마이그레이션을 하시면 됩니다. 무중단으로 하려면, 양쪽에 데이터를 똑같이 유지할 수 있는 상태를 만들어두고, 넘어가야 하는데(이벤트 발행이나 등록을 동시에 양쪽에 하거나 등등), 실제 제대로 적용 하려면 정말 고민이 많이 필요합니다.

도움이 되셨길 바래요.

실무 조언 관련 질문입니다.

0

39

1

H2데이터베이스 파일 생성

0

48

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

49

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

46

1

JPQL 메소드와 락

0

49

1

Delivery @OneToOne

0

55

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

85

2

UnsupportedOperationException 발생

0

80

3

H2 Database 연결이 안됩니다.

0

87

2

연관관계 매핑 질문드립니다.

0

79

2

h2데이터베이스 실행오류

0

103

2

persistence.xml

0

101

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

76

1

영속성 컨텍스트

0

61

1

JPA 프록시

0

87

1

Native Query와 MyBatis

0

62

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

81

1

임베디드 타입 예시 코드 관련 질문

0

110

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

89

3

인텔리제이 패키지 커서 단축키 질문

0

104

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

134

1

양방향 연관관계 시 연관관계 주인을 설정하는 이유

0

67

1

임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.

0

95

1

데이터베이스가 초기화되는 것 같아요

1

173

2