JAVA(240)
-
[Spring] Spring AOP(Aspect-Oriented Programming) 개념
1. 스프링 AOP(Aspect-oriented Programming) AOP(Aspect-oriented Programming)은 OOP를 보완하는 수단 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법 흩어진 관심사(Crosscutting Concerns) 위 그림에서 각각의 색깔들의 의미는 여러 클래스, 여러 메소드에 나타나는 비슷한 코드, 비슷한 필드 주입, 비슷한 메서드 호출일 수 잇습니다. 대표적인 사례가 데이터베이스에 접근하기 위한 코드들은 트랜잭션 코드들로 감싸야 합니다. 이러한 경우에 AOP를 적용할 수 있습니다. 각각의 색깔이 메서드라고 가정한다면 파란 색메서드는 Class A, Class B에 사용됨, 노랑은 Class A, B, C에 사용됨, 빨강은 Class A, C에 사용..
2022.10.30 -
[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