전체 글
-
액츄에이터와 액츄에이터 엔드포인트스프링/스프링부트 2023. 10. 1. 13:16
개발이 끝나고 운영 단계에서 실시간 모니터링을 하는 것은 매우 중요한 일이다. 스프링 부트가 제공하는 액츄에이터는 프로덕션 준비 기능을 매우 편리하게 사용할 수 있는 기능들을 제공한다. 또한 마이크로미터, 프로메테우스, 그라파나 같은 최근 유행하는 모니터링 시스템과 매우 쉽게 연동할 수 있는 기능도 제공한다. implementation 'org.springframework.boot:spring-boot-starter-actuator' //actuator 추가 build.gradle에서 액츄에이터를 위와 같이 추가할 수 있다. application.yml management: endpoints: web: exposure: include: "*" appication.yml에 다음과 같이 "*"을 입력하면 a..
-
@Profile스프링/스프링부트 2023. 9. 30. 22:10
프로필과 외부 설정을 사용해서 각 환경마다 설정값을 다르게 적용하는데, 설정값이 다른 정도가 아니라 각 환경마다 서로 다른 빈을 적용해야하는 상황이 있을 때도 있다. 로컬 개발에서는 로직이 수행되지만 결제가 되지 않고, 운영 환경에서는 실제 결제까지 되는 기능을 예제로 작성할 것이다. PayClient 인터페이스 public interface PayClient { void pay(int money); } LocalPayClient.class - 로컬 환경 @Slf4j public class LocalPayClient implements PayClient{ @Override public void pay(int money) { log.info("로컬 결제 money={}", money); // 실제 결제 x..
-
YAML스프링/스프링부트 2023. 9. 30. 21:52
스프링은 설정 데이터를 사용할 때 application.properties 뿐만 아니라 application.yml 이라는 형식도 지원한다. 사람이 읽기 좋은 형식으로 이루어진 파일이다. yml 파일 예시 my: datasource: url: local.db.com username: local_user password: local_pw etc: max-connection: 1 timeout: 60s options: LOCAL, CACHE application.yml인데 한 눈에 파악하기 쉽기 때문에 yml을 자주 사용한다고 한다. application.properties , application.yml 을 같이 사용하면 application.properties가 우선권을 가진다. 둘 다 같이 사용하는건 ..
-
@ConfigurationProperties - 외부 설정 사용스프링/스프링부트 2023. 9. 30. 21:45
application.properties my.datasource.url=local.db.com my.datasource.username=username my.datasource.password=password my.datasource.etc.max-connection=1 my.datasource.etc.timeout=3500ms my.datasource.etc.options=CACHE,ADMIN my.datasource까지 중복된 것이기 때문에 객체로 관리하면 더 편할 것이다. MyDataSourcePropertiesV1.class @Getter @ConfigurationProperties("my.datasource") public class MyDataSourceProperties { private ..
-
@Value - 외부 설정 사용스프링/스프링부트 2023. 9. 30. 21:05
스프링이 지원하는 외부 설정 조회 방법들 Environment @Value - 값 주입 @ConfigurationProperties - 타입 안전한 설정 속성 이전 포스팅에서 외부 설정을 공부하면서 사용한 Environment에는 약간의 단점이 있다. Environment 를 직접 주입받고, env.getProperty(key) 를 통해서 값을 꺼내는 과정을 반복해야 한다는 점이다. 따라서 스프링은 @Value를 통해서 외부 설정값을 주입받는 편리한 기능을 제공해준다. @Slf4j @Configuration public class MyDataSourceValueConfig { @Value("${my.datasource.url}") private String url; @Value("${my.datasour..
-
외부 설정의 우선순위스프링/스프링부트 2023. 9. 30. 16:42
1. 설정 데이터의 우선순위 application.properties spring.config.activate.on-profile=dev url=dev.db.com username=dev_user password=dev_pw #--- spring.config.activate.on-profile=prod url=prod.db.com username=prod_user password=prod_pw 위와 같은 상황에서 프로필을 설정하지 않으면 default라는 기본 프로필이 적용된다. 위의 2개의 문서는 둘 다 활성화가 되지 않으며 url, username, password를 출력해보면 다 null로 뜨게 된다. 기본값 내 PC에서 개발하는 로컬 개발 환경에서 프로필을 항상 지정하는 것은 번거롭다. url=l..
-
외부 설정 4 - 설정 데이터스프링/스프링부트 2023. 9. 30. 16:22
지금까지 학습한 OS 환경 변수, 자바 시스템 속성, 커맨드 라인 옵션 인수는 사용해야 하는 값이 늘어날 수록 사용하기가 불편해진다. 실무에서는 수많은 설정값을 사용하기도 하므로 이런 값들을 프로그램을 실행할 때 마다 입력하게 되면 번거롭고 관리도 어렵다. 대안으로 설정값을 파일에 넣어서 관리한 다음에 애플리케이션 로딩 시점에 파일을 읽는 방법이 있다. 1. 외부 파일 application.properties를 각각의 소스코드에 위치시키는 것이 아니라 외부 설정 파일로 각각 서버에 두는 것이다. 빌드 후에 빌드 파일이 있는 경로에 가서 application.properties라는 파일을 만들어준다. url=dev.db.com username=dev_user password=dev_pw 파일에 위의 내용을..
-
외부 설정 - 스프링 통합스프링/스프링부트 2023. 9. 30. 15:40
지금까지 포스팅했던 외부 설정들(OS 환경변수, 자바 시스템 속성, 커맨드 라인 옵션 인수)은 모두 외부 설정을 key=value 형식으로 사용한다. 그런데 어디에 있는 외부 설정값을 읽어야 하는지에 따라서 각각 읽는 방법이 다르다는 단점이 존재한다. 예를 들어 OS 환경변수에 두면 System.getenv(key)를 사용해야 하며 자바 시스템 속성을 사용하면 System.getProperty(key)를 사용해야 한다는 것이다. 만약에 외부 설정 정책이 변경되면 해당 코드들을 전부 변경해야 한다. OS 환경변수로 설정을 하다가 자바 시스템 속성으로 정책이 변경된다면 System.getenv(key)를 전부 System.getProperty(key)로 변경하는 등 많은 변경이 필요하다. 외부 설정값이 어디..