본문 바로가기
728x90

전체 글69

빈 스코프 빈 스코프 란? 지금까지 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때 까지 유지된다고 알고있었다. 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 스프링은 싱글톤 스코프 말고도 다양한 스코프를 지원한다. 빈 스코프 종류 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작부터 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 : 스프링 컨테이너 프로토타입 빈의 생성과 의존 관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 웹 관련 스코프 request : 웹 요청이 들어오고 나갈때 까지 유지되는 스코프 session : 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프 application : 웹의 서블릿 컨텍스트와 같은 범위로 유.. 2022. 12. 18.
빈 생명주기 콜백 빈 생명 주기 콜백 시작 데이터베이스 커네션 풀이나, 네트워크 소켓 처럼 어플리케이션 시작 시점에 필요한 열결을 미리 해두고, 어플리케니션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 스프링 빈은 객체를 생성하고 의존 관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다. 따라서 초기화 작업은 의존 관계 주입이 모두 완료도히고 난 다음에 호출해야 한다. 의존 관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 알려줘서 안전하게 초기화와 소멸 작업을 할 수 있다. 스프링 빈의 이벤트 라이프사이클 스프링 컨테이너 생성 → 스프링 빈.. 2022. 12. 18.
의존 관계 자동 주입 다양한 의존 관계 주입 방법 생성자 주입 수정자 주입(setter) 필드 주입 일반 메서드 주입 생성자 주입 이름 그대로 생성자를 통해서 의존 관계를 주입 받는 방법 생성자 호출시점에 딱 1번만 호출되는 것이 보장 불변, 필수 의존 관계에 사용 @Component public class OrderServiceImpl implements OrderService { private MemberRepository memberRepository; private DiscountPolicy discountPolicy; // 생성자가 딱 1개만 있으면 @Autowire 생략 가능 @Autowire public OrderServiceImpl(MemberRepository memberRepository, DiscountP.. 2022. 12. 18.
싱글톤 컨테이너 싱글톤 컨테이너 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 웹 어플리케이션은 보통 여러 고객이 동시에 요청을 함. 예를 들어 고객 트래픽이 초당 100이면 100개의 객체가 생성이되고 소멸이 되어 메모리 낭비가 심함 이러한 문제를 해결하기 위해 객체가 딱 1번만 생성되어 공유하도록 하는 싱글톤 패턴이 나옴 객체가 2개 이상 생성되는 것을 막기 위해 constructor의 접근자를 private 으로 사용해야 함. 생성자를 private으로 만들면 new 키워드를 사용하여 인스턴스 생성을 하지 못 함 싱글톤의 패턴의 문제점 싱글톤 패턴을 구현하는 코드 자체가 많이 들어감 의존관계상 클라이언트가 구현체 클래스에 의존. DIP 위반, OCP 위반 가능성 높아짐 테스트하기가 .. 2022. 12. 18.
OOP 5가지 원칙 SOLID과 IoC, DI SRP - Single Responsibility Principle 한 클래스는 단일의 책임만 가져야 함 중요한 기준은 변경임. 변경이 있을 때 파급 효과가 적으면(수정할 부분이 적으면) 단일 책임 원칙을 잘 따른 것 결제 기능으로 예를 들면 payment는 PaymentService, TMS는 TmsService 이렇게 기능별로 분리해주는 것이 좋음. 분리를 하게 되면 서로 수정을해서 충돌이 날 확률이 적어지고 역할에 해당하는 서비스를 찾기 쉬움 OCP - Open/Closed Principle 클래스나 모듈은 확장에는 열려있고, 변경에는 닫혀있어야 함 다형성을 활용하여 인터페이스를 구현한 새로운 클래스를 하나 만들어 새로운 기능을 구현하는것이 좋음 객체를 생성하고 연관관계를 맺어주는 별도의 조립자, .. 2022. 12. 18.
8.인덱스 - B-Tree Index 2022.12.14 - [RealMySQL] - 8.인덱스 - 인덱스란? 8.인덱스 - 인덱스란? 이번 포스트에서는 MySQL의 인덱스에 대해서 알아보겠습니다. 인덱스 DBMS에서 데이터의 저장(INSERT, UPDATE, DELETE)성능을 희생하고 그 대신 데이터의 읽기 속도를 높이는 기능입니다. SELECT 쿼리 문장 rbsks.tistory.com 전 포스트에 이어서 B-Tree 인덱스에 대해서 자세히 알아보도록 하겠습니다. B-Tree Index(Balanced Tree Index) B-Tree는 컬럼의 원래 값을 변경하지 않고 인덱스 구조체 내에서 항상 정렬된 상태로 유지됩니다. 전문 검색과 같은 특수한 요건이 아닌 경우를 제외하고 대부분의 인덱스는 거의 B-Tree를 사용할 정도로 일반적인 .. 2022. 12. 18.
728x90