발생한 문제
Error creating bean with name 'entityManagerFactory' defined in class path resource ...
- AWS에 배포를 하던 중 에러가 발생했다.
- 배포 파일 빌드 후에 Filezilla로 배포 파일을 업로드하고 스프링부트를 동작시키던 중 에러 발생!
- 에러 메시지를 보면 데이터베이스 연결에 실패한 거 같다.
해결 과정
- 'entityManagerFactory' defined 이슈는 properties 설정 파일에서 DB 정보 설정이 잘못되어서 발생하기도 하는데 로컬에서는 문제없이 동작하기 때문에 DB 정보 설정의 문제는 아니다.
- 현재 도커에 설치한 mysql과 연결한 상태인데 로컬에서는 문제가 없지만 우분투 서버에서 연결이 안된다면 도커와 우분투 서버 사이의 문제가 있는 거 같다. 외부 접속 관련 문제가 아닐까?
1. 에러메시지 그대로 구글링
- Error creating bean with name 'entityManagerFactory' defined
Javassist
- 아래 Javassist 를 build.gradle에 추가
implementation group: 'org.javassist', name: 'javassist', version: '3.29.0-GA'
- Javassist makes Java bytecode manipulation simple. It is a class library for editing bytecodes in Java.
- 자바 바이트코드 라이브러리
- 자바 바이트코드를 자세히 알지 못해도 해당 라이브러리를 사용하면 개발자가 바이트코드 시퀀스를 작성하지 않고도 클래스 파일을 수정할 수 있다.
- 어떻게 몇몇 블로거들은 저 라이브러리를 추가하고 해결된지는 모르겠지만 나의 경우에 에러는 그대로다. 도커 환경 문제가 분명하다.
2. 추가적인 셋팅이 필요함을 알게됨
- EC2 인스턴스에 도커를 설치해야 한다.
- sudo apt-get install docker
- 인스턴스에 설치된 도커에 MySql 설치후 도커 컨테이너를 생성한다.
- mysql 권한 설정
해결
- 도커 환경에서도 배포를 할 수도 있었겠지만 한정된 시간이기 때문에 AWS RDS DB 인스턴스로 연결하면 오늘 목표였던 배포를 완료할 수 있을 거라고 생각했다. AWS RDS DB를 한번도 사용해본 적이 없어서 궁금하기도 했다. 그래서 RDS DB 인스턴스를 만들어서 연결하고 해당 문제를 해결했다.
회고
- 도커를 잘 다루고 싶다.
- 배포하는 과정이 익숙하지는 않다. 근데 배포 후에 IP 주소로 연결되는 게 참 신기하다. 다양한 방법으로 배포를 여러 번 경험해보고 싶다. 그리고 CI/CD에 대해서도 공부를 하고 프로젝트에 적용해보고 싶다.