Spring
-
Spring - 컴포넌트 스캔(Component Scan)Spring/Spring 2022. 1. 23. 21:47
컴포넌트 스캔(Component Scan) 스프링 빈을 등록할 때 @Bean 어노테이션을 이용하여 설정 정보에 직접 등록할 스프링 빈을 나열했다. 등록해야 할 스프링 빈이 많을 경우에는 설정 정보도 커지고 누락하는 문제가 발생한다. 이러한 문제를 해결하기 위해 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록해주는 컴포넌트 스캔이라는 기능을 제공한다. 의존 관계도 자동으로 주입하는 @Autowired라는 기능도 제공한다. 컴포넌트 스캔을 하게 되면 AppConfig에서 해주었던 빈 등록을 하지 않아도 된다. 대신 @Component 어노테이션이 붙은 클래스를 스캔하여 스프링 빈으로 등록하게 된다. 컴포넌트 스캔은 해당 패키지부터 하위 패키지까지 스캔해준다. @Configuration @Compone..
-
Spring - 싱글톤 컨테이너Spring/Spring 2022. 1. 23. 16:05
싱글톤 컨테이너 웹 어플리케이션은 싱글톤을 사용한다. 그 이유는 웹 어플리케이션을 이용하는 사람은 1명이 아닌 여러 사람이 동시 다발적으로 이용한다. 때문에 싱글톤을 사용하지 않으면 n명의 고객이 웹 요청시 n개의 인스턴스를 만들어 메모리 낭비가 심해지기 때문이다. 이제 순수 DI 컨테이너부터 만들어가며 왜 싱글톤 컨테이너가 필요한지 알아보자. 순수 DI 컨테이너 앞에 블로깅한 코드에서 스프링 컨테이너를 사용하지 않으면 어떻게 될까? 테스트를 해보자. @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer(){ AppConfig appConfig = new AppConfig(); MemberService memberService1 = appConfig...
-
Spring - 스프링 컨테이너(Spring Container)와 종류, 그리고 Bean 조회 방법Spring/Spring 2022. 1. 18. 23:28
스프링 컨테이너(Spring Container) 스프링 컨테이너는 자바 객체의 생명 주기를 관리한다. 지금까지 포스팅해왔던 순수 자바 코드로 개발자가 직접 해왔던 작업들을 스프링 컨테이너가 객체를 등록, 소멸의 역할을 대신해주게 된다. 즉, 개발자가 흐름을 제어하는 것이 아닌 외부(스프링 컨테이너)에서 제어해주게 된다는 뜻이다. - 제어의 역전(IoC) 또한 스프링 컨테이너는 객체를 등록한 후 각 객체들의 의존 관계를 런타임 과정에서 설정해준다. - 의존관계주입(DI) 이전 포스팅한 코드로 스프링 컨테이너에 객체를 어떻게 등록하고 어떻게 의존관계가 설정되는지 알아보자. 스프링 컨테이너에 설정 클래스 등록 지금까지 작성한 설정 클래스(AppConfig)를 스프링 컨테이너에 등록해보자. Application..
-
스프링의 등장 - 순수 자바 코드에서 스프링까지 3 , IoC(제어의 역전)와 Di 그리고 등장하는 스프링Spring/Spring 2022. 1. 16. 23:40
IoC(Inversion of Control) - 제어의 역전 기존 프로그램은 클라이언트 구현 객체가 서버 구현 객체를 생성, 연결, 실행하여 스스로 제어 흐름을 조종했지만 AppConfig를 이용하여 구현 객체는 실행만 담당하게 되었다. 즉, 클라이언트 구현 객체는 실행만 담당하고, 프로그램의 제어 흐름을 AppConfig가 가져오게되었다. 클라이언트 구현 객체들은 어떤 구현 객체를 갖는지 신경을 안쓰게 되고 자신의 로직만 실행하게 되었다. 이렇듯 프로그램의 제어 흐름을 직접 제어하는 것이 아닌 외부에서 관리하는 것을 제어의 역전(IoC)라 한다. DI(Dependency Injection) - 의존관계 주입 DI 정적인 의존 관계 정적인 의존관계는 애플리케이션을 실행하지 않아도 분석할 수 있다. 즉,..
-
스프링의 등장 - 순수 자바 코드에서 스프링까지 2Spring/Spring 2022. 1. 16. 23:22
현재까지 작성한 코드에서 문제가 있다. 바로 OCP, DIP 위반이다. 왜 OCP, DIP 위반일까? 지금 현재 FixDicountPolicy를 이용하였다. 근데 만약에 회사의 요구사항으로 RateDiscounPolicy 정책으로 바뀐다고 해보자. 그럼 어떻게 될까? 새로 RateDicountPolicy 정책으로 할인 정책을 바꿀때 OCP, DIP 위반이 발생한다. 다음 코드를 보자. public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository = new MemoryMemberRepository(); //private final DiscountPolicy discountPolicy ..
-
스프링의 등장 - 순수 자바 코드에서 스프링까지 1Spring/Spring 2022. 1. 15. 03:07
스프링의 등장 1 - 과거 순수 자바 코드 과거에는 어떻게 개발을 했고, 왜 스프링이 등장하게 되었는지 알아보자. 회원 클래스 다이어그램 위 클래스 다이어그램으로 순수 자바 코드를 작성해보자. 또한 순수 자바 코드를 작성하면서 단위 test도 진행해보자. '역활'과 '구현'을 잘 나누어서 구현하자. 이제 코딩을 시작해보자. 단 코딩할때 유의할점.. 바로 단위 테스트이다. 실무에서도 중요한게 항상 단위 테스트를 작성하여 에러가 없는지 확인하낟. 위 클래스 다이어 그램대로 코딩을 했으면 바로 단위 테스트를 해보자. 회원 등록 단위테스트 package hello.core.member; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.T..
-
SOLID - SRP, OCP, LSP, ISP, DIPSpring/Spring 2022. 1. 14. 23:34
SOLID SOLID란 클린 코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정했는데 그 원칙들의 앞글자를 가져와 SOLID라 부른다. 이 원칙을 알아야 하는 이유는 시스템의 기능이 확장되거나 변동사항이 있을 때, 객체지향적인 설계가 추구하는 점인 기존의 시스템들이 영향을 받지 않도록 하기 위해서이다. SOLID의 5대 원칙 SRP 단일 책임 원칙(Single Responsibility Principle) "어떤 클래스를 변경해야 하는 이유는 오직 하나 뿐이어야 한다." -로버트 C. 마틴 하나의 클래스는 단 하나의 책임만 가져야 한다. 변경이 있을 때 파급효과가 적으면 단일 책임 원칙을 잘 따른 것이다. 객체 간의 응집도를 최대화하고 객체 간의 결합도를 최소화하는 것이 좋은 프로그램이..
-
객체 지향 프로그래밍 (OOP, Object-Oriented Programming)Spring/Spring 2022. 1. 13. 22:45
객체 지향 프로그래밍 (OOP, Object-Oriented Programming) 객체 지향 프로그래밍은 프로그램을 수많은 '객체'라는 기본 단위로 나누고 이들이 상호작용으로 서술하는 방식이다. 객체는 하나의 역활을 수행하는 '메소드와 변수'의 묶음으로 볼 수있다. 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어개발에 많이 사용된다. 유연하고 변경이 용이하라는 말이 무엇일까? 바로 바로 객체 지향 언어의 특징 중 하나인 '다형성'을 말한다. 이 다형성으로 클라이언트는 대상의 인터페이스만 알면 인터페이스를 상속받는 인스턴스의 내부 구조를 몰라도 된다. 즉, 클라이언트는 인터페이스를 사용만하면 되기때문에 인스턴스의 내부 구조가 변경되어도 클라이언트는 아무런 영향을..