JAVA/Spring(109)
-
[Spring] Null-safety : Null 관련 애노테이션
1. Null-safety 스프링 프레임워크 5에 추가된 Null 관련 애노테이션 Null 관련 애노테이션 @NonNull @Nullable @NonNullApi(패키지 레벨 설정) @NonNullFields(패키지 레벨 설정) 목적 툴의 지원을 받아 컴파일 시점에 최대한 NullPointerException을 방지하기 위함 2. Null-safety @NonNull 실습 1. @NonNull 애노테이션을 적용할 구현 코드 정의 @Service public class EventService { @NonNull public String createEvent(@NonNull String name){ return "hello " + name; } @NonNull public String publishEvent..
2022.10.31 -
[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