본문 바로가기

Spring37

7-2. 의존 관계 주입 조회 빈이 2개 이상일 때 Q. @Autowired를 하였는데, 조회되는 빈이 2개 이상이면 어떤 빈이 선택되나요? A. 에러가 납니다. @Qualifier나 @Primary를 사용해주세요. 안녕하세요. 오늘은 의존 관계를 주입할 때, 조회되는 빈이 2개 이상일 때 어떻게 해결하는지 알아봅시다. 문제 상황 OrderServiceImpl 객체가 DiscountPolicy를 의존하고 있는 상황을 생각해봅시다. DiscountPolicy는 interface이고, 구현체로 FixDiscountPolicy와 RateDiscountPolicy가 있습니다. 정리하면 아래 사진과 같습니다. OrederServiceImpl 객체가 DiscountPolicy 의존 관계를 주입 받으려고 할 때, FixDiscountPolicy 객체와 RateDisc.. 2022. 1. 9.
7-1. 스프링 의존관계 주입 4가지 방법 Q. 생성자 주입 외에, 다른 방법으로 의존관계를 주입할 수 있나요? A. 다른 방법도 가능하지만, 생성자 주입을 권장합니다. 안녕하세요. 스프링에서는 의존관계를 주입하는 4가지 방법을 지원합니다. 4가지는 생성자 주입, 수정자 주입(setter 주입), 필드 주입, 일반 메서드 주입입니다. 이 중 생성자 주입이 가장 권장됩니다. 한 개씩 자세히 알아보고, 생성자 주입을 사용해야 하는 이유와 편리한 생성자 주입을 지원하는 어노테이션을 알아보겠습니다. 생성자 주입 생성자 주입은 가장 많이 사용되는 방법이며, 이름 그대로 생성자를 통해서 의존 관계를 주입 받는 방법입니다. 생성자 위에 @Autowired를 명시해주면 됩니다. 예제 코드를 봅시다. @Component public class OrderServi.. 2022. 1. 8.
6-1. 컴포넌트 스캔 설정 정보 클래스에서 객체를 만들어 의존 관계를 주입하는 것보다 간단한 방법이 없을까요? 안녕하세요. 오늘은 컴포넌트 스캔에 대해 알아보겠습니다. 앞서 스프링 빈을 등록하기 위해서 설정 정보 클래스를 만들고, 싱글톤을 보장하기 위해 @Configuration을 붙이며, method 위에는 @Bean을 붙인다는 것을 학습하였습니다. 공부를 위해 간단한 코드를 작성할 때는 설정 정보 클래스를 만들어서 의존 관계를 직접 주입할 수 있지만, 서비스가 커지면 하나하나 의존 관계를 주입해주고 관리하기 어려울 것입니다. 게다가 빈 객체를 만들기 위해 객체 생성 메소드 위에 @bean을 각각 붙여줘야 하는데, 붙여주는 것도 귀찮습니다. 따라서 설정 정보 클래스를 간소화하고, 의존 관계를 자동으로 주입하는 방법을 알아보.. 2022. 1. 7.
5-2. 싱글톤 방식의 주의점: stateless로 설계하기 싱글톤 방식을 사용할 때 주의점이 있나요? 안녕하세요. 싱글톤 컨테이너를 배우면서, 중요한 주의점을 학습하였습니다. 싱글톤 방식을 잘못 사용하면 실무에서 커다란 문제를 만들 수 있습니다! 실제로 몇 년에 한 번씩은 정말 해결하기 어려운 큰 문제가 터진다고 합니다. 싱글톤 방식의 잘못된 사용은 바로 'stateful(상태유지)'입니다. 싱글톤 객체 인스턴스에 특정 상태를 유지하면 안 됩니다. 여러 사용자가 같은 싱글톤 인스턴스에 접근하기 때문에, 특정 클라이언트에 의존적인 필드가 있으면 안 됩니다. 싱글톤 객체는 가능하면 읽기만 가능해야 하고, 값을 수정하면 안 됩니다. 이처럼 특정 상태를 유지하지 않는 것이 stateless(무상태)입니다. 싱글톤 방식을 사용하려면 stateless를 보장해야 합니다. .. 2022. 1. 7.
5-1. 싱글톤 컨테이너 + static method @Configuration은 왜 사용하는 것일까요? 안녕하세요. 오늘은 싱글톤 컨테이너에 대해서 알아보겠습니다. 싱글톤 컨테이너를 학습하고, @Configuration 사용 이유를 이해하는 것이 오늘의 목표입니다. 스프링 컨테이너는 싱글톤 컨테이너인데요. 먼저 싱글톤 패턴이 무엇인지 알아봅시다. 싱글톤 패턴 싱글톤 패턴은 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴입니다. 객체의 인스턴스가 2개 이상 생성되지 못하도록 막습니다. 싱글톤 패턴을 구현하는 방법에는 여러 가지가 있는데, 여기서는 객체를 미리 생성해두는 방법을 활용해 알아봅시다. 객체의 constructor를 public으로 만들면, 어디서든 객체를 만들 수 있겠죠. 그러나 객체를 한 개만 두고 싶으므로 누구나 만들지 못하.. 2022. 1. 6.
4. 스프링 컨테이너와 스프링 빈 + 람다식, Map 데이터 전체 조회 스프링 컨테이너는 스프링 빈을 어떻게 등록하고 관리할까요? 스프링 빈은 어떻게 꺼낼 수 있을까요? 안녕하세요. 오늘은 '섹션 4. 스프링 컨테이너와 스프링 빈'을 리뷰하겠습니다. 지난 시간에 스프링 컨테이너와 스프링 빈이 무엇인지를 알아보았습니다. 스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에 추가적인 기능을 제공하는 역할을 하는 컨테이너입니다[6]. 여기서 말하는 자바 객체를 스프링에서는 빈(Bean)이라고 부릅니다. 스프링 컨테이너는 @Configuration이 붙은 파일을 구성 정보로 사용하고, @Bean이 붙은 메서드를 호출해 반환된 객체를 스프링 컨테이너에 스프링 빈으로 등록합니다. 이번 시간에는 스프링 컨테이너의 생성과 스프링 빈 조회 등을 학습하며 스프링 컨테이너.. 2022. 1. 5.
3-2. 스프링 핵심 원리 이해2 - 객체 지향 원리 이용(스프링 컨테이너) + 프레임워크 vs 라이브러리 스프링은 AppConfig를 어떻게 지원할까요? 안녕하세요. 오늘은 '섹션 3. 스프링 핵심 원리 이해 2 - 객체 지향 원리 이용' 중 후반부를 리뷰하겠습니다. 전반부에서 SRP, OCP, DIP를 지키기 위해 AppConfig을 활용하는 것을 살펴보았습니다. 이러한 AppConfig의 역할을 해주는 것이 스프링 컨테이너입니다. 오늘의 핵심은 스프링 컨테이너가 무엇인지 이해하는 것입니다. IoC, DI, 컨테이너 먼저 IoC, DI, 컨테이너가 무엇인지 알아보겠습니다. IoC(Inversion of Control): 제어의 역전 IoC는 객체의 생성부터 소멸까지 객체의 모든 생명주기를 개발자가 아닌 컨테이너가 담당하는 것을 의미합니다[2]. 원래 개발자가 해왔던 일을 컨테이너라는 객체 관리 프로그램이 .. 2022. 1. 3.
3-1. 스프링 핵심 원리 이해2 - 객체 지향 원리 이용(AppConfig) OCP, DIP를 지키려면 클라이언트가 구체 클래스에 의존하지 않아야 하는데, 이것이 어떻게 가능할까요? 안녕하세요. 오늘은 '섹션 3. 스프링 핵심 원리 이해 2 - 객체 지향 원리 이용' 중 앞부분을 리뷰하겠습니다. 저번 시간에 회원, 주문, 할인 서비스를 자바 코드로 만들어보았습니다. 인터페이스와 구현체를 나눠서 잘 설계된 것으로 보였는데요. 여전히 좋은 객체 지향 설계 원칙 중 SRP, OCP, DIP를 지키지 못하는 문제가 있어서 AppConfig 를 활용해 해결하는 것이 오늘 강의의 핵심 내용입니다. 저번 시간에 완성한 도메인 다이어그램은 아래와 같습니다. 할인 정책 변경 할인 정책에 초점을 두고 생각해봅시다. 만약 할인 정책이 정액 할인 정책(정해진 금액만큼 할인)에서 정률 할인 정책(정해진.. 2022. 1. 2.