AOP AOP란 무엇일까? AOP란 일단 개념 자체는 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법이다 무슨 말인지 이해가 잘 안간다. 쉽게 생각하면 주기능과 보조기능을 분리하고 보조 기능을 선택적으로 적용해서 사용한다는 개념이다 예를 들어 어떠한 메소드에 로그처리 기능을 추가해야한다고 할 때 만약 메소드에 직접 구현한다고 생각해보자. 이 때 로그 기능을 붙어야하는 메소드가 수백개가 된다면 어떨까 하나하나 하면 분명 시간도 더 걸리고 복잡해 질 것이다. 유지관리에 문제가 생길 수 있다! 이럴 때 AOP를 사용한다. 로그 기능을 보조기능으로 빼서 구현해두고 필요한 메소드에 선택적으로 붙인다..! 그림으로 한번 살펴보자 위 그림은 해당 각 클래스마다 부가기능이 들어가 있는 모습이다. 공통적인 기능..
Resource 추상화 (https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#resources) Resource 추상화란? Resource 추상화란 low-level 리소스에 접근할 수 있게 자바의 java.net.URL을 추상화 한 것이다 처음 들었을 때는 감이 잘안왔다..! 그럼 추상화 한 이유는 무엇일까?! 공식문서를 통해 알아보자! 추상화를 한 이유는 무엇일까? 일단 공식문서를 보면 영어로 길~~~게 나와있다 이유들을 살펴보면 첫째로 클래스패스 기준으로 리소스를 읽어오는 기능이 없다! ServletContext를 기준으로 상대 경로로 읽어오는 기능이 없다 URL prefix를 이용해 새로운 핸들러를 만들 수..
ApplicationEventPublisher ApplicationEventPublisher는 무엇인가?! ApplicationEventPublisher는 이벤트 기반의 프로그래밍을 할 때 필요한 기능을 제공해준다! ApplicationContext가 상속 받고 있다! 이벤트 프로그래밍 이라고 얘기하니까 느낌이 잘 안온다! 한번 직접 이벤트를 다뤄보자! 일단 이벤트와 이벤트를 다뤄줄 이벤트 핸들러를 만들어보자! 이벤트를 만들었으니 AppRunner에서 Event를 가져와 실행시켜보자! 이 때 중요한게 있는데 Event는 Bean이 아니다!! EventHandler만 빈으로 등록된다!! 헷갈리지말자 ApplicationEventPublisher를 주입받아서 publishEvent를 통해 MyEvent를 발..
Spring Profile 알아보기 Profile 이란? Profile은 Bean들의 그룹이라고 생각하면 쉽다! ApplicationContext의 getEnvironment()를 통해 가져올 수 있다! Environment의 역할은 활성화할 Profile을 확인하고 설정해준다! 위의 실행결과는 아래와 같다! 현재 활성화된 Profile은 없고 default는 언제나 적용된다 그럼 이걸 언제쓸까? Profile을 언제쓸까? 아직 내가 직접적으로 사용해 본 적은 없다..! Profile은 각각의 환경에 따라 다른 Bean을 써야하는 경우 혹은 특정한 Bean들을 써야하는 경우에 사용된다 예를들어 테스트 환경에서는 A라는 Bean을 사용하고, 배포 환경에서는 B라는 Bean을 쓰고싶다면 Profile을 통해..
Bean의 스코프 알아보기 Bean의 싱글톤 스코프 Bean은 기본적으로 별다른 설정이 없다면 싱글톤의 스코프를 가진다 싱글톤이란 ? 애플리케이션 전반에 걸쳐 Bean의 인스턴스가 오직 1개 뿐이다 한번 직접 확인해보자! Single 클래스와 Proto 클래스를 만들었다 Single은 proto를 주입받았고 AppRunner는 Single과 proto를 주입받았다 AppRunner, Single 각각 Proto를 주입받았지만 싱글톤이기 때문에 둘은 같은 Proto를 참조하고있다! 실행시켜서 결과를 확인해보자! 위에서 알 수 있듯이 기본적으로 싱글톤이다 그럼 매번 인스턴스를 생성하는 프로토타입 스코프는 Bean 에 어떻게 적용할까?! Bean의 프로토타입 스코프 Bean을 프로토 타입으로 만들기 위해서는 ..
@ComponentScan @ComponentScan의 basePackageClasses @ComponentScan은 기준 위치부터 @Component 애너테이션을 찾아 Bean으로 등록해준다! 이 때 스캔 시작점의 위치를 basePackageClasses 통해 정할 수 있다 그럼 해당 클래스부터 해당클래스가 포함되는 위치 그리고 이하의 패키지까지 모두 스캔한다! 보통 이 값을 안주면 @ComponentScan을 선언한 위치부터 스캔한다고 한다! 또한 @ComponentScan을 보면 @Filter를 가질 수 있다 @ComponentScan의 @Filter 아래 그림은 @SpringBooApplication을 타고 들어갔을 때 의 모습이다 @Filter를 통해서 @ComponentScan은 어떤 애터네이..
@Autowired @Autowired란? @Autowired는 의존성을 "타입"을 통해 찾아 주입해주는 역할을 해준다 그래서 사용하면 굉장히 편리해진다! 생성자(스프링 4.3부터 생략 가능), 세터, 필드 에서 사용할 수 있다! 위와 같이 써주면 자동으로 bean을 찾아서 주입해준다! 이 때 bookRepository도 bean으로 등록되어 있지 않다면 값이 안들어가는게 아니라 프로그램이 안돌아간다 왜냐하면 @Autowired는 기본적으로 required 값이 true여서 해당 빈을 못 찾으면 실행이 안된다 그래서 @Autowired(requried=false) 로 쓴다면 오류가 안난다! requred=true 인 것을 기억해두자! 같은 타입의 Bean이 여러개 일 때 @Autowired를 사용하면? ..
스프링 Bean 설정방법 XML파일 통해 Bean 생성 후 setter 사용하기 먼저 application.xml 파일을 통해 bean을 생성하고 setter를 통해 의존성을 주입해보자! BookService 클래스와 BookRepository 클래서가 있다고 하자 우리는 BookService 에 BookRepository를 주입하고 싶다! 이 때 위처럼 태그를 통해 BookService에 해당하는 bookService Bean을 생성하고 BookRepository에 해당하는 bookRepository bean을 생성할 수 있다! 그리고 BookService 클래스 에서는 setter를 통해 bookRepository를 주입받을 수 있다! 그럼 실행 시켜서 결과를 한번 보자 bean의 설정이 있는 xml..
오늘부터 스프링에 대해 공부하고 정리를 좀 해야겠다! 한번 크게 봤지만 아직도 참 어렵다..! 틀린 내용이 있을 수 있으니 발견하시면 알려주세요..! 미리 감사합니다! 먼저 스프링 IoC 컨테이너와 빈에대해 알아보자! 스프링 IoC 컨테이너 IoC란 무엇일까? IoC는 Inversion of Control 이다 번역하면 제어의 역전이다 클래스 간의 의존 관계들을 여태까지는 사용자가 직접 제어했다면 IoC는 그러한 일들을 컨테이너를 통해 주입 받는것이다 사용자에서 컨테이너로 제어가 역전해서 제어의 역전이라고 표현하는 것 같다! 스프링 IoC 컨테이너 스프링 IoC 컨테이너는 Bean 설정 소스로부터 Bean의 정의를 읽어서 구성하고 제공한다 스프링 Bean이 만들어지면 이 곳에서 관리를 해준다! Appli..