Spring Framework: 317개의 글
[Spring] @Autowired 동작 원리 - BeanPostProcessor @Autowired 애노테이션을 생성자, setter, 필드에 붙이기만 함으로써 간편하게 의존성을 주입받을 수 있는데 어떻게 그렇게 동작할수 있는지, 그 원리에 대해 알아보자. 결론부터 말하자면 @Autowired 애노테이션은 BeanPostProcessor라는 라이프 사이클 인터페이스의 구현체인 AutowiredAnnotationBeanPostProcessor에 의해 의존성 주입이 이루어진다. BeanPostProcessor는 빈의 initializing(초기화) 라이프 사이클 이전, 이후에 필요한 부가 작업을 할 수 있는 라이프 사이클 콜백이다. 그리고 BeanPostProcessor의 구현체인 AutowiredAnno..
[Spring] @Autowired의 다양한 사용 방법 - required, Primary, Qualifier 1. 의존객체 타입의 빈이 없는 경우 다음과 같이 BookService 클래스와 BookRepository 인터페이스가 있다. import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class BookService { BookRepository bookRepository; @Autowired public BookService(BookRepository bookRepository) { this.bookRepository = boo..
[Spring] 빈을 설정하는 3가지 방법 - XML, JAVA, Component Scan 새 프로젝트를 생성한다. 예제 코드에 필요한 의존성을 받기 위해 spring boot 프로젝트를 생성할 것이다. 참고로 예제 코드에는 이 의존성이 필요하다. Spring Initializr를 선택하고 Next를 클릭한다. Group, Artifact, Name을 입력하고 Next를 클릭한다. Group은 패키지명을 적어준다. (보통 도메인명을 뒤집어서..) Web - Spring Web을 넣고 Next를 클릭한다. Finish를 클릭해서 신규 프로젝트 생성을 완료한다. Spring boot 프로젝트를 만들었다. pom.xml을 열어보면 spring boot 2.2.5 버전으로 만들어졌음을 확인할 수 있다. 우측의..
[Spring] 왜 자바 객체를 IoC 컨테이너의 빈으로 만들까? IoC는 spring을 통해서만 적용할 수 있는게 아니며 일반 자바 객체로 DI를 직접 구현할수도 있다. 그런데도 spring의 IoC 컨테이너를 사용하는 이유는 다음과 같다. DI(Dependency Injection, 의존성 주입) DI를 직접 구현하는 것 보다 spring에서 제공하는 IoC 컨테이너의 DI를 이용하는 것이 편리하고 효율적이다. 객체의 Scope 자바 객체를 IoC 컨테이너의 빈으로 만들면 객체의 scope를 관리하기 용이하다. IoC 컨테이너에서 관리되는 빈들은 기본적으로 싱글톤 scope로 등록된다. 따라서 어플리케이션 전반적으로 오로지 하나의 인스턴스만 사용해도 되는 객체라면 IoC 컨테이너에 빈으로 등록해서 아..
[Spring] 스프링 PSA 1. PSA(Portable Service Abstraction) Spring은 Spring Triangle이라고 부르는 세 가지 개념을 제공해준다. 각각 IoC, AOP, PSA를 일컫는다. Spring의 PetClinic 예제를 보면 서블릿 어플리케이션임에도 불구하고 서블릿이 전혀 존재하지 않는다. 단지 @Controller 애노테이션이 붙어있는 클래스에서 @GetMapping, @PostMapping과 같은 @RequestMapping 애노테이션을 사용해서 요청을 매핑한다. 실제로는 내부적으로 서블릿 기반으로 코드가 동작하지만 서블릿 기술은 추상화 계층에 의해 숨겨져 있는 것이다. 이렇게 추상화 계층을 사용해서 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해주는 ..
[Spring] 스프링 AOP 개념 이해 및 적용 방법 1. AOP(Aspect Oriented Programming) Spring은 Spring Triangle이라고 부르는 세 가지 개념을 제공해준다. 각각 IoC, AOP, PSA를 일컫는다. AOP는 Aspect Oriented Programming의 약자로 '측면/양상 지향적인 프로그래밍'이라는 의미이다. '측면/양상 지향 프로그래밍'이 무엇을 의미하는가? class A { method a() { AAAA method a가 하는 일들 BBBB } method b() { AAAA method b가 하는 일들 BBBB } } class B { method c() { AAAA method c가 하는 일들 BBBB } } 위와 같이 동일한 일을 하는 코드..
[Spring] 의존성 주입(DI, Dependency Injection)의 세가지 방법 Spring은 @Autowired 애노테이션을 이용한 다양한 의존성 주입 방법을 제공한다. @Autowired 애노테이션은 Spring에게 의존성을 주입하라는 지시자 역할로 쓰이는데 생성자, 필드, 세터에 붙일 수 있다. 🚨 Spring IoC 컨테이너에 의한 의존성 주입은 빈(Bean) 끼리만 가능하다. 1. 생성자 주입 @Component public class SampleController { private SampleRepository sampleRepository; @Autowired public SampleController(SampleRepository sampleRepository) { this.sam..
[Spring] 스프링 빈(Bean)의 개념과 생성 원리 빈(Bean) Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라는 용어로 부른다. 우리가 new 연산자로 어떤 객체를 생성했을 때 그 객체는 빈이 아니다. ApplicationContext.getBean()으로 얻어질 수 있는 객체는 빈이다. 즉 Spring에서의 빈은 ApplicationContext가 알고있는 객체, 즉 ApplicationContext가 만들어서 그 안에 담고있는 객체를 의미한다. 어떻게 Spring IoC 컨테이너에 빈을 등록할까? 빈을 만드는 방법은 다양하지만 기본적으로 크게 두가지 방법이 있다. ① Component Scanning ② 빈 설정파일에 직접 빈을 등록 Component Scan @Comp..
[Spring] 스프링 예제 PetClinic 프로젝트 분석 및 기능 변경 1. 프로젝트 로그 레벨 변경 로그를 통해 프로젝트의 실행 흐름을 살펴볼 수 있다. PetClinic 프로젝트는 기본 로그 레벨이 INFO로 되어있어서 자세한 로그를 확인할 수 없다. 어플리케이션에서 이것저것 눌러봐도 딱히 출력되는 로그가 없다. 로그 레벨을 DEBUG로 변경하자. Spring boot 프로젝트는 src/main/resources/application.properties 파일에 로그 레벨을 설정한다. application.properties # Logging #logging.level.org.springframework=INFO logging.level.org.springframework.web=DEBUG 기존에는..
[Spring] 스프링 예제 프로젝트 PetClinic 빌드 및 실행하기 1. GitHub에서 Spring 프로젝트 clone 받기 Spring의 공식 예제인 spring-petclinic을 사용한다. Clone받기 위해 https://github.com/spring-projects/spring-petclinic 에 접속한다. Clone or download를 클릭하고 클립보드에 카피하는 버튼을 클릭한다. IntelliJ 메인 메뉴에서 VCS - Get from Version Control...을 클릭한다. 복사한 github url을 입력한다. 디렉토리는 레파지토리 이름인 spring-petclinic으로 자동으로 지정된다. 변경이 필요하면 변경 후 Clone을 클릭한다. spring-petclinic..