안녕하세요,
오늘 개발자분들과 테이블 컬럼명에 대해 얘기를 나눴는데, 어떻게 생각하시는지 의견 공유 부탁드립니다~
JPA와 MySQL 사용합니다!
A 그룹
DB 컬럼명은 _로 구분하고 엔티티 필드에 @Column을 명시해준다.
B 그룹
자바에 맞춰 camelCase로 DB 컬럼명을 맞추고, 엔티티 필드에 @Column을 생략한다.
질문해놓고 궁금한 점이 생겼습니다.
팀원분이 자바에 맞춰 컬럼명도 camelCase로 했다고 들었는데요,
확인해보니 객체에서 someName로 선언해도 테이블 컬럼은 some_name으로 매핑이 되는데 원래 그런지 버전이 올라가면서 바뀐건지 확인좀 해보겠습니다.
확인해보니 NamingStrategy라는게 있군요..ㅎㅎ
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
설정을 통해 저희 팀은 PhysicalNamingStrategy를 사용한다는 것을 알게되었습니다..(ㅎㅎ신입이라)
아무래도 성능상으로는 이게 더 좋을 것 같다는 생각이 드네요.
6개의 의견 from SLiPP
성능상으로도 그렇지만 컬럼명을 누가 사용하게 되느냐도 중요할 것 같네요.
데이터베이스를 직접 호출하는 업무만 처리하는 분이 따로 없다면,
개발자들의 편의에 맞춰 db 네이밍 컨벤션을 자바쪽에 맞추는 것도 좋을 것 같아요.
덕분에 좋은 옵션 알아갑니다:)
질문자분께 한가지 궁금한 게 있는데, 본문에서 언급하신 성능상 이득은 어떤 부분을 말씀하시는건가요...?
데이터베이스의 경우 개발자가 주도적으로 관리한다면 CamelCase 컨벤션에 따라 구현하는 것도 좋다고 생각해요. 그런데 dba가 주도해서 관리하고 운영한다면 db 컬럼 컨벤션에 따라 구현하는 것이 좋지 않을까요? 저는 CamelCase 컨벤션보다는 "_"로 구분하는 것이 더 좋지 않을까 생각해요.
@Colum 애노테이션의 경우 저는 추가 설정이 필요한 경우에는 쓰는 경향이 있는데요. name을 명시적으로 드러내는 것도 나쁘지는 않은 것 같아요.
어떤 컨벤션을 따르는 괜찮은데 팀 내에서 컨벤션 규칙을 만들고 이 규칙에 따라 일관성을 지키면서 구현하는 것이 더 중요하다고 생각해요.
@하드러너 이 부분은 제가 잘못 추론한 것 같습니다. 쿼리를 날릴 때마다 컬럼 이름을 매핑하는 것으로 착각했습니다. 디버거를 찍어보니 빈을 등록할 시점에 호출이 되는데요, 이름을 그냥 넘겨주니 아무래도 ImplicitNamingStrategyJpaCompliantImpl보다는 아주아주 미세하게나마 부팅 속도(성능x)가 낫지 않을까 싶습니다..하하
@자바지기 조언 감사합니다!~ 저도 개인적으로는 "_" 구분을 선호합니다. 말씀하신대로 어떤 규칙이든 정해진 컨벤션을 잘 따르는게 더 중요한 것 같습니다.
@띵챔 좋은 의견 감사합니다. 어느쪽이 더 좋다기보다는 누군가는 결정을 해야할 문제네요.
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.