본문 바로가기

Spring/Core

(8)
Spring Core - 프록시 AOP Contents 스프링 AOP의 특징 어노테이션 기반의 AOP 스프링 AOP 의 특징 프록시 기반의 AOP 구현 스프링 빈에만 AOP 를 적용할 수 있다. 프록시 패턴 프록시 패턴에는 인터페이스가 있다. 클라이언트는 이 인터페이스 타입으로 Proxy 객체를 사용하게 된다. Proxy객체가 실제 객체를 감싸서 실행을 하게 된다. 근데 이렇게 프록시 패턴을 직접 구현을 하면 여러 문제점이 생긴다 -프록시 패턴을 직접 구현하면 생기는 문제점 매번 이런 프록시 클래스를 작성해야하나? 한 Real Subject 가 아니라 여러 클래스에 advice를 적용하고 싶다면..? 위 같은 문제들이 생겨났고 이걸 해결하기 위해 등장한게 Spring AOP 다 스프링 AOP 에서는 동적으로 프록시를 생성해서 이런 문제들을 해..
Spring Core - AOP의 개념 Contents AOP란? AOP 용어 AOP 적용 방법 AOP란? 흩어진 AspectJ를 모듈화 할 수 있는 프로그래밍 기법이다. Spring AOP란? AOP 의 구현체를 제공하고, Java 의 만들어져있는 AOP 구현체 AspectJ 와 연동해서 사용할 수 있는 기능도 제공하고 스프링 자체에서 구현한 Spring AOP 기능을 활용 할 수 있게 한다. 이걸 기반으로 Spring Transaction 이나 여러가지 다른 기능들이 적용이 되고 있다. 캐시기능도 마찬가지 여러 클래스에 걸쳐서 사용되는 비슷한 코드들이 있다. 가령, 트랜잭션을 생각해보자 A,B,C 모두 트랜잭션이 필요하다고 했을때 트랜잭션 처리가 어떻게 되냐하면 보통 , set Auto commit 을 false로 만들고, query 실행..
Spring Core - Validation, Data binding 추상화 Content Validation data binding propertyEditor Converter Formatter Validation 객체 검증용 인터페이스 validation 용 annotation 을 사용해서 객체들을 검증 할 수 있다. Java EE 스펙 중 하나다 이미 스프링 부트에서는 LocalValidatorFactoryBean 이 자동으로 등록되어있어서 이미지 처럼 하이버네이트 밸리데이터를 사용할 수 있다. data binding 사용자의 입력 값을 어플리케이션 모델에 동적으로 변환해 넣어주는 기능이라고 할 수 있다. 입력값은 거의 String 으로 들어오는데 이걸 객체에 맞게 int,long,boolean 또는 객체등으로 변환해서 넣어주는 기능들이다. PropertyEditor 스프링..
Spring Core - Resource 추상화 Contents Resource Spring reference 에서 많이 나오는 추상화 개념 Spring 에서 추상화시킨 기능들을 알아보자 Resource - java.net.URL 을 추상화 시킨 것 왜 만들었을까? 기존에 URL 클래스에서는 classpath 에서 가져오는 기능이 없었다. classpath 에서 파일들을 쉽게 가져오기 위해 기존에 사용되던 ClassPathXmlApplicationContext 에서도 내부적으로는 resourceLoader 로 getResource를 가져오고 있었다. getResource 로 데이터를 가져올때는 classpath: 라던지 file:/// 라고 명시적으로 적어주는게 좋다
Spring Core - Application Context 의 기능들 Contents Environment MessageSource ResourceLoader Environment applicationContext 는 bean factory의 기능 외에도 여러가지 기능이 있다. Environment 는 그 기능들 중 하나 EnvironmentCapable 은 2가지 기능으로 profile 과 propertie가 있는데 그 중 한가지인 Profile 기능에 대해서 봐보겠다. Profile Profile 은 bean 들의 묶음인데 특정 환경에서는 이런 bean 들을 쓰겠다 하고 선언을 할 수 가 있다. 빈에 profile을 설정해두면 해당 빈은 test profile 로 들어왔을 경우에만 사용가능 하다. Propertie 이런식으로 가져와서 쓸 수 있다. 스프링 부트에서는 P..
Spring Core - bean 의 스코프 Contents bean의 스코프 종류 proxyMode? singleton 의 주의사항 빈의 스코프 빈에는 스코프라는게 있다. 스코프의 종류 싱글톤 프로토타입 Request Session WebSocket 빈의 default는 싱글톤이다. 싱글톤 - 해당 빈의 인스턴스가 오직 1개 뿐이다. 프로토 - 새로운 인스턴스를 계속 만들어서 사용하는 스코프 프로토타입의 객체를 찍어보면 계속 다른 객체가 나온다. *주의할점 ProtoType 의 객체에서 싱글톤 객체를 참조할때는 아무런 문제 없다. 하지만, 반대의 경우엔? 이 경우엔 문제가 있을 수 있다. 최초 한번만 만드는 객체라 안에있는 proto가 계속 동일한 객체를 가지게 된다. 이 문제를 해결하기 위한 방법으로는 proxyMode 를 쓸 수 있다. 기본값..
Spring Core - Annotation Contents Autowire ComponentScan @Autowire Autowire 의 동작원리 @BeanPostProcessor 의 인터페이스 중 AutowiredAnnotationBeanPostProcessor 가 동작하면서 채워주게 된다. applicationContext 가 @BeanPostProcessor 들을 찾는다. 그 중에 AutowiredAnnotationBeanPostProcessor 가 있는데 , 일반 bean 들에 이걸 적용을 하는 거라고 볼 수 있다. 그냥 이런게 있다 정도만 알아두자 빈을 찾아 주입 하는 방법들에 대해 알아보자 생성자 주입 세터 주입 필드 주입 이것들은 너무 많이 본것들이라 예시는 생략하도록 하겠다 중복되는 타입이 있을 경우엔 @Primary Qualifi..
Spring Core - IOC 컨테이너와 빈 -Contents - IOC 컨테이너란? - 빈이란? - applicationContext의 설정방식 IOC 컨테이너란? 의존 관계 주입이라고도 하며, 객체를 직접 생성시키는게 아니라 어떤 장치를 통해서 주입을 받아서 사용하는 방법을 IOC 라고 한다. 빈이란? IOC 컨테이너가 관리 하는 객체라고 할 수 있다. 그렇다면, 객체를 직접 생성시키지 않고 왜 컨테이너가 빈을 관리 하게 했을까? 객체를 빈으로 등록되면 장점- 의존성 주입 빈의 스코프 관리 빈의 라이프사이클 관리 의존성 주입을 하는 장점은 만약 테스트를 하려고 할때 한 객체가 다른 객체의 의존성을 가지고 있을때 의존 객체를 생성 시켜야지 테스트를 할 수 있는데 객체 수가 많아질수록 단위테스트를 하기 힘들어진다. 이걸 의존 주입을 통해 mock ..