반응형

Spring/스프링 프레임워크 핵심 원리 9

[Spring] #21. Null-safety

Null-safety -스프링 프레임워크 5에 추가된 Null 관련 어노테이션입니다. -목적: 컴파일 시점에 NullPointerException을 최대한 방지하기 위함 -Null값을 허용할지 아닐지를 어노테이션을 표시해서 정해놓고, intelliJ와 같은 툴의 지원을 받아 컴파일 시점에 NullPointerException을 미연에 방지할 수 있습니다. public class EventService { public String createEvent(@NonNull String name) { return "hello "+name; } } -설정-preference-Compiler-Configure annotations-+-'Nullable(org.springframework.lang)' 추가-'NonNu..

[Spring] #20. 스프링 AOP: @AOP

어노테이션 기반의 스프링 @AOP -의존성 추가 org.springframework.boot sprint-boot-starter-aop -@Aspect: 컴포넌트 스캔으로 빈을 등록해야 하므로 @Compent도 추가해야 합니다. //PerfAspect.java @Component @Aspect public class PerfAspect { @Around("@annotation(PerLogging)") //@Around는 메소드를 감싸는 형태로 제공되어, 메소드 호출 전과 후에 무언가를 할 수 있으며, //발생하는 에러를 잡아서 에러가 났을 때 특정한 역할을 할 수도 있는 다용도의 어노테이션입니다. //1. annotation이라는 표현식으로 PerLogging이 달려있는 곳에 적용하라는 설정입니다. //..

has-thumbnail="1" style="background-image:url('https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq8Uur%2FbtqRomlJtD3%2FNKtWy68UPvTOwVZJpIJhjK%2Fimg.jpg')"

[Spring] #19. 스프링 AOP: 프록시 기반 AOP

스프링 AOP 특징 -프록시 기반의 AOP -스프링 빈에만 AOP를 적용할 수 있습니다. -모든 AOP 기능을 제공하는 것이 목적이 아니라, 스프링 IoC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제에 대한 해결책을 제공하는 것이 목적입니다. 프록시 패턴 -프록시에는 인터페이스가 있고, 클라이언트는 인터페이스를 통해 프록시 객체를 사용하게 됩니다. 프록시 객체는 같은 타입의 타겟 객체를 가지고 있고, 타겟 객체는 원래 해야할 일을 가지고 있으며 프록시 객체가 타겟 객체를 감싸서 클라이언트의 요청을 처리하는 형태입니다. ​ -목적: 접근 제어 또는 부가 기능 추가 ​ 프록시 패턴을 사용하지 않은 경우 //EventService.java public interface EventService { v..

has-thumbnail="1" style="background-image:url('https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTgqY9%2FbtqRoPGQ4Gr%2FFYwckj25D1lC6IeK8x1Xmk%2Fimg.jpg')"

[Spring] #18. 스프링 AOP: 개념 소개

AOP(Aspect-oriented Programming) -흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법 -OOP를 보완하는 수단 ​ Crosscutting Concerns(흩어진 관심사) *동일한 색은 동일한 concern에 해당함 *concern: 여러 클래스, 여러 메소드에 걸쳐서 나타나는 비슷한 코드들 ex) 트랜잭션, 로깅 ​ -각각의 concern들에 코드의 변경이 일어나게 되면, 해당 concern을 이용한 모든 코드들을 수정하기 쉽지 않으므로 AOP를 이용합니다 ​ AOP를 적용하여 흩어진 코드들을 한곳에 모음 -각각의 concern별로 해당 기능이 어디에 적용되어야 하는지 명시하고, Aspect를 독립적으로 모듈화함 ​ AOP의 주요 개념 -Aspect: concern별로 모..

[Spring] #17. SpEL(스프링 Expression Language)

SpEL이란? -객체 그래프를 조회하고 조작하는 기능을 제공합니다. -스프링 3.0부터 지원합니다. -Unified EL과 비슷하지만, 추가적으로 메소드 호출을 지원하고, 문자열 템플릿 기능도 제공합니다. -스프링 핵심 기술단(core)뿐만 아니라, 스프링 프로젝트 전반에 걸쳐 널리 사용됩니다. //AppRunner.java @Component public class AppRunner implements ApplicationRunner { @Value("#{1 + 1}") //#{ }: 표현식을 이용하는 방법 int value; @Value("#{'hello ' + 'world'}") //Literal Expression String greeting; @Value("#{1 eq 1}") boolean t..

has-thumbnail="1" style="background-image:url('https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0eChn%2FbtqRqbJqImn%2F6ub8IdTlYmYHROHw6WX7P0%2Fimg.jpg')"

[Spring] #16. 데이터 바인딩 추상화: Converter와 Formatter

Converter -PropertyEditor가 가지고 있는 단점을 보완하기 위해 Converter가 생겨남 -S 타입을 T 타입으로 변환할 수 있는 매우 일반적인 변환기(문자열을 정수로 변환하는 것뿐만 아니라 다른 형태로도 변환 가능) -상태 정보 없음==스레드 세이프 함 -ConverterRegistry에 등록해야 함 public class EventConverter { @Component public static class StringToEventConverter implements Converter { @Override public Event convert(String source) { return new Event(Interger.parseInt(source)); } } @Component pu..

[Spring] #15. 데이터 바인딩 추상화: PropertyEditor

데이터 바인딩 -기술적 관점: 프로퍼티의 값을 타겟 객체에 설정하는 기능 -사용자 관점: 사용자의 입력값을 애플리케이션 도메인 모델에 동적으로 할당하는 기능, 즉 입력값은 '문자열'인데, 그 값을 int, long, boolean, date 등 또는 Event, Book 같은 도메인 타입 그 자체로 변환해야 하는 경우 변환해주는 기능 -DataBinder 인터페이스: 여러 곳에서 쓰이는 스프링의 핵심 기술 중 하나로 데이터 바인딩에 관한 기능을 여러 인터페이스로 적절히 추상화시켜놓음 //Event.java public class Event { private Integer id; private String title; public Event(Integer id) { this.id=id; } public I..

[Spring] #14. Validation 추상화

Validation 추상화 -Bean Validation: 자바 표준 스펙 중 하나 -Validator: 주로 애플리케이션 MVC에서 사용하지만, 어떤 계층에서도 사용 가능한 인터페이스 두 가지 메소드를 제공합니다 ·supports: 검증해야 하는 인스턴스의 클래스가 해당 Validator가 지원 및 검증할 수 있는 클래스인지 확인해줍니다. ·validate: 실질적으로 검증 작업이 일어나는 곳입니다. //Event.java public class Event { Integer id; String title; public Integer getId() { return id; } public void setId(Integer id) { this.id=id; } public String getTitle() { ..

[Spring] #13. Resource 추상화

Resouce 추상화 -java.net.URL이라는 클래스를 org.springframework.core.io.Resource라는 클래스로 감싸서 low level에 있는 resource에 접근하는 기능입니다. -클래스 패스를 기준으로 리소스를 읽어오는 기능이 이전에 없었기 때문에 resource를 추상화한 것입니다. //클래스 패스를 기준으로 location에 있는 설정 파일을 찾는 방법 @Autowired ResourceLoader resourceLoader; @Override public void run(ApplicationArguments args) throws Exception { var ctx=new ClassPathXmlApplicationContext(configLocation: "sldi..

반응형