Back-End/Spring Boot
-
[Spring Boot] Bean 생명주기 (Life cycle) 콜백Back-End/Spring Boot 2022. 10. 11. 00:02
📑 스프링 컨테이너 생명주기 스프링컨테이너에 대표적인, 아주 기본적인 생명주기를 살보자면 아래와 같다. 1. ApplicationContext를 이용해 객체를 생성하고 스프링 컨테이너를 초기화 한다 . 2. getBean()과 같은 메서드를 이용해서 컨테이너에 있는 빈 객체를 사용한다. 3. close() 메서드를 이용해 컨테이너를 종료한다. 📌 컨테이너 초기화 작업 : 빈 객체 생성, 초기화 및 의존 객체를 주입 📌 컨테이너 종료 : 빈 객체를 소멸하는 작업 빈 객체의 생명 주기는 객체 생성 -> 의존 설정 -> 초기화 -> 소멸 과정이다. 1. 스프링 컨테이너를 초기화 할 때, 가장 먼저 빈 객체를 생성한다. 2. 빈 객체 생성 후, 의존을 설정한다. 즉) 의존성 주입을 한다. 3. 모든 의존 설정이..
-
[Spring Boot] 빈 스코프 범위 (싱글톤, 프로토타입, 웹)Back-End/Spring Boot 2022. 10. 6. 11:01
📑 빈 스코프란? 앞서 살펴본 포스팅에서 스프링 빈이 스프링 컨이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때까지 유지된다고 알아보았다. 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 여기서) 스코프는 빈이 존재할 수 있는 범위를 의미한다. 스프링은 다음과 같은 스코프를 지원한다. 📌 싱글톤 : 기본 스코프로, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 📌 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 📌 웹 관련 스코프 request : HTTP 요청 하나가 들어오고 나갈 때 까지 유지되는 스코프로, 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고 관..
-
[Spring Boot] 생성자 주입이란? + @Autowired 옵션 처리Back-End/Spring Boot 2022. 10. 4. 00:20
의존관계 주입은 크게 생성자, 수정자(setter), 드, 일반 메서드 주입과 같이 4가지가 있는데 생성자 주입이 가장 이상적인 방법이다. 생성자 주입을 사용하자.! 📑 생성자 주입 생성자 주입이란 이름 그대로 생성자를 통해 의존 관계를 주입 받는 방법이다. 생성자 호출 시점에 딱 1번만 호출되는 것이 보장되며 불변, 필수 의존 관계에 사용한다. 생성자가 1개만 있다면 @Autowired를 생략해도 자동 주입이 된다. 물론 스프링 빈에만 해당한다. @Component public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; //final이 붙어 있음 값을 세팅해줘야한다.! pr..
-
[Spring Boot] 컴포넌트 스캔과 의존관계 자동 주입Back-End/Spring Boot 2022. 10. 3. 18:34
📑 @ComponentScan 이란? 아래 코드를 보면 스프링 빈을 등록할 때는 @bean을 통해 설정 정보에 직접 등록할 스프링 빈을 나열했다. 예제에서는 몇개 안되었지만, 만약 수천개, 수만개가 되면 일일이 등록하기 귀찮고, 설정 정보도 커지게 된다. 그럴 때 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 또한 의존관계도 자동으로 주입하는 @Autowired라는 기능을 제공한다. 더보기 스프링 컨테이너는 @Configuration이 붙은 AppConfig를 설정(구성) 정보로 사용한다. 여기서 @Bean이라 적힌 메서드를 모두 호출해 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다. //구성 정보..
-
[Spring Boot] 싱글톤 패턴 vs 싱글톤 컨테이너 ( @Configuration)Back-End/Spring Boot 2022. 10. 1. 12:40
📑 웹 애플리케이션과 싱글톤 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 다. 그때 DI 컨테이너에서는 요청할 때 마다 객체를 새로 생성한다. 예를들어 같은 memberService를 호출했을 때 결과값은 다 다른 주소값을 가진 다른 객체들을 생성한다. 이는 메모리 낭비가 심하다. 따라서 객체 1개만 생성되고, 이 객체를 공유하도록 설계하면 된다. 이게 바로 싱글톤 패턴인 것.! @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer(){ AppConfig config = new AppConfig(); //1. 조회 : 호출할 때마다 객체 생성 MemberService memberService = config.memberService(); //2...
-
[Spring Boot] 스프링 컨테이너 ApplicationContext 생성과 빈 등록, 의존 관계 설정Back-End/Spring Boot 2022. 9. 30. 13:22
앞에서 순수 자바 코드를 이용해 DIP, OCP 원칙을 지키며 MVC 패턴에 맞춰 프로젝트를 작성하는 방법에대해 알아봤다면, 이번엔 스프링으로 전환해서 DI를 적용해보려고 한다. 📑 스프링 적용하기 일단) 애플리케이션의 전체 동작 방식을 구성하기 위해, 구현 객체를 생성하고, 연결하는 역할을 했던, AppConfig 메서드에 @Configuration, @Bean 어노테이션을 붙여준다. //구성 정보, 설정 정보에 Configuration 어노테이션을 붙여준다. @Configuration public class AppConfig { //key는 메서드 이름 memberService() //value는 return 값으로 스프링 컨테이너에 등록된다. @Bean public MemberService memb..
-
[JAVA 객체 지향 설계의 원칙] OCP, DIP 예제로 완전 정복 ( + 관심사 분리)Back-End/Spring Boot 2022. 9. 30. 01:47
스프링 핵심 원리 - 기본편에서 섹션 2, 3 의 내용을 바탕으로 객체 지향 설계의 원칙 중 OCP(Open-Close Principle), DIP(Dependency Inversion Principle)에 대해 자세히 알아보려고 한다. 좋은 객체 지향 설계의 원칙 5가지는 아래 포스팅에 자세히 설명되어 있으니 참고 바람. https://wonisdaily.tistory.com/98 [Spring 개념] 객체 지향 설계와 스프링 나는 스프링의 원리에 대해 잘 이해하고 있는가?라고 질문하면 아니라고 말할 수 있다. 이번에 면접 준비를 하면서 기본 개념들에 대해 알아보는 시간을 가졌는데, 짧은 시간에 많은 개념을 맛 wonisdaily.tistory.com 📑 비즈니스 요구사항과 설계 DIP와 OCP 원칙을..
-
[Spring 개념] 객체 지향 설계와 스프링Back-End/Spring Boot 2022. 9. 29. 12:24
나는 스프링의 원리에 대해 잘 이해하고 있는가?라고 질문하면 아니라고 말할 수 있다. 이번에 면접 준비를 하면서 기본 개념들에 대해 알아보는 시간을 가졌는데, 짧은 시간에 많은 개념을 맛보기로 알 수 있었다. 이상태론 취업을 한다고 해도 내 실력과 이해력에 내가 먼저 지칠 것 같아 다시 탄탄하게 스프링에대해 공부해보려고 한다. 기간은 2달 정도로 잡았고 인프런 김영한 강사님의 스프링 완전 정복 로드맵을 파고들 예정이다. 무려 52만원이나 주고 구매했다는,, 열심히 배워서 작은 프로젝트라도 하나 만들고 포트폴리오 다시 재정비해서 올해안에 취업하는게 새로운 목표다.! 📑 스프링 프레임워크와 스프링 부트 Spring Framework와 Spring Boot는 스프링을 공부했다고 하면 필수로 알아야될 부분인데,..