전체 보기
🍀

헝가리안 표기법과 Spring Data JPA, 파스칼 표기법과 Jackson

작성일자
2023/12/26
태그
DIARY_DEVELOP
프로젝트
FIS
책 종류
1 more property

헝가리안 표기법과 Spring Data JPA

a_latitude 와 같이 agent의 위도를 latitude라 일컫지 않고 앞에 agent의 약자를 붙이는 방식을 헝가리안 표기법이라 한다.
레거시 코드엔 헝가리안 표기법이 사용된 코드가 많았다.
이 헝가리안 표기법이 spring data jpa를 적용하며 문제를 일으켜서 카멜 표기법으로 전부 바꿔줬다.
어떤 문제냐 하면, application run failed가 떠버린다.
아래 긴 로그가 있지만, 이 문제의 핵심 원인은 Spring Data JPA가 a_latitude로 읽는 게 아니라, a까지만 읽어버리는 것이다.
그리고선 a라는 타입은 없어서 쿼리를 만들 수 없다고 말한다.
Failed to create query for method public abstract java.util.List fis.iluvit.admin.domain.agent.repository.AgentRepository.findAgentByA_latitude(java.lang.Double); No property 'a' found for type 'Agent'; Did you mean 'id’
긴 로그
도메인에서 해당 필드명을 a_latitude가 아니라, latitude로 바꿔주니 말끔히 해결되었다. (Spring data JPA는 _를 기준으로 문맥을 나눠 이해함)
스네이크 표기법 역시 동일한 문제를 일으킬 것이다.
그동안 자바에서 너무 당연하게 사용하던 카멜 표기법을 써야 하는 이유를 알 수 있어서 좋았다.
참고

dto 필드명의 파스칼 표기법은 무시된다

Jackson 라이브러리는 Json 키 값으로 getter 이름을 사용하기 때문에, LoginId가 아닌 loginId로 스펙이 만들어진다. 즉, 코드 상의 dto 필드명이 PaskalCase인 건 의미가 없기에 실제 스펙과 동일하게 camelCase로 사용하자
레거시 dto 코드
public class LoginRequestDto { private String LoginId; private String Password; }
Java
복사
이 코드의 문제점은 실제 api 스펙 상으론 { loginId, password } 로 동작하는데에 반해, 코드 상에선 { LoginId, Password }로 표현되어 있단 점이다. docs를 뽑을 때나 코드를 이해할 때 혼돈을 줄 수 있다.
리팩토링한 dto 코드
public class LoginRequestDto { private String loginId; private String password; }
Java
복사