JAVA/Spring(114)
-
[Spring] 스프링 AOP : @AOP
1. Aspect 정의 @Aspect 빈으로 등록하기 위해서 @Component 추가 2. Pointcut 정의 @Pointcut(표현식) 주요 표현식 execution @annotation bean Pointcut 조합 &&, ||, ! 3. Advice 정의 @Before @AfterReturning @AfterThrowing @Around 4. AOP 구현 실습 1. 의존성 추가 dependencies { implementation 'org.springframework.boot:spring-boot-starter-aop' } 2. Aspect 클래스 정의 및 빈 등록 @Aspect @Component public class PerfAspect { } 3. Pointcut 및 Advice 모듈 정의 ..
2022.10.31 -
[Spring] 프록시 기반 AOP
1. 스프링 AOP 특징 프록시 기반 AOP 구현체 스프링 빈에만 AOP를 적용할 수 있음 모든 AOP 기능을 제공하는 것이 목적이 아니라, 스프링 IoC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제에 대한 해결책을 제공하는 것이 목적 2. 프록시 패턴 프록시 패턴은 기존 코드 변경 없이 접근을 제어(멤버에 접근, 메서드에 접근)하거나 부가적인 기능(속도 측정, 트랜잭션, 입력값 범위 검사, 유효성 검사 등)을 추가하는데 사용됨 예를 들어 기존 코드를 건드리지 않고 메서드의 성능 측정을 하는데 사용할 수 있음 3. 수동적인 프록시 패턴의 문제점 매번 프록시 클래스를 작성하는 문제 여러 클래스 여러 메서드에 적용할 때 문제 객체들의 관계가 복잡할때 어려움 4. 수동적인 프록시 패턴의 해결안 : ..
2022.10.30 -
[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