본문 바로가기

Back-end/Spring 개념17

17. Spring 기본개념 총정리 0. 개요 - 이번 포스팅에서는 그동안 배운 Spring의 기본 개념을 정리해보려고 한다. - 이번 포스팅은 다음과 같은 목차로 구성된다. 1. 객체지향과 다형성 2. SOLID원칙 3. Spring Framework를 사용하는 이유 4. Spring Container 5. Bean 수동/자동 등록 6. Dependency Injection 7. Bean Lifecycle 8. Bean Scope 9. Dependency Looking 1. 객체지향과 다형성 a) OOP의 정의 - 객체지향 프로그래밍은 수많은 부품을 이용하여 자동차를 조립하는 것처럼 프로그램을 작성하는 것이다. - 즉, 여러 개의 부품처럼 코드를 기능 단위로 쪼개어 하나의 프로그램을 완성시키는 방법이다. - 그렇다면 어떤 기.. 2022. 2. 18.
16. Bean Scope에 대하여 0. 개요 - 이전 포스팅에서 Spring Bean의 생명주기에 대해 배웠다. - Spring은 Spring Continer의 시작과 종료까지의 큰 흐름 안에 다양한 생명주기를 가진 Bean을 제공한다. - 이번 포스팅에서는 다양한 Bean의 생명주기에 대해서 알아보자. 1. Bean Scope a) Bean Scope란? - Spring에는 다양한 종류의 Bean이 존재한다. - Bean의 역할과 사용 목적에 따라 Bean의 종류가 달라지는데, 이에 따라 다양한 생명주기를 갖는다. - Bean의 종류에 따라 달라지는 Bean 생명주기를 Bean Scope라고 부른다. - 모든 Bean이 애플리케이션이 종료될 때까지 Spring Container에 의해 관리되는 것이 아니다. - 즉, Scope는 Bea.. 2022. 2. 17.
15. Bean 생명주기 콜백 0. 개요 - 실제로 Web App을 운영하면 App 실행 전에 Server는 미리 DB와 연결해두고, 일정량의 Data를 로드해놓는다. - 더불어 종료 시점에는 모든 작업을 종료하는 과정에서 객체의 초기화와 종료 작업을 필요로 한다. - 이처럼 운영하는 이유는, 최초에 App을 실행했을 때 Client의 요청에 빠르게 응답하기 위함이다. - 이 과정을 구현하기 위해 필요한 Spring Bean의 초기화와 종료 과정을 알아보자. 1. Spring Bean의 생명주기 - 최초에 App이 빌드되는 과정에서, Spring Bean은 객체의 생성을 통해 Spring Container에 등록된 후 의존관계를 형성(주입)한다. - 이 준비가 완료되어야 Bean을 이용해 다양한 data를 주고받을 수 있다. - 그러.. 2022. 2. 16.
14. Annotation을 만드는 방법 0. 개요 - 이전 포스팅에서 Bean이 2개 이상인 경우를 해결하는 방법으로 @Qualifier를 언급했다. - 그러나 @Qualifier를 사용하면 컴파일 시 문제가 발생한다. - 이를 해결하는 방법으로 어노테이션을 직접 생성하는데, 이에 대해 알아보자. 1. Annotation을 생성하는 방법 a) @Qualifier의 컴파일 시 문제점 - @Qualifier는 다음과 같이 명시한다. @Qualifier("이름") - 이처럼 명시를 하는데, 문제는 이름을 표현하는 문자열(= "이름")에 있다. - 해당 문자열은 컴파일 과정에서 Bean의 타입으로 인식되지 않는다. - 이를 해결하기 위한 방법으로 직접 Annotation을 생성한다. b) Annotation 생성 방법 - 우선, 어노테이션 파일을 생.. 2022. 2. 15.
13. @Autowired의 다양한 문제 해결방법 0. 개요 - 이전 포스팅에서 @Autowired를 이용한 의존성 자동 주입(DI)에 대해서 알아보았다. - @Autowired의 핵심은 Spring Container에서 관리하는 Bean을 이용한 관계 형성이다. - 의존성을 명시할 때 의존 대상의 인터페이스(= 타입)를 명시하여, 해당 인터페이스를 상속받은 Bean을 찾는다. - 그러나 이 과정에서 다양한 문제가 발생할 수 있다. 이에 대한 해결방법을 알아보자. 1. Bean이 존재하지 않는 경우 - Bean이 존재하지 않아도 동작해야 할 때가 있다. - 하지만 @Autowired를 사용하면 주입할 Bean이 존재하지 않는 경우, NoSuchBeanDefinitionException이 발생한다. - 어떻게 처리할까? a) @Autowired(requi.. 2022. 2. 14.
12. Dependency Injection 방법 0. 개요 - 이전 포스팅에서 의존성 자동 주입 방법과 그 원리에 대해서 배웠다. - 이번 포스팅에서는 Spring에서 제공하는 다양한 DI 자동 주입 방법에 대해서 알아보자. 1. Constructor(생성자) Injection - Spring은 생성자 주입 방식의 사용을 권장한다. a) 구현 방법 - @Component가 붙은 클래스 내부에 생성자를 만든다. - 생성자에 @Autowired를 부착한다. @Component public class TestServiceImpl implements TestService { private final TestRepository testRepository; @Autowired public TestServiceImpl(TestRepository testReposi.. 2022. 2. 11.
11. Dependency Injection 기본개념 0. 개요 - 이전 포스팅에서 Bean 자동 등록과 Spring이 Bean을 탐색하는 방법에 대해 알아보았다. - Bean 자동 등록을 배웠으니, 이제 DI(의존성, 의존관계) 자동 주입에 대해서 알아보자. 1. DI에 대하여 - DI(Dependency Injection)는 객체지향 프로그래밍에서 통용되는 개념이다. - DI는 프로그램간의 결합도를 낮추기위해 사용되는 대표적인 방법으로, 여기에는 강한 결합과 느슨한 결합이 있다. a) 강한 결합 - 객체 내부에서 직접 다른 객체를 생성하여 강한 결합도를 형성하는 구조다. - 앞서 SOLID에서 언급하였지만, 이와 같은 방식은 객체지향 프로그래밍의 OCP를 위반하는 방식이다. - 그 이유는 Client가 직접 구현체를 명시하는 방식이기 때문이다. b) 느.. 2022. 2. 10.
10. Bean 자동 vs 수동 등록 0. 개요 - 이전 포스팅에서 Bean 자동/수동 등록에 대해 기본적인 것들을 알아보았다. - 이번 포스팅에서는 Bean 자동 등록과 수동 등록을 동시에 사용할 때 발생할 수 있는 문제점들에 대해 알아보자. 1. Bean 자동 등록과 수동 등록이란? a) AppConfig를 이용한 Bean 수동 등록 - Bean 수동 등록은 AppConfig 설정 파일에 직접 Bean을 등록하는 방식을 말한다. @Configuration public class AppConfig{ @Bean public TestService testService() { return new TestServiceImpl(testRepository()); } } b) @ComponentScan을 이용한 Bean 자동 등록 - Bean 자동 등.. 2022. 2. 9.
9. @ComponentScan의 동작원리와 옵션 0. 개요 - 이전 포스팅에서 Bean 자동 등록에 대해서 알아보았다. - 이번 포스팅에서는 Bean 자동 등록의 핵심인 Component Scan에 대해서 알아보자. 1. @ComponentScan의 동작원리 a) @ComponentScan의 탐색 위치 설정 - @ComponentScan이 붙은 클래스의 위치를 기반으로 Bean을 찾아 Spring Container에 등록한다. - 여기서 말하는 클래스의 위치란, 클래스를 생성하면 클래스 상단에 자동으로 부여되는 package경로를 의미한다. package hello.spring; public class HelloSpring {} - 이처럼 해당 클래스의 패키지 경로부터 하위 경로까지, 모든 클래스의 Bean을 탐색한다. - 더불어, 옵션을 사용하면 @.. 2022. 2. 8.