inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링부트를 이용한 웹 프로그래밍: 웹사이트 이렇게 만드는 거예요!

멤버 서비스 CRUD에 JPA 적용하기 - II : EntityManager 만들기

데이터베이스 테이블이 중복 생성 되는 오류

122

huihui

작성한 질문수 2

0

영상 52분에서 로그인이 성공되는 반면 저는 로그인이 계속 실패나와서 무엇이 문제인지 확인하는데 데이터베이스 테이블이 두 개가 생성된 것을 확인했습니다.

image.png

기존에 있던 테이블은 USER_MEMBER 인데, Entity 객체를 만들고 나서 user_member 테이블이 생성되었고 애플리케이션 실행 후 다시 가입을 하면 user_member 데이터베이스에 저장되며 기존 기능들은 에러 없이 정상 작동이 됩니다.. 궁금한 것은 데이터베이스 테이블이 저렇게 두 개 생성된건데 제가 무엇을 잘못해서 만들어졌는지 또 이대로 사용하는데 문제는 없는지 궁금합니다..

코드는 선생님 코드랑 다른 부분이 없습니다 ㅠ

rest-api spring-boot jpa spring-security mybatis

답변 3

0

huihui

감사합니다 해결 했습니다.
제 환경이 윈도우 환경이지만 도커를 사용하고 도커 위에 mysql 컨테이너를 올려서 사용하고 있습니다. 강사님께서 말씀해주신것처럼 도커를 사용하니 설정값이 0으로 나오더군요..

이미 올라간 컨테이너 에서는 변경이 불가능해서 백업 받고 새로운 컨테이너 등록할때 lower_case_table_names 값 설정을 해주니 이제는 테이블이 한개만 나옵니다 !! 감사합니다!

0

블스

changhui님 안녕하세요,

지방 출장 일정으로 답변이 다소 늦어진 점 양해 부탁드립니다.

 

말씀해주신 상황을 보면 USER_MEMBER와 user_member 두 개의 테이블이 생성된 이유는 MySQL의 테이블 이름 대소문자 구분 설정과 관련이 있을 가능성이 높습니다.

MySQL에서 테이블 이름의 대소문자 구분 여부는 운영체제(OS)에 따라 다르며, 또한 MySQL 자체 설정 값에도 영향을 받습니다.

 

Windows는 기본적으로 대소문자를 구분하지 않지만, Linux는 기본적으로 대소문자를 구분합니다.

또한 MySQL 설정 값 중 lower_case_table_names의 값에 따라 테이블 이름 처리 방식이 결정되는데요, 해당 설정은 아래 쿼리로 확인할 수 있습니다.

SHOW VARIABLES LIKE 'lower_case_table_names';

결괏값(value)으로

'0'이면 대소문자를 구분합니다.(Linux, 일부 Mac)

'1'이면 테이블 이름을 소문자로 통일해서 처리합니다.(Windows)

'2'이면 저장은 원래 이름으로 하되, 비교는 소문자로 합니다.(일부 Mac)

 

changhui님께서 Windows를 사용하고 계시다면 lower_case_table_names 값이 '1'일 가능성이 높고, Mac을 사용 중이시라면 '0'일 가능성이 높습니다.

현재 USER_MEMBER와 user_member 테이블이 동시에 존재하고, 로그인 기능이 특정 테이블에만 연결되어 있다면, 설정이나 Entity 매핑에서 일관성이 필요한 상황으로 보입니다.

운영체제와 MySQL 설정을 먼저 확인하신 뒤, 실습 환경에 맞게 테이블 매핑을 정리하시면 정상적으로 동작할 수 있을 거예요.

 

항상 성실하게 실습에 임해주셔서 감사합니다.

앞으로도 차근차근 실력을 쌓아가시길 진심으로 응원합니다!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

changhui님이 겪고 계신 문제는 엔티티의 테이블 이름 설정과 관련이 있을 수 있습니다. USER_MEMBERuser_member 두 개의 테이블이 생성된 이유는 대소문자 구분 문제일 가능성이 큽니다. 이는 데이터베이스 설정이나 JPA 설정에서 테이블 이름을 대소문자를 어떻게 처리하는지에 따라서 다르게 나타날 수 있습니다.

  1. 테이블 이름 대소문자 문제:

    • JPA의 엔티티 클래스에서 @Table 애너테이션을 사용하여 테이블 이름을 지정할 때, 대소문자를 명확하게 설정해야 합니다.
    • 예를 들어, @Table(name = "USER_MEMBER")라고 지정해보세요. 그러면 해당 이름으로 통일될 것입니다.
  2. JPA 스키마 설정 확인:

    • spring.jpa.hibernate.ddl-auto 설정을 통해 DDL 생성 방식을 설정할 수 있습니다 (none, validate, update, create, create-drop).
    • 이 설정이 update로 되어 있다면 존재하지 않는 테이블이 새로 생성될 수 있습니다. 따라서 설정을 확인해 보세요.
  3. 문제 해결 방법:

    • 기존의 엔티티 매핑 클래스에서 @Table(name = "USER_MEMBER")와 같은 방식으로 선언이 되어 있는지 확인합니다.
    • 데이터베이스와 JPA 설정을 확인하여 대소문자 구분이 어떻게 처리되고 있는지 점검하세요.

두 개의 테이블을 사용하는 것은 혼란을 유발할 수 있으니, 명확하게 대소문자를 지정하여 하나의 테이블로 통일하시길 추천드립니다. 데이터의 무결성을 보장하기 위해 잘 확인하시고, 필요하면 데이터베이스 관리자를 통해 테이블을 직접 확인하고 정리해보세요.

추가로, 코드 실행 전 데이터베이스의 상태를 확인하고 원하는 방향으로 테이블을 통일하는 것이 오류를 방지하는 데 도움이 됩니다.

이미지 출처: Inflearn Image
Spring Boot 문서 참고: Spring 초기화를 참고해주세요

문제가 해결되시기를 바랍니다! 😊

패키지 구분에 대해 궁금한게 있습니다

0

8

1

스프링부트 서버 에러나요

0

17

1

2026.04에 추가된 강의 시청 불가

0

27

1

Service Create/Update Record 운용과 Delete Record 미운용의 차이 질문

0

18

1

인가 코드 발급(프론트 vs 백)

0

28

2

인텔리제이 MCP 서버 설정 관련

0

26

1

Sequence 관련 질문

1

32

2

Dto와 Entity 사용 관련 질문

0

31

2

application.properties 작성 관련 질문

0

45

2

IDE를 Eclipse로 설지해서 수업을 진행해도 되나요

0

69

2

일정 삭제 시 예외 발생 질문과 이전 질문에 대한 추가질문드립니다.

0

78

2

일정 등록 및 조회 부분 강의 질문입니다.

0

75

2

JWT 기반 인증

1

77

2

properties 파일 질문입니다

0

71

1

인터셉터

0

89

2

DTO 관련

0

97

2

추가 강의 해주실수 있나요?

0

107

1

mysql 설치파일

0

81

2

dto 타입

0

75

1

로그인 후 (인증완료) /member/modify 접근불가

0

89

2

메일 보내는 메서드에서

0

74

1

인터셉터 질문

0

106

2

AOP에 대한 설명

0

183

2

코드

0

154

1