Spring/Spring Core 7

[Spring] Spring Null 처리 하는 법 (Null-safety)

Null-safety 목적 Annotation 에 마킹하여 IntelliJ나 Tool에 지원을 받아 컴파일 시점에 NullPointerException를 방지하기 위함이다. Spring 5에 추가되었다 Null 관련 애노테이션 @NonNull Null허용안함 @Nullable @NonNullApi (패키지 레벨 설정) @NonNullFields (패키지 레벨 설정) 예시 EventService 생성 import org.springframework.lang.NonNull; import org.springframework.stereotype.Service; @Service public class EventService { @NonNull public String createEvent(@NonNull Stri..

Spring/Spring Core 2020.11.06

[Spring] AOP(Aspect-Oriented Programming)

AOP란? AOP는 Aspect Oreiented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 쉽게 말해서 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어 보며 그 관점들을 기준으로 모듈화를 한다는 것이다. 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것이다. 핵심적인 관점은 우리가 적용하고자 하는 핵심 비즈니스 로직이다. 부가적인 관점은 핵심 로직을 실행하기 위해서 행하는 DB Connection, Logging, I/O 등 다양하게 있다. 애플리케이션 전체에 걸쳐 사용되는 기능을 재사용하도록 지원하고 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법입니다. Spring 는 AOP의 구현체를 제공하며 자바에 만들어져있는 AOP 구현체가 있다. 모듈..

Spring/Spring Core 2020.11.06

[Spring] SpEL(Spring Expression Language)

1. SpEL(Spring Expression Language)이란? SpEL Spring Expression Language는 SpEL로 많이 표기한다. Spring EL 이라고도 불린다. Spring 3.0 부터 지원이 되었다. 객체 그래프를 조회하거나 조작하는 기능을 제공한다 Unified EL과 비슷하지만, 메소드 호출을 지원하며, 문자열 템플릿 기능도 제공한다. OGNL, MVEL, JBoss EL 등 자바에서 사용할 수 있는 여러 EL이 있지만 SpEL은 모든 스프링 프로젝트 전반에 걸쳐 사용할 EL로 만들어졌다. EL 참고 ... if test 안에 ${sessionScope.cart.numberOfItems > 0} JSP나 Thymeleaf처럼 이런 EL을 써본적이 있는 분들이 있을 것이..

Spring/Spring Core 2020.11.05

[Spring] 데이터 바인딩 추상화 - Converter, Formatter

Converter, Formatter 1. Converter 인터페이스 Converter 인터페이스 API Converter 특징 Spring 3.0 부터 생성되었다 S 타입을 T 타입으로 변환할 수 있는 매우 일반적인 변환기이다 Spring이 제공하는 ConversionService 인터페이스를 통해 사용된다. 상태정보(값)을 저장하지 않으므로 Thread-safe하다 멀티 쓰레드에 안전하고 값이 일치하고 원하는 값이 나온다. Bean으로 등록해서 사용이 가능하다 PropertyEditor의 단점을 보완하기 위해 생겼다. 1) Converter 구현 예제 import org.springframework.core.convert.converter.Converter; public class EventConv..

Spring/Spring Core 2020.11.05

[Spring] 데이터 바인딩 추상화 - PropertyEditor

데이터 바인딩 추상화 - PropertyEditor spring이 제공해주는 org.springframework.validation.DataBinder 1. Data Binding이란? 기술적인 관점으로 보았을 때는 프로퍼티 값을 타겟 객체에 설정하는 기능이다 사용자 관점으로 보았을 때는 사용자 입력값을 애플리케이션 도메인 모델에 동적으로 변환해 넣어 주는 기능이다. 예를 들면 입력값은 대부분 String(문자열) 인데, 그 값을 도메인 객체가 가지고 있는 자료형 (int, boolean, long, Date ) 등 Event, Book 같은 도메인 타입으로 변환해서 넣어주는 기능이다. 즉 사용자가 입력한 문자열 값을 도메인 타입에 맞춰 변환하여 사용 하는 것을 데이터 바인딩 이라고 합니다 2. Spri..

Spring/Spring Core 2020.11.05

[Spring] Validation 추상화

Validation 추상화 Spring에서 org.springframework.validation.Validator는 애플리케이션에서 사용하는 객체 검증용 인터페이스이다. 주로 Spring MVC에서 사용하지만 Web 계층에서만 사용하는 전용 개념은 아니다. 특징 어떠한 Layer이여도 상관이 없고 모든 Layer(Web, Service , Data) 에서 사용해도 상관없다. 구현체 중 하나이면서 JSR-303(Bean Validation 1.0)과 JSR-349(Bean Validation 1.1), JSR-380(BeanValidation 2.0.1 )을 지원한다. (LocalValidatorFactoryBean) 참고 https://beanvalidation.org/ DataBinder에 들어가서 ..

Spring/Spring Core 2020.11.04

[Spring] Resource 추상화

Resource 추상화 Spring Boot에서 resource를 설정할때 classpath로 mapping시 prefix 사용을 선호한다. java.net.URL 을 Resource로 감싸서 추상화 하는 기법을 기술한다 특징 Spring은 java.net.URL 을 org.springframework.core.io.Resource 로 감싸서 추상화한 클래스이다. 스프링 내부에서 많이 사용하는 인터페이스이다 추상화 한 이유 java.net.URL 이 기본적으로 여러 prefix를 지원하는 프로토콜은 http,https, ftp, file, jar 이지만 classpath 기준으로 리소스를 읽어오는 기능이 없다. ServletContext를 기준으로 상대 경로로 읽어오는 기능이 없다 새로운 핸들러를 등록하..

Spring/Spring Core 2020.11.04