개발일지/2023_한이음

[aws] rds(mysql) - 테이블명, 컬럼명 리팩토링

기억지기 개발자 2023. 9. 2. 19:24

🏕️상황 

  • rds에서 테이블들을 확인해 보니 똑같은 테이블이 2개씩 대소문자만 살짝씩 바뀌어서 생겨있었다.
  • 원인이 정확하게 뭔지는 모르지만 일단 확실한 건 rds(mysql)에서 테이블 명이든, 칼럼명이든 모든 소문자로만 저장한다는 것이다.
  • 이 상태로 둘 순 없으니 그냥 스키마를 다 날리고 새로 만들었다. (안에는 더미 데이터만 있는 상태)

왼 : rds 화면,     오 : school entity 화면

  • 오른쪽 entity를 정의했고, @Column을 따로 지정하지 않았으니 해당 속성 명으로 db에도 생성되어야 하는데 
    rds에서 확인해 보니 맘대로 언더스코어를 붙이고, 모두 소문자로 바뀌어있었다.
  • ⭐알아보니 로컬 Mysql 서버와 amazon rds mysql은 대소문자의 민감도가 달라서 내가 로컬에서 db를 활용했을 때 문제가 되지 않았던 부분이 rds에서는 문제가 되었던 거 같다.

 


🗝️해결

지금 현재 있는 11개의 테이블 모두에 @Column(name=)을 작성하여 정확하게 코드 상에 있는 필드들과 db에 있는 필드들이 정확하게 매칭되도록 하였다. 

원래 그냥 넘어갈까 했는데 프로젝트 상에 있는 entity 클래스와 db에 있는 필드명이 다른 채로 내버려 두면 나중에 매핑이 안 되어 데이터 crud가 안 되는 문제를 미연에 방지하기 번거롭지만 지금에라도 잡고 가는 것이 나중에 덜 번거로울 거 같았다.

 

 


💚로컬 Mysql 서버와 amazon rds mysql의 대/소문자 민감도

로컬 MySQL 서버

로컬 MySQL 서버는 일반적으로 운영체제 설정에 따라 대소문자 민감도를 처리한다.

Windows 운영체제에서는 대소문자를 구분하지 않고 저장하고 검색할 수 있지만, Linux 또는 macOS와 같은 유닉스 기반 운영체제에서는 대소문자를 구분한다. 그러므로 로컬 MySQL 서버의 대소문자 민감도는 운영체제에 따라 다를 수 있다.

(나의 경우에 windows를 사용하고 있었기에 큰 제약이 없었다.)

 

Amazon RDS MySQL

Amazon RDS에서 실행되는 MySQL 서버는 보통 Linux 기반으로 설정된다.

따라서 RDS MySQL은 대소문자를 구분하고, 이것은 MySQL 설정에서도 조정 가능하지만, 일반적으로는 구분된다.

 

https://grogrammer.tistory.com/89

🔜 이러한 상황에 의해 엄청난 오류를 맞은 사례이다.