분류 전체보기 1341

Ch06. 외부설정과 프로필(2) - 외부 설정 사용(@ConfigurationProperties 생성자)

@ConfigurationProperties는 Getter, Setter를 사용하는 자바빈 프로퍼티 방식이 아니라 생성자를 통해서 객체를 만드는 기능도 지원한다. 다음 코드를 통해서 확인해 보자.. MyDataSourcePropertiesV2 @Getter @ConfigurationProperties("my.datasource") public class MyDataSourcePropertiesV2 { private String url; private String username; private String password; private Etc etc; //@ConstructorBinding //생성자가 하나일 경우에는 생략 가능하다 public MyDataSourcePropertiesV2(String ..

Ch06. 외부설정과 프로필(2) - 외부 설정 사용(@ConfigurationProperties 시작)

Type-safe Configuration Properties 스프링은 외부 설정의 묶음 정보를 객체로 변환하는 기능을 제공한다. 이것을 타입 안전한 설정 속성이라 한다. 객체를 사용하면 타입을 사용할 수 있다. 따라서 실수로 잘못된 타입이 들어오는 문제도 방지할 수 있고, 객체를 통해서 활용할 수 있는 부분들이 많아진다. 쉽게 이야기해서 외부 설정을 자바 코드로 관리할 수 있는 것이다. 그리고 설정 정보 그 자체도 타입을 가지게 된다. MyDataSourcePropertiesV1 @Data @ConfigurationProperties("my.datasource") public class MyDataSourcePropertiesV1 { private String url; private String use..

Ch06. 외부설정과 프로필(2) - 외부 설정 사용(@Value)

@Value를 사용하면 외부 설정값을 편리하게 주입받을 수 있다. 참고로 @Value 도 내부에서는 Environment를 사용한다. MyDataSourceValueConfig @Slf4j @Configuration public class MyDataSourceValueConfig { @Value("${my.datasource.url}") private String url; @Value("${my.datasource.username}") private String username; @Value("${my.datasource.password}") private String password; @Value("${my.datasource.etc.max-connection}") private int maxConn..

Ch06. 외부설정과 프로필(2) - 외부 설정 사용(Environment)

프로젝트 생성 build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.0.2' id 'io.spring.dependency-management' version '1.1.0' } group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter' compileOnl..

Ch05. 외부설정과 프로필(1) - 우선순위(전체)

외부 설정에 대한 우선순위 - 스프링 공식 문서 https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config Core Features Spring Boot lets you externalize your configuration so that you can work with the same application code in different environments. You can use a variety of external configuration sources including Java properties files, YAML files, environment variables, ..

Ch05. 외부설정과 프로필(1) - 우선순위(설정 데이터)

application.properties url=local.db.com username=local_user password=local_pw 만약 프로필을 적용하지 않는다면 어떻게 될까?(--spring.profiles.active=dev 이런 옵션을 지정하지 않는다) 프로필을 적용하지 않고 실행하면 해당하는 프로필이 없으므로 키를 각각 조회하면 값은 null 이 된다. 활성 프로필이 없어서 default 라는 이름의 프로필이 활성화 되는 것을 확인할 수 있다. 기본값 내 PC에서 개발하는 것을 보통 로컬( local ) 개발 환경이라 한다. 이때도 항상 프로필을 지정하면서 실행하는 것은 상당히 피곤할 것이다. 설정 데이터에는 기본값을 지정할 수 있는데, 프로필 지정과 무관하게 이 값은 항상 사용된다. a..

Ch05. 외부설정과 프로필(1) - 설정 데이터(내부 파일 합체)

설정 파일을 각각 분리해서 관리하면 한눈에 전체가 들어오지 않는 단점이 있다. 스프링은 이런 단점을 보완하기 위해 물리적인 하나의 파일 안에서 논리적으로 영역을 구분하는 방법을 제공한다. 기존에는 dev 환경은 application-dev.properties , prod 환경은 prod.properties 파일이 필요했다. 스프링은 하나의 application.properties 파일 안에서 논리적으로 영역을 구분하는 방법을 제공한다. application.properties 라는 하나의 파일 안에서 논리적으로 영역을 나눌 수 있다. application.properties 구분 방법 #--- 또는 !--- (dash 3) application.yml 구분 방법 --- (dash 3) 그림의 오른쪽 ap..

Ch05. 외부설정과 프로필(1) - 설정 데이터(내부 파일 분리)

설정 파일을 외부에 관리하는 것은 상당히 번거로운 일이다. 설정을 변경할 때마다 서버에 들어가서 각각의 변경 사항을 수정해두어야 한다.(물론 이것을 자동화 하기 위해 노력할 수는 있다) 이 문제를 해결하는 간단한 방법은 설정 파일을 프로젝트 내부에 포함해서 관리하는 것이다. 그리고 빌드 시점에 함께 빌드되게 하는 것이다. 이렇게 하면 애플리케이션을 배포할 때 설정 파일의 변경 사항도 함께 배포할 수 있다. 쉽게 이야기해서 jar 하나로 설정 데이터까지 포함해서 관리하는 것이다. 실행 시점에 내부 설정 파일 조회 프로젝트 안에 소스 코드 뿐만 아니라 각 환경에 필요한 설정 데이터도 함께 포함해서 관리한다. 개발용 설정 파일: application-dev.properties 운영용 설정 파일: applica..

Ch05. 외부설정과 프로필(1) - 설정 데이터(외부 파일)

지금까지 학습한 OS 환경 변수, 자바 시스템 속성, 커맨드 라인 옵션 인수는 사용해야 하는 값이 늘어날 수 록 사용하기가 불편해진다. 실무에서는 수십 개의 설정값을 사용하기도 하므로 이런 값들을 프로그램을 실행할 때마다 입력하게 되면 번거롭고, 관리도 어렵다. 그래서 등장하는 대안으로는 설정값을 파일에 넣어서 관리하는 방법이다. 그리고 애플리케이션 로딩 시점에 해당 파일을 읽어들이면 된다. 그 중에서도 .properties 라는 파일은 key=value 형식을 사용해서 설정값을 관리하기에 아주 적합하다. 실행 시점에 외부 설정 파일 조회 application.properties 개발,운영 서버에 있는 외부 파일이다 모두 이름은 같지만 내용이 다르다 개발 서버 url=dev.db.com username=..

Ch05. 외부설정과 프로필(1) - 외부 설정(자바 시스템 속성)

지금까지 살펴본, 커맨드 라인 옵션 인수, 자바 시스템 속성, OS 환경변수는 모두 외부 설정을 key=value 형식으로 사용할 수 있는 방법이다. 그런데 이 외부 설정값을 읽어서 사용하는 개발자 입장에서 단순하게 생각해 보면, 모두 key=value 형식이고, 설정값을 외부로 뽑아둔 것이다. 그런데 어디에 있는 외부 설정값을 읽어야 하는지에 따라서 각각 읽는 방법이 다르다는 단점이 있다. 예를 들어서 OS 환경 변수에 두면 System.getenv(key)를 사용해야 하고, 자바 시스템 속성을 사용하면 System.getProperty(key)를 사용해야 한다. 만약 OS에 환경 변수를 두었는데, 이후에 정책이 변경되어서 자바 시스템 속성에 환경 변수를 두기로 했다고 가정해 보자. 그러면 해당 코드들..