JAVA/Spring(111)
-
[Spring] Spring Expression Language
1. 스프링 EL(Expression Language)이란? 객체 그래프를 조회하고 조작하는 기능을 제공 Unified EL과 비슷하지만, 메서드 호출을 지원하며, 문자열 템플릿 기능도 제공 OGNL, MVEL, JBOss EL 등 자바에서 사용할 수 있는 여러 EL이 있지만, SpEL은 모든 스프링 프로젝트 전반에 걸쳐 사용할 EL로 만듬 스프링 3.0부터 지원 SpEL 구성 ExpressionParser parser = new SpelExpressionParser() StandardEvaluationContext context = new StandardEvaluationContext(bean) EvaluationContext에 bean을 등록하면 bean이 제공하는 프로퍼티, 메서드 등을 호출할 수 ..
2022.10.30 -
[Spring] 데이터 바인딩 추상화 : Converter와 Formatter
1. Converter 인터페이스 PropertyEditor의 단점을 개선하는 인터페이스 S 타입을 T 타입으로 변환할 수 있음 쓰레드 세이프함 PropertyEditor 단점 Object와 String간의 변환만 할 수 있음 데이터 바인딩 간의 String 문자열이 아닌 타입과 타입간의 변환을 할 수 없음 PropertyEditor 메서드 호출 getAsText : 어떤 객체를 String으로 변환하여 반환 setAsText : 문자열을 입력받아 다른 객체로 변환하여 반환 2. Converter 인터페이스 구현 실습 Converter 인터페이스를 구현하는 클래스 정의 WebMvcConfigurer 인터페이스를 구현하는 웹 설정 클래스 구현 addFormatters 메서드 재정의 FormatterRegi..
2022.10.30 -
[Spring] 데이터 바인딩 추상화 : PropertyEditor
1. 데이터 바인딩(Data Binding)이란 무엇인가? 기술적인 관점 : 프로퍼티 값을 타겟 객체에 설정하는 기능 사용자 관점 : 사용자 입력값을 애플리케이션 도메인 모델에 동적으로 변환해 넣어주는 기능 입력값은 대부분 문자열인데, 그 값을 객체가 가지고 있는 int, long, Boolean, Date 등 심지어 Event, Book 같은 도메인 타입으로도 변환해서 넣어주는 기능 PropertyEditor 스프링 3.0 이전까지 DataBinder가 변환 작업 사용하던 인터페이스 쓰레드-세이프하지 않음 상태 정보 저장을 하고 있음, 따라서 싱글톤 빈으로 등록해서 쓰면 정보가 불일치될 수 있음 Object와 String 간의 변환만 할 수 있어, 사용범위가 제한적임 public class EventE..
2022.10.28 -
[Spring] Validation 추상화
1. Validation 추상화 애플리케이션에서 사용하는 객체 검증용 인터페이스입니다 Validation 추상화의 특징 자바 EE 스펙중 하나입니다. 어떠한 계층과도 관계없이 모든 계층(웹, 서비스, 데이터)에서 사용해도 좋다 구현체 중 하나로, JSR-303(Bean Validation 1.0)과 JSR-349(Bean Validation 1.1)을 지원합니다. (LocalValidatorFactoryBean) DataBinder에 들어가 바인딩 할 때 같이 사용되기도 한다 Validator 인터페이스 boolean supports(Class clazz) : 어떤 타입의 객체를 검증할때 사용할 것인지 결정함 void validate(Object obj, Errors e) : 실제 검증 로직을 이 안에서..
2022.10.28 -
[Springboot] 24. Externalized Configuration #2 @ConfigurationProperties
1. 타입-세이프 프로퍼티 @ConfigurationProperties 여러 프로퍼티를 묶어서 읽어올 수 있습니다. 타입-세이프하다는 의미는 @Value 애노테이션의 사용과 같이 @Value(”${yonghwan.name}”)의 value 문자열 값의 오타가 나지 않게 하는 방법입니다. 예를 들어 필드 멤버를 정의하고 getter 메서드로 접근하는 것은 타입-세이프한 방법입니다. 빈으로 등록해서 다른 빈에 주입할 수 있습니다. @EnableConfigurationProperties @Component @Bean 융통성 있는 바인딩 context-path (케밥) context_path (언더스코어) contextPath (카멜) CONTEXTPATH 프로퍼티 타입 컨버전(Conversion) @Durat..
2022.10.28 -
[Springboot] 24. Externalized Configuration
43a2795a063e8ce4b6ce79144fd44add 155352484 -3143923589894034969 8 4fc7f846-5653-42c7-a95c-d64b0425aeae 16191 1. 사용할 수 있는 외부 설정 properties YAML 환경 변수 커맨드 라인 매개변수 2. 프로퍼티 우선순위 유저 홈 디렉토리에 있는 spring-boot-dev-tools.properties 테스트 코드에 있는 @TestPropertySource 애노테이션 테스트 코드에 있는 @SpringBootTest 애노테이션의 properties 속성 커맨드 라인 매개변수들 SPRING_APPLICATION JOSN(환경 변수 도는 시스템 속성에 내장된 JSON 형식)의 프로퍼티들 ServiceConfig 파라미터..
2022.10.14