본문 바로가기

Backend/Spring

(8)
[Spring] 빈 스코프 인프런의 을 듣고 공부 용도로 정리한 글 입니다. 빈 스코프란? 말 그대로 빈이 존재할 수 있는 범위를 뜻한다. 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입 : 프로토타입 빈의 생성과 주입까지만 관여하고 더는 관리하지 않는 짧은 범위의 스코프이다. 웹 관련 스코프 request : 웹 요청이 들어오고 나갈때 까지 유지되는 스코프이다. session : 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프이다. application : 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프이다. 프로토타입 스코프 싱글톤 스코프의 빈을 조회하면 스프링 컨테이너는 항상 같은 인스턴스의 스프링 빈을 반환하는 반면에 프로토타입 스코프를 컨테이너에서 조회..
[Spring] 빈 생명주기 콜백 인프런의 을 듣고 공부 용도로 정리한 글 입니다. 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작을 위해 객체의 초기화 작업과 종료 작업이 필요하다. 스프링에서는 이 작업을 어떻게 진행하는 지 알아보자. 예제: NetworkClient는 애플리케이션 시작 시점에 connect()를 호출하여 연결을 맺고, 종료되면 disconnect()를 호출하여 연결을 끊는다. public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); connect(); call("초기화 연결 메시지") } public void s..
[Spring] 의존관계 자동 주입 인프런의 을 듣고 공부 용도로 정리한 글 입니다. 의존관계 주입 방법 생성자 주입 수정자 주입 필드 주입 일반 메서드 주입 생성자 주입 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPol..
[Spring] 컴포넌트 스캔 인프런의 을 듣고 공부 용도로 정리한 글 입니다. 앞에서 @Bean을 통해서 설정 정보에 하나하나 직접 스프링 빈을 등록했던 것을 기억할 것이다. 실제 개발 환경에서는 훨씬 많은 양의 빈들을 등록할 일이 생길텐데 하나하나 등록하게 된다면 매우 귀찮고 누락되는 문제도 발생할 것이다. 그래서 스프링에서는 설정 정보없이 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 빈 등록 뿐만이 아닌 의존관계 역시 자동으로 주입해주는 @Autowired 기능도 제공한다. @Configuration @ComponentScan( basePackages = "hello.core.member", basePackageClasses = AutoAppConfig.class, excludeFilters = @Comp..
[Spring] 싱글톤 컨테이너 인프런의 을 듣고 공부 용도로 정리한 글 입니다. 싱글톤 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 특히 웹 애플리케이션에서는 보통 여러 고객이 동시에 요청을 한다. 스프링 없이 순수하게 만들었던 DI 컨테이너인 AppConfig를 생각해보면 요청을 할 때 마다 객체를 새롭게 생성한다는 것을 알 것이다. 그렇다면 고객 트래픽이 많아지면 그 만큼 객체가 생성되고 소멸되고 하게 되는데 이 경우는 메모리 낭비가 너무 심해지게 된다. 이를 위한 해결방안은 해당 객체를 딱 1개만 생성되게 하고 이를 공유하도록 하는 것이다. 이런 패턴을 싱글톤 패턴이라 한다. 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 객체를 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. -..
[Spring] 스프링 컨테이너와 스프링 빈 인프런의 을 듣고 공부 용도로 정리한 글 입니다. 스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); 위의 명령어로 스프링 컨테이너를 생성할 수 있다. 스프링 컨테이너는 XML 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. 위에서는 애노테이션 기반으로 만들어졌다. 생성 과정 1. AppConfig.class를 보고 스프링 빈을 등록한다. 2. 스프링 빈 의존관계를 설정한다. * 사실 자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존관계 주입이 한번에 처리되지만 개념적으로 나누었다. BeanFactory와 Applicatio..
[Spring] 객체 지향 원리 적용하기 인프런의 을 듣고 공부 용도로 정리한 글 입니다. 기능 변경하기 예제로 어떤 제품의 할인 정책을 바꿔보면서 어떤 문제점들이 있는 지 알아보겠다. 다형성을 이용하여 역할과 구현을 나눠 개발하였다. 따라서 정책 역할에 원하는 구현체만 갖다 낀다면 쉽게 할인 정책을 바꿀 수 있을 거 같다. 아래 그림처럼 할인 정책의 구현체로는 FixDiscountPolicy와 RateDiscountPolicy가 있다. 현재는 FixDiscountPolicy를 사용하고 있으며 RateDicountPolicy로 변경할 계획이다. public class OrderServiceImpl implements OrderService { // private final DiscountPolicy discountPolicy = new FixD..
[Spring] 객체 지향 설계와 스프링 인프런의 을 듣고 공부 용도로 정리한 글 입니다. 스프링 왜 사용할까? 스프링은 자바 언어 기반의 프레임 워크이다. 자바 언어의 가장 큰 특징은 객체 지향 언어라는 것은 누구나 알 것이다. 스프링 이전에는 자바 진영의 표준 기술로 EJB를 사용하였는데 EJB는 매우 느리고 배우기도 어렵다는 단점이 있었다. 더 큰 문제는 EJB에 의존적으로 개발해야 하기 때문에 객체 지향적으로 개발할 수 없었다는 것이다. 스프링은 객체 지향 언어가 가진 강력한 특징을 살릴 수 있도록 도와준다. 즉, 스프링의 핵심은 좋은 객체 지향 애플리케이션을 개발할 수 있도록 도와준다는 것이다. 객체 지향 프로그래밍? 스프링의 핵심은 좋은 객체 지향 프로그래밍을 할 수 있도록 도와준다고 하였다. 그럼 좋은 객체 지향이란 무엇일까? 우선..