JPA 사용할 때 테이블 컬럼 이름

2018-11-07 11:26

안녕하세요,

오늘 개발자분들과 테이블 컬럼명에 대해 얘기를 나눴는데, 어떻게 생각하시는지 의견 공유 부탁드립니다~

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

2018-11-07 17:23

성능상으로도 그렇지만 컬럼명을 누가 사용하게 되느냐도 중요할 것 같네요.

데이터베이스를 직접 호출하는 업무만 처리하는 분이 따로 없다면,

개발자들의 편의에 맞춰 db 네이밍 컨벤션을 자바쪽에 맞추는 것도 좋을 것 같아요.

2018-11-09 01:09

덕분에 좋은 옵션 알아갑니다:)

질문자분께 한가지 궁금한 게 있는데, 본문에서 언급하신 성능상 이득은 어떤 부분을 말씀하시는건가요...?

아무래도 성능상으로는 이게 더 좋을 것 같다는 생각이 드네요.

2018-11-11 11:55

데이터베이스의 경우 개발자가 주도적으로 관리한다면 CamelCase 컨벤션에 따라 구현하는 것도 좋다고 생각해요. 그런데 dba가 주도해서 관리하고 운영한다면 db 컬럼 컨벤션에 따라 구현하는 것이 좋지 않을까요? 저는 CamelCase 컨벤션보다는 "_"로 구분하는 것이 더 좋지 않을까 생각해요.

@Colum 애노테이션의 경우 저는 추가 설정이 필요한 경우에는 쓰는 경향이 있는데요. name을 명시적으로 드러내는 것도 나쁘지는 않은 것 같아요.

어떤 컨벤션을 따르는 괜찮은데 팀 내에서 컨벤션 규칙을 만들고 이 규칙에 따라 일관성을 지키면서 구현하는 것이 더 중요하다고 생각해요.

2018-11-11 17:34

@하드러너 이 부분은 제가 잘못 추론한 것 같습니다. 쿼리를 날릴 때마다 컬럼 이름을 매핑하는 것으로 착각했습니다. 디버거를 찍어보니 빈을 등록할 시점에 호출이 되는데요, 이름을 그냥 넘겨주니 아무래도 ImplicitNamingStrategyJpaCompliantImpl보다는 아주아주 미세하게나마 부팅 속도(성능x)가 낫지 않을까 싶습니다..하하

2018-11-11 17:35

@자바지기 조언 감사합니다!~ 저도 개인적으로는 "_" 구분을 선호합니다. 말씀하신대로 어떤 규칙이든 정해진 컨벤션을 잘 따르는게 더 중요한 것 같습니다.

의견 추가하기