IT/Java

JPA - Eclipse로 테이블에서 Jpa entity 자동 생성(generating entities from table)

Normal_One 2022. 10. 7. 22:21

  요 최근에는 거의 운동에 미쳐서 살고 있었습니다. 그 놈의 골격근 40kg이 뭐라고...

그러다 보니 출근하고 나서 헬스장 갔다가 집에 오면 운동 관련 유투브만 보는 루틴이 형성되고 말았습니다. 내가 개발자인지 운동 선수인지 오락가락 하다가 오랜만에 정신 차리고 본업을 해봅니다.

 

 요즘에는 기술들이 너무 범람하고 있는 것 같습니다. 최근에 백앤드 개발자 개발 공고를 보면 요구 사항에 MSA부터 시작해서 JPA, Spring boot, Kotlin, Docker, Kubernetes, Nodejs, GRPC... 등등 끝이 없는데, 가진 무기가 별로 없어서 회사에서 새로 프로젝트를 만드는 김에 JPA를 사용하기로 마음 먹었습니다.

 

 사실 JPA를 좋아하진 않는데(라고 쓰고 극혐이라고 생각하긴 하는데), 일단 SQL 튜닝하는 것을 좋아하기도 하고 JPA를 위해 데이터베이스 설계를 해야 된다는 게 좀 이해가 안 가기도 했습니다. 그런데 왜 JPA로 가느냐 하면 직접 해봐야 더 잘 깔 수 있기 때문입니다. 원래 비혼주의는 결혼을 해서 자기가 틀렸다는 걸 증명해야 되는 법입니다. 

 그래서 JPA를 본격적으로 시작하기에 앞서 개념 정도는 알고 있었기 때문에 Entity라는 것을 만들어야 된다는 것은 알고 있었습니다. Entity란 테이블과 연결하기 위해 테이블 명세를 그대로 적은 DTO(Data transfer object) 입니다. 근데 JPA도 나온지 꽤 되었으니 자동으로 만들어 주는게 있지 않을까 해서 찾아봤더니 이클립스에서 직접 데이터베이스를 연결해서 테이블들을 Entity로 만들어 준다고 하네요? 그래서 냉큼 해보았는데, 한 이틀 정도 삽질하고 나서 겨우 Java 파일로 떨굴 수 있었습니다. 아래 적는 과정들을 따라하시면 제가 한 삽질을 하지 않고 무사히 Entity를 만들 수 있을 겁니다. 

 

1) 일단 이클립스에서 새로운 프로젝트를 만들어야 합니다. 그런데 이 때 JPA 프로젝트가 없으신 버전을 가진 STS나 이클립스 이신 분들이 있으실 겁니다. 그런 분들은 계속 2번부터 쭉 보시면 되고, JPA 프로젝트가 있으신 분들은 3번으로 바로 가시면 됩니다. 근데 저는 되도록이면 여러분들이 새로운 이클립스를 받아서 하시길 추천 드립니다. 그 이유는 아래에 6번에 적혀 있습니다.

JPA 프로젝트 생성

2) JPA 프로젝트가 없다면 Help > Install New Software에서 Work with에 셀렉트 박스를 누르면 그 중에 Latest Eclipse Realease가 뜰 겁니다. 거기서 Database Development와 Web, XML, Java EE and OSCi Enterprise Development를 같이 설치해 줍니다. 여기서 설치가 잘 되시면 다행이고 만약에

'no repository found containing: osgi.bundle,org.eclipse.equinox.servletbridge.extensionbundle'

라는 에러가 뜨거나 설치가 실패한다면 Manage에 들어가서 Latest Eclipse Release의 주소 끝에 '/'가 없다면 '/'를 넣고 '/'가 있으면 '/'를 지우거나 아니면 http라면 https로 바꾸거나 하면 설치가 결국에는 될 겁니다.

 아니면 'Contact all update sites during install to find required software' 라는 옵션이 맨 밑에 있는데 이걸 해제하면 될 수도 있다네요? 근데 저는 위에 방법으로 해결했습니다. 

 

3) 이제 다시 JPA 프로젝트 생성으로 돌아와서 보면 JPA Facet라고 User Libaray를 생성하는 부분이 필요합니다. User Library 선택 후 Library같이 생긴 버튼을 누르면 2번 째 이미지 같은 화면이 뜰 겁니다. 대충 유저 라이브러리 이름을 정해서 생성한 후에

https://www.eclipse.org/eclipselink/#download

 위 링크로 가서 Eclipselink를 다운 받읍시다. Zip파일을 풀면 안에 jlib 폴더 안에 많은 Jar 파일들이 있는데 해당 Jar 파일들을 Add External Jars를 눌러서 모두 넣어줍니다. 그리고 나서 Finish를 누르면....

JPA 프로젝트 생성
유저 라이브러리 생성

 힝? 다 된줄 알았지? 라며 농락하듯이 'the class 'javax.persistence.convert' is required to be in the selected libraries.' 라는 에러가 뜨는데요. 

https://jar-download.com/artifacts/javax

그럼 또 위에 가서 javax 라이브러리를 받아와서 User library 안에 넣어줍니다. 

 

4) 그러고 나서 JPA implementation 밑에 보면 Connection이란 부분이 있는데, 여기가 Database 연결을 설정하는 부분입니다. Connection 설정한 적이 없다면 Add Connection을 누른 후 자신에게 맞는 DB를 고른 후 DB 연결 정보 및 자신의 DB에 맞는 JDBC 드라이버를 다운 받아서 드라이버까지 연결합니다. 

DB 커넥션 작업

 

5) 그럼 이제 프로젝트가 만들어 졌을텐데, 만들어진 프로젝트에 우클릭 후 JPA Tools에서 아래 것을 눌러줍니다. 눌러주면 연결 된 스키마가 가진 테이블이 모두 뜰텐데, 여기에 대한 PK, FK 설정을 한 후 Generate 하면 알아서 Java 파일이 만들어 집니다.

 

6) 그런데 여기서 불행하게도 persistence.xml에만 table 명이 생기고 java 파일이 안 생기는 분들이 계실텐데요, 저도 그랬습니다. 그래서 이클립스 로그를 보래서 로그도 뒤지고 막 찾아봤는데 로그에는 '!MESSAGE Error Generating Entities !STACK 0 java.lang.NoSuchMethodError:' 이런 로그만 떠서 찾아보니 해결 방법은 그냥 있던 거 말고 새로 이클립스 받아서 하라더군요..!

 더 이상 스트레스 받기 싫어서 이클립스 새로 받고 1 -> 3 -> 4 -> 5 순으로 하니 바로 만들어 졌습니다. 이런 젠장!

아무튼 이렇게 하면 알아서 Java 파일이 만들어 집니다. 이클립스 업데이트 하고 왜 Java 파일 안 만들어 지는지 알아보는데 한 이틀 걸릴 것 같네요. 여러분은 저 같은 삽질하지 마시길 바랍니다..!