잘못된 yml 설정 값으로 인한 Could not resolve placeholder "" Exception 해결 방법
사용자 지정 프로퍼티 값을 yml 파일에서 잘못 설정하여 어플리케이션 실행이 실패한 상황을 해결하는 방법입니다. 문제 상황은 다음과 같습니다.
네이버 밴드 소셜로그인을 구현하기 위해, 위와 같이 client ID 와 client secret, redirect Uri 라는 프로퍼티 값을 yml 에 구성하였습니다.
이 상태에서 어플리케이션을 실행했는데, 해당 프로퍼티 값을 @Value 로 가져오는 객체의 빈 생성이 실패하며 어플리케이션이 실행되지 않았습니다. 자세한 로그는 아래와 같습니다.
이 로그를 보고 yml 에서 값을 구성하는 방법이나 가져오는 방법이 잘못되었다는 것을 알 수 있었습니다. 이와 관련해서 여러 사례들을 찾아본 결과, Spring 프레임워크 자체에서 사용하는 설정 값(예 : datasource url, cache 구성 속성 등) 들과 사용자가 필요 하에 직접 구성한 설정 값(band.client-secret 과 같은) 은 yml 에서 다른 경로에 위치시켜야 한다는 것을 알게 되었습니다. Spring 에서 기본으로 제공하는 설정 값이 아닌 경우에는 yml 상에서 spring 하위가 아닌 외부에 위치시켜야 한다는 것이지요. Spring 의 기본 설정 값들은 SpringBoot 에서 자동 구성을 위해 미리 정의된 클래스에 바인딩해서 사용한다고 합니다. 기본 설정의 하나이기 때문에 대부분은 사용자가 읽어올 필요가 없이 Spring 내에서 취급하는 값들입니다.
그러나 Spring 과 관련이 없는 외부 설정 값들의 경우, 자동으로 읽어오지 않고 사용자가 @Value 등을 통해 읽어와야 합니다. 즉 읽어오는 방식이 다릅니다. 바로 이런 값들을 프로퍼티 파일 상에서 spring 하위가 아닌 외부에 위치시켜야 합니다.
프로퍼티 파일에서 값을 읽어오는 정확한 방식은 더 공부한 후에 내용을 추가하겠습니다.
하여 다음과 같이 yml 파일에서 사용자 지정 프로퍼티 값들을 spring 외부로 빼고 어플리케이션을 실행하니, 바로 문제가 해결되었습니다.
전에 했던 프로젝트들에서도 이미 다양한 프로퍼티 값을 구성한 경험이 있지만 이런 상황을 직접 마주한 적은 없었고, 이미 잘 작성된 프로퍼티 값에 대해 관심을 가지지 않았기 때문에 이러한 규칙이 있다는 것을 알지 못했다는 것을 반성하며 글을 마칩니다.