1. 개요
Google OAuth2 를 설정하던 중 application.yml 에 필요한 속성들을 정의하고 이를 Properties 클래스로 불러와야 할 필요가 있었습니다.
application.yml
oauth:
google:
client-id:
client-secret:
redirect-uri:
token-uri:
resource-uri:
Java
복사
GoogleProperties.java
@Getter
@Setter
@ConfigurationProperties(prefix = "oauth.google")
public class GoogleProperties {
private String clientId;
private String clientSecret;
private String redirectUri;
private String tokenUri;
private String resourceUri;
}
Java
복사
그러던 도중 properties 클래스에 매핑되려면 변수 이름이 같아야 하는게 아닌가? 하는 의문이 들었습니다.
2. 결론
결론부터 말하면 클래스 정의에서 필드 이름은 하이픈(-)을 사용하는 application.yml의 속성 이름과 다를 수 있습니다. 자바에서는 변수명에 하이픈을 사용할 수 없으므로, 스프링은 자동으로 하이픈을 제거하고 카멜 케이스로 변환하여 매핑합니다.
예를 들어, client-id 속성은 clientId 필드에 매핑됩니다.
따라서, application.yml의 속성 이름과 GoogleProperties 클래스의 필드 이름을 하이폰과 카멜 케이스로 설정해 놓는다면 스프링 부트가 자동으로 properties 속성을 해당 필드에 바인딩할 수 있습니다.