👩🏻‍💻개발/Spring

👩🏻‍💻개발/Spring

[스프링 기본] 섹션9. 빈 스코프

1. 빈 스코프란? 스프링은 다양한 스코프를 지원한다. 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 웹 관련 스코프 request: 웹 요청이 들어오고 나갈때 까지 유지되는 스코프이다. session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프이다. application: 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프이다. 2. 프로토타입 스코프 싱글톤 스코프의 빈을 조회하면 스프링 컨테이너는 항상 같은 인스턴스의 스프링 빈을 반환한다. 반면에 프로토타입 스코프를 스프링 컨테이너에 조회하면 스프링 컨테이너는 ..

👩🏻‍💻개발/Spring

[스프링 기본] 섹션8. 빈 생명주기 콜백

1. 빈 생명주기 콜백 시작 스프링 빈은 객체 생성 -> 의존관계 주입 이라는 라이프사이클을 가진다. 스프링 빈의 이벤트 라이프사이클 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸 전 콜백 -> 스프링 종료 초기화 콜백: 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출 소멸전 콜백: 빈이 소멸되기 직전에 호출 스프링은 크게 3가지 방법으로 빈 생명주기 콜백을 지원한다. 인터페이스 (InitializingBean, DisposableBean) 설정 정보에 초기화 메서드, 종료 메서드 지정 @PostConstruct, @PreDestroy 애노테이션 지원 2. 인터패이스 InitializingBean, DisposableBean 초기화, 소멸 인터..

👩🏻‍💻개발/Spring

[스프링 기본] 섹션7. 의존관계 자동 주입

1. 다양한 의존관계 주입 방법 생성자 주입 생성자를 통해 의존관계를 주입 받는 방법 특징 생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다 불변, 필수 의존관계에 사용 수정자 주입 (setter 주입) setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방법 특징 선택, 변경 가능성이 있는 의존관계에 사용 자바 빈 프로퍼티 규약의 수정자 메서드 방식을 사용하는 방법 필드 주입 필드에 바로 주입하는 방법 특징 코드가 간결하지만 외부에서 변경이 불가능해서 테스트하기 힘듦 DI 프레임워크가 없으면 아무것도 할 수 없다. 애플리케이션의 실제 코드와 관계 없는 테스트 코드에 사용 스프링 설정을 목적으로 하는 @Configuratiton 같은 곳에서만 특별한 용도로 사용 일반..

👩🏻‍💻개발/Spring

[스프링 기본] 섹션6. 컴포넌트 스캔

1. 컴포넌트 스캔과 의존관계 자동 주입 시작하기 이전까지 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다. 그러나 여러 문제점과 불편함 때문에 이번 강의에서는 새로운 방식으로 접근해보려고 한다. 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 또 의존관계도 자동으로 주입하는 @Autowired라는 기능도 제공한다. @Autowired는 의존관계를 자동으로 주입해준다. 컴포넌트 스캔을 사용하라면 먼저 @ComponentScan을 설정 정보에 붙여주면 된다. 기존의 AppConfig와는 다르게 @Bean으로 등록한 클래스가 하나도 없다. 컴포넌트 스캔은 이름 그대로 @Component 애..

👩🏻‍💻개발/Spring

[스프링 기본] 섹션5. 싱글톤 컨테이너

1. 웹 애플리케이션과 싱글톤 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 웹 애플리케이션은 보통 여러 고객이 동시에 요청한다. 스프링 없는 순수한 DI 컨테이너인 AppConfig는 요청할 때마다 객체를 새로 생성한다. -> 메모리 낭비가 심하다 -> 해결책 : 싱글톤 패턴 2. 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 함 -> private 생성자를 사용해서 외부에서 임의로 new 키워드 사용하지 못하게 막음 싱글톤 패턴 문제점 싱글톤 패턴을 적용하면 고객의 요청이 올 때마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효율적..

👩🏻‍💻개발/Spring

[스프링 기본] 섹션4. 스프링 컨테이너와 스프링 빈

1. 스프링 컨테이너 생성 2. 컨테이너에 등록된 모든 빈 조회 모든 빈 출력하기 - 실행하면 스프링에 등록되 모든 빈 정보를 출력할 수 있다. - ac.getBeanDefinitionNames(): 스프링에 등록된 모든 빈 이름을 조회한다 - ac.getBean() : 빈 이름으로 빈 객체 (인스턴스)를 조회한다 애플리케이션 빈 출력하기 - 스프링이 내부에서 사용하는 빈은 제외하고, 내가 등록한 빈만 출력해보자 - 스프링이 내부에서 사용하는 빈은 getRole()로 구분할 수 있다. - ROLE_APPLICATION: 일반적으로 사용자가 정의한 빈 - ROLE_INFRASTRUCTURE: 스프링이 내부에서 사용하는 빈 3. 스프링 빈 조회 - 기본 스프링 컨테이너에서 스프링 빈을 찾는 가장 기본적인 조..

👩🏻‍💻개발/Spring

[스프링 기본] 섹션 3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용

새로운 할인 정책 개발 RateDiscountPolicy 추가 새로운 할인 정책 적용과 문제점 => 인터페이스에만 의존하도록 설계를 변경하자 해결방안 이 문제를 해결하려면 누군가가 클라이언트인 OrderServiceImpld에 DiscountPolicy의 구현 객체를 대신 생성하고 주입해주어야 한다. 관심사의 분리 이전 코드는 배우가 기획도 하고 여자주인공 다 섭외해야 하는 "다양한 책임"을 가지고 있었다. 관심자를 분리하자. AppConfig 등장 애플리케이션의 전체 동작 방식을 구성하기 위해, 구현 객체를 생성하고, 연결하는 책임을 가지는 변도의 설정 클래스를 만들자. AppConfig는 애플리케이션의 실제 동작에 필요한 구현 객체를 생성한다. - MemberServiceImpl - MemoryMem..

👩🏻‍💻개발/Spring

[스프링 기본] 섹션 2. 스프링 핵심 원리 이해1 - 예제 만들기

스프링 적용하지 않고 순수한 java만 이용해서 프로젝트 생성해보자. 회원 도메인 설계, 개발, 실행과 테스트 MemberServiceImpl이 MemoryMemberRepository를 직접 생성하고 있다. MemoryMemberRepository를 다른 구현체로 교체한다고 했을 때, 현재 구조는 OCP 원칙을 준수하지 X, DIP를 준수하는지 X 결론적으로, MemberServiceImpl이 인터페이스뿐 아니라 구현체에도 의존하기에 발생하는 문제점이다. 주문과 할인 도메인 설계, 개발, 실행과 테스트 위의 설계에 맞게 강사님이 알려주시는 대로 같이 코딩하면 된다. OrderServiceImpl이 가진 문제점도 MemberServiceImpl이 가진 문제와 동일하다. 추후에 새로운 할인 정책이 추가돼서..

바규냐하
'👩🏻‍💻개발/Spring' 카테고리의 글 목록 (2 Page)