You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
필수 값이 된다.@min(1) @max(999) maxConnection: 최소1, 최대999의 값을 허용한다.
@DurationMin(seconds = 1) @DurationMax(seconds = 60) : 최소 1, 최대 60초를 허용한
다.
jakarta.validation.constraints.Max패키지 이름에 jakarta.validation으로 시작하는 것은 자바 표준 검증기에서 지원하는 기능이다.
org.hibernate.validator.constraints.time.DurationMax패키지 이름에org.hibernate.validator로 시작하는 것은 자바 표준 검증기에서 아직 표준화 된 기능은 아니고, 하이버네이트 검증기라는 표준 검증기의 구현체에서 직접 제공하는 기능이다. 대부분 하이버네이트 검증기를 사용
하므로 이 부분이 크게 문제가 되지는 않는다.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
섹션8. 외부설정과 프로필2
1️⃣ 프로젝트 설정
2️⃣ 외부 설정 사용 - Enviroment
3️⃣ 외부 설정 사용 - @value
4️⃣ 외부 설정 사용 - @ConfiguartionProperties 시작
5️⃣ 외부 설정 사용 - @ConfigurationProperties 생성자
@ConfigurationProperties는 Getter, Setter를 사용하는 자바빈 프로퍼티 방식이 아니라 생성자를 통해서 객체를 만드는 기능도 지원한다.
MyDataSourcePropertiesV2
@Getter롬복이 자동으로getter를 만들어준다.@DefaultValue: 해당 값을 찾을 수 없는 경우 기본값을 사용한다.@DefaultValue Etc etcetc를 찾을 수 없을 경우Etc객체를 생성하고 내부에 들어가는 값은 비워둔다. (null,0)@DefaultValue("DEFAULT") List<String> optionsoptions를 찾을 수 없을 경우DEFAULT라는 이름의 값을 사용한다.✅ ExternalReadApplication - 수정
@import(MyDataSourceConfigV1.class)를 주석처리
@import(MyDataSourceConfigV2.class)를 추가
실행 결과
정리
Setter가 없으므로 개발자 중간에 실수로 값을 변경하는 문제가 발생하지 않는다.문제
6️⃣ 외부 설정 사용 - @ConfigurationProperties 검증
@ConfigurationProperties를 통해서 숫자가 들어가야 하는 부분에 문자가 입력되는 문제와 같은 타입이 맞지 않는 데이터를 입력하는 문제는 예방할 수 있다.
하지만 문제는 숫자의 범위, 문자의 길이 같은 부분이 검증이 어렵움
예) 최대 커넥션 숫자는 최소 1, 최대 999라는 범위를 가져야 한다면 어떻게 검증할까?
build.gradle
검증기를 추가하여
ConfigurationProperties만들기MyDataSourcePropertiesV3
@notempty url,username,password는 항상 값이 있어야 한다.
필수 값이 된다.@min(1) @max(999) maxConnection: 최소1, 최대999의 값을 허용한다.
@DurationMin(seconds = 1) @DurationMax(seconds = 60) : 최소 1, 최대 60초를 허용한
다.
jakarta.validation.constraints.Max패키지 이름에jakarta.validation으로 시작하는 것은 자바 표준 검증기에서 지원하는 기능이다.@Import(MyDataSourceConfigV2.class)를 주석처리 한다.@Import(MyDataSourceConfigV3.class)를 추가 한다.✅ 값이 검증 범위를 넘어서게 설정
✅ConfigurationProperties 장점
7️⃣ YAML
YAML(YAML Ain't Markup Language)
사람이 읽기 좋은 데이터 구조를 목표
application.properties 예시
일관성있게 사용하지 않으면 읽기 어렵거나 구조가 깨질 수 있다.
주면 된다.
➡️ 적용
8️⃣ @Profile
각 환경마다 서로 다른 빈을 등록해야 한다면 어떻게 해야할까?
예를 들어서 결제 기능을 붙여야 하는데, 로컬 개발 환경에서는 실제 결제가 발생하면 문제가 되니 가짜 결제 기능이 있는 스프링 빈을 등록하고, 운영 환경에서는 실제 결제 기능을 제공하는 스프링 빈을 등록한다고 가정해보자.
PayClient
DI를 적극 활용하기 위해 인터페이스를 사용
LocalPayClient
PayClient를 사용하는 부분이다. 상황에 따라서LocalPayClient또는ProdPayClient를 주입받는다.PayConfig
@Profile애노테이션을 사용하면 해당 프로필이 활성화된 경우에만 빈을 등록한다.
RunOrder
ApplicationRunner 인터페이스를 사용하면 스프링은 빈 초기화가 모두 끝나고 애플리케이션 로딩이 완료되는 시점에 run(args) 메서드를 호출해준다
ExternalReadApplication 변경
은 특정 조건에 따라서 해당 빈을 등록할지 말지 선택한다. 어디서 많이 본 것 같지 않은가? 바이다. 코드를 보면@conditional(ProfileCondition.class)를 확인할 수 있다. 스프링기능을 활용해서 개발자가 더 편리하게 사용할 수 있는@Profile` 기능을 제공하는 것이다.
✅정리
Beta Was this translation helpful? Give feedback.
All reactions