🚨 Error :

Caused by: org.hibernate.DuplicateMappingException: The [jpabook.jpashop.Member] and [jpabook.jpashop.domain.Member] entities share the same JPA entity name: [Member] which is not allowed!
김영한 님의 강의를 듣는 도중에 스프링 부트 서버가 에러와 함께 실행이 되지 않았다. 에러 내용을 읽어보니 The [jpabook.jpashop.Member] and [jpabook.jpashop.domain.Member] entities share the same JPA entity name: [Member] which is not allowed!라고 나오는데 Member 클래스가 두 개로 인식되어 JPA의 엔티티 이름이 중복되기 때문에 빈을 생성할 수 없다는 에러였다.
🤓 원인 :

맞다. 강의에서는 jpashop 디렉터리에서 Member 클래스를 만들고 초반 테스트 및 설명 진행한 후 본격적으로 애플리케이션을 만드는 실습을 진행하는데 이때는 domain이라는 디렉터리를 만들고 그 안에 다른 Member 클래스를 만들어 실습을 진행한다. 나는 강의에서 진행한 내용을 그대로 따라 했고 그 과정에서 Member 클래스가 중복으로 생겨 충돌이 생긴 것이었다. 그런데 분명 나는 첫 번째로 만든 Member 클래스를 지웠었다. 디렉터리를 확인해 보니 jpashop 폴더에는 Member 클래스가 없었는데 out 폴더에는 과거에 기록이 그대로 남아 있었다. 아마 이것 때문에 JPA에서 충돌로 인식한 듯했다. 영속성 콘텍스트 안에 첫 번째로 만든 Member 클래스 관련 내용이 저장되어 있는 것처럼 보인다. 그래서 내가 시도한 방법은 인텔리제이와 Gradle의 캐시 및 히스토리를 전부 지우는 것이었다.

- 인텔리제이의 경우 위 사진과 같이 incalidate Caches에서 빌드 내역을 전부 지우고 다시 시작할 수 있다.

./gradle clean build
- Gradle의 경우에는 위 명령어로 빌드 내역을 초기화하여 재빌드를 진행할 수 있다.
- 그런데 둘 다 실패했다.
- 두 과정 모두 진행을 해도 out 폴더 내 Member는 두 개 그대로였다.
🚒 해결 :
이번에 알게 된 사실인데 out 폴더는 인텔리제이 빌드 시에 컴파일한 class를 저장하는 폴더이며, build 폴더는 gradle 빌드 시에 컴파일한 class를 저장하는 폴더라고 한다. 어쨌든 나는 둘 다 캐시 내역까지 전부 지웠는데 out 폴더가 그대로 남아있었다. 그래서 그냥 out 폴더를 지우고 다시 애플리케이션을 실행하니..

지웠던 Member 클래스 등 과거 내용이 전부 사라지고 최신 class로 변경되었다. 또 스프링 부트 서버도 정상적으로 작동되었다. out 폴더를 지우면 해결되는 간단한 문제였다.
🤔 의문점 :
인텔리제이든 Gradle이든 캐시 내역까지 빌드 내용을 아예 초기화해 버렸는데 왜 안 지워졌을까..?
참고