• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

20.12.18 19:37 작성 조회수 531

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데이터베이스를 끊는다.

감사합니다!

답변 2

·

답변을 작성해보세요.

1

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

1

안녕하세요. 종완님

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

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

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

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

도움이 되셨길 바래요.