본문 바로가기

Web/spring study28

[Spring] 스프링 빈 생명주기 0. 개요 이번 게시물에서는 스프링 빈의 생명주기에 대해 작성할 것이다. 해당 게시물을 보기 전, 아래 링크의 글을 보고 오는 것을 추천한다. (스프링 빈과 스프링 컨테이너) 1. 스프링 빈 생명 주기 모든 설명에 나오는 예시 프로젝트의 설계 방식은 아래 링크를 참고 https://imgzon.tistory.com/114 개발자가 스프링 빈을 사용하기 위해서는 스브링 빈 객체가 생성되고, 의존관계가 주입된 후이다. 따라서 스프링에서는 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 따라서 스프링 빈의 라이프사이클을 정리해보면, 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료 - 초기화 콜백:.. 2023. 1. 10.
[Spring] 스프링 빈 조회 0. 개요 이번 게시물에서는 스프링 빈을 조회하는 법에 대해 작성할 것이다. 해당 게시물을 보기 전, 아래 링크의 글을 보고 오는 것을 추천한다. (스프링 빈과 스프링 컨테이너) 1. 빈 등록 모든 설명에 나오는 예시 프로젝트의 설계 방식은 아래 링크를 참고 https://imgzon.tistory.com/114 이번 게시물에서 조회 할 빈은 아래 게시물에서 자바 코드로 등록한 빈들이다. (스프링 빈 자바 코드로 수동 등록) 2. 스프링 컨테이너에 등록된 모든 빈 조회 class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @.. 2023. 1. 10.
[Spring] 싱글톤 패턴, 스프링 컨테이너, @Configuration 0. 개요 이번 게시물에서는 싱글톤, 스프링 컨테이너, @Configuration의 효과에 대해 작성할 것이다. 해당 게시물을 보기 전, 아래 링크의 글을 보고 오는 것을 추천한다. (스프링 빈과 스프링 컨테이너) 1. 싱글톤 패턴이 왜 필요할까? 모든 설명에 나오는 예시 프로젝트의 설계 방식은 아래 링크를 참고 https://imgzon.tistory.com/114 스프링은 기본적으로 온라인, 그중에서도 웹 애플리케이션을 개발하기 위해 탄생하였다.(물론, 웹이 아닌 애플리케이션 개발도 가능은 하다) 일반적인 웹 애플리케이션이라면, 보통 여러 고객들이 동시에 요청을 한다. 이때, 스프링을 적용하지 않은 순수한 DI 컨테이너로 작성한 경우, 요청을 받을때마다 객체를 새로 생성한다. -> 만일 요청이 1초에.. 2023. 1. 10.
[Spring] 컴포넌트 스캔(@ComponentScan), 의존관계 자동 주입, 롬복(lombok) 0. 개요 이번 게시물에서는 스프링 컨테이너에 스프링 빈을 컴포넌트 스캔으로 추가하는 방법에 대해 작성할 것이다. 해당 게시물을 보기 전, 아래 링크의 글을 보고 오는 것을 추천한다. (스프링 빈과 스프링 컨테이너) (스프링 빈 자바코드로 수동 등록) 1. 자바 코드로 수동 등록의 한계 모든 설명에 나오는 예시 프로젝트의 설계 방식은 아래 링크를 참고 https://imgzon.tistory.com/114 스프링 컨테이너를 @Bean을 통해서 수동 등록할 경우, 예제와 같이 3~4개정도면 충분히 작성 할 수 있다. 하지만 빈이 수백개가 된다면? 설정 정보 클래스도 커지고, 누락하는 문제도 발생할 수 있다. 그래서 스프링은 @ComponentScan을 통해 자동으로 스프링 빈을 등록하고, @Autowire.. 2023. 1. 10.
[Spring] 스프링 빈 자바 코드로 수동 등록(@Configuration, ApplicationContext) 0. 개요 이번 게시물에서는 스프링 컨테이너에 스프링 빈을 자바 코드(직접 만든 DI 컨테이너)로 추가하는 방법에 대해 작성할 것이다. 해당 게시물을 보기 전, 아래 링크의 글을 보고 오는 것을 추천한다. (스프링 빈과 스프링 컨테이너) 1. AppConfig 스프링 기반 변경 모든 설명에 나오는 예시 프로젝트의 설계 방식은 아래 링크를 참고 https://imgzon.tistory.com/114 우선 예시 프로젝트에서 사용할 DI 컨테이너를 작성해보자. public class AppConfig { public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } public OrderService order.. 2023. 1. 9.
[Spring] 스프링 빈과 스프링 컨테이너 0. 스프링 부트로 처음 접하면.. 스프링 부트로 스프링 개발을 처음 접하게 되면, 스프링 빈이라는 개념을 인지하지 못한체 개발을 시작하게 될 것이다. 책, 혹은 구글링한 코드를 보며 @SpringBootApplication, @RequiredArgsConstructor, @Controller, @Service와 같은 어노테이션을 쓰기만 해도 프로젝트가 정상적으로 작동하기 때문이다! 하지만 개발을 해보다 보면 "그래서 이게 어떤 원리로 작동하는 거지?", "이 어노테이션은 왜 붙이는거지?" 와 같은 궁금증이 생기게 된다. "@RequiredArgsConstructor가 final 혹은 @NotNull이 붙은 생성자를 생성해주는 건 알겠는데, 생성자가 왜 필요하지?" 같은 고민들을 해결하기 위해서는 우선 .. 2023. 1. 9.
[Spring] 예시 스프링 프로젝트 설계 0. 개요 이 게시물은 앞으로 작성할 스프링 게시물들에 등장할 예시 프로젝트의 구성을 설명하는 글이다. 1. 비즈니스 요구사항과 설계 예시 프로젝트의 구조는 크게 회원, 주문, 할인 정책 3가지로 나뉜다. - 회원 - 회원을 가입하고, 조회할 수 있다. - 회원은 일반, VIP 2가지 등급이 있다. - 회원 데이터는 자체 DB를 구축할 수도 있고, 외부 시스템과 연동할 수도 있다. - 주문과 할인 정책 - 회원은 상품을 주문할 수 있다. - 회원 등급에 따라 할인 정책을 적용할 수 있다. - 할인 정책은 변경 가능성이 높으며, 현제 2가지 정책을 고민하고 있다. - 1) 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용하자. - 2) 모든 VIP는 구매 금액의 10%를 할인해주는 정책을 적용하.. 2023. 1. 9.
[Spring] IOC, DI, 컨테이너 1. 제어의 역전 IOC (Inversion of Control) - 보통 프레임워크 없이 개발 할 경우, 객체의 생성, 설정, 초기화, 메서드 호출, 소멸, 즉 한 객체의 모든 것을 프로그래머가 직접 관리한다. - 하지만 프로그래머가 작성한 객체, 그리고 포함된 메서드를 개발자가 아닌, 외부에서 제어하는 것을 제어의 역전(IOC)이라고 한다. - 따라서 프로그래머는 핵심 코드 개발에 더 집중할 수 있고, 프로그램의 제어 책임은 프레임워크로 넘어간다는 장점이 있다. - 위에서 자주 나온 내용인 "프레임워크"와 우리가 일반적으로 사용하는 라이브러리를 구분하는 방법은 다음과 같다. -> 프레임워크 : 내가 작성한 코드를 제어하고, 대신 실행한다. -> 라이브러리 : 내가 작성한 코드를 직접 제어한다. (내가.. 2022. 12. 17.