url:
naver: www.naver.com
depth:
google: www.google.com
yml 에 설정한 값들을 편리하게 사용할 수 있는 어노테이션입니다.
기존에 프로젝트에서 사용했던 방법은 2가지를 사용했습니다.
1. Enviroment 를 사용
2. 각각의 설정파일을 불러 객체로 만들어 사용
@ConfigurationProperties / @ConfigurationPropertiesBean 를 사용하게 되면 객체지향적으로 설정파일의 값을 사용할 수 있습니다.
application.yml 을 간단히 설정했습니다.
naver 처럼 첫 줄에 값을 설정할 수도 있지만, google 처럼 두번째 depth 로 사용하는 경우도 많습니다.
url:
naver: www.naver.com
depth:
google: www.google.com
@ConfigurationProperties 의 어노테이션을 사용해서 클래스를 만들어줍니다.
하나의 클래스를 만들어서, url 로 시작되는 값을 모두 객체로 만들어 사용할 수 있습니다.
주의해야 할점은, naver 처럼 url.naver 가 아닌 url.depth.google 로 가져와야하는 값들은 따로 클래스를 만들어야 합니다.
이너 클래스로 만들어도되고, 따로 클래스를 작성해도 상관없습니다.
@Data
@Component
@ConfigurationProperties(prefix = "url")
public class ConfigurationPropertiesTest {
private String naver;
private Depth depth;
@Data
public static class Depth {
private String google;
}
}
적용되었는지 테스트하기 위해 컨트롤러 API 로 테스트해보겠습니다.
@RestController
@RequiredArgsConstructor
@Slf4j
public class HelloController {
private final ConfigurationPropertiesTest configurationPropertiesTest;
@GetMapping("/naver")
public String naver() {
return configurationPropertiesTest.getNaver();
}
@GetMapping("/google")
public String google() {
return configurationPropertiesTest.getDepth().getGoogle();
}
}
http://localhost:7777/naver 테스트
http://localhost:7777/google 테스트
위와 같이 정상적으로 값을 읽어와 사용할 수 있는 것을 확인할 수 있습니다.
저는 설정 값이 많지 않을 경우에는 굳이 사용해야 하나? 라고 생각했고, 지금까지 환경변수의 값을 가져와 사용하는데 아무 생각없이 중복된 코드를 작성하고 있었습니다.
실무, 특히 MSA 환경에서는 서로 콜을 해야하는 경우가 많고 값을 yml 이나 properties 에 등록해 사용하는 경우가 많습니다.
이에 처음에 번거롭더라도 클래스를 만들어 객체로 사용하게 되면 객체지향적으로 사용할 수 있을 것 같습니다.
물론, 설정파일의 값을 설정할 때 이름을 더욱 신경써서 지어주어야 헷갈리지 않을 것 같습니다.
'Spring > Spring-detail' 카테고리의 다른 글
@Transactional 안에 @Transactional 테스트 (0) | 2024.03.04 |
---|---|
@Conditional 을 이용해 특정 조건일 때만 사용 (0) | 2024.02.22 |
JAVA 싱글톤, Spring 싱글톤에 대해. (0) | 2023.03.23 |
Jar 파일에 대해 (0) | 2023.03.01 |
RestTemplate의 개념과 기본 사용법 (0) | 2023.02.26 |
댓글