FrameWork/Spring&Spring-boot
-
Spring 기본 19 - 필터FrameWork/Spring&Spring-boot 2023. 11. 14. 13:06
includeFilters : 컴포넌트 스캔 대상을 추가로 지정한다. excludeFilters: 컴포넌트 스캔에서 지외할 대상을 지정한다. @Target(), @Retention, @Documented, @Indexed 해당 어노테이션에 Type레벨에 붙을 것인지 Field레벨에 붙을 것인지 지정하는 것이다. 위 어노테이션이 붙은 것은 컴포넌트 스캔에 추가 할 것 이라는 의미이다. 두개의 어노테이션 생성 생성한 어노테이션을 사용하는 Java 설정 클래와 테스트 public class ComponentFilterAppConfigTest { @Test void filterScan(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicat..
-
Spring 기본 18 - 탐색 위치와 기본 스캔 대상FrameWork/Spring&Spring-boot 2023. 11. 14. 10:36
탐색 위치와 기본 스캔 대상 탐색 위치와 기본 스캔 대상 모든 자바 클래스를 다 컴포넌트 스캔 하면 오래 걸린다. 그래서 꼭 필요한 위치부터 탐색하도록 시작 위치를 지정할 수 있다. basePackages = "hello.core.member" @Configuration @ComponentScan( basePackages = "hello.core.member", excludeFilters = @ComponentScan.Filter( type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { } 위와 같이 설정하면 member 패키지만 컴포넌트 스캔에 대상이된다. @ComponentScan( baseP..
-
스프링 기본 17 - 컴포넌트 스캔FrameWork/Spring&Spring-boot 2023. 11. 13. 14:22
컴포넌트 스캔과 의존관계 자동 주입 시작하기 지금까지 스프링 빈을 등록할 때 는 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다. 예제에서는 몇개가 안되었지만, 이렇게 등록해야 할 스프링 빈이 수십, 수백개가 되면 일이이 등록하기도 힘들고, 설정정보 파일의 크기도 커질 뿐더러, 등록되어야 할 메서드가 누락되는 문제도 발생한다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 또 의존관계도 자동으로 주입하는 @Autowired라는 기능도 제공한다. 코드로 컴포넌트 스캔과 의존관계 자동 주입을 알아 보자 먼저 기존 AppConfig.java는 과거 코드와 테스트를 유지하기 위해 남겨두고, 새로운 AutoAp..
-
Spring 기본 15 - @Configuration과 싱글FrameWork/Spring&Spring-boot 2023. 11. 13. 10:16
다음 AppConfig코드르 살펴보자 @Configurable public class AppConfig { //@Bean memberService() -> new MemoryMemberRepository() //@Bean orderService() -> new MemoryMemberRepository() //new MemoryMemberRepository()가 두번 호출 되었는데 //그러면 싱글톤이 깨진거 아닐까? @Bean public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService(){ return new OrderServiceImp..
-
Spring 기본 15 - 싱글톤 방식의 주의점FrameWork/Spring&Spring-boot 2023. 11. 13. 09:25
싱글톤 방식의 주의점 싱글톤 패턴이든, 스프링 같은 싱글톤 컨테이너를 사용하든, 객체 인스턴스를 하나마 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안된다. ⭐무상태(stateless)로 설계해야 한다. 특정 클라이언트에 의존적인 필드가 있으면 안된다. 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안된다. 가급적 읽기만 해야 한다. 필드 대신에 자에서 공유되지 않는, 지역변수, 파라미터, ThreadLocal등을 사용해야 한다. 스프링 빈 필드에 공유 값을 설정하면 정말 ⛔큰 장애가 발생할 수 있다. 상태를 유지할 경우 발생하는 문제점 예 클라이언트 의도 주문한다음에 price에 값을 저장..
-
Spring 기본 14 - 싱글톤 컨테이너FrameWork/Spring&Spring-boot 2023. 11. 12. 17:30
싱클톤 컨테이너 웹 애플리케이션과 싱글톤 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 대부분 스프링 애플리케이션은 웹 애플리케이션이다. 물론 웹이 아닌 애플리케이션 개발도 얼마든지 할 수 있다. 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 객체 인스턴스가 해당 프로젝트의 JVM에 하나만 있어야 하는 패턴을 의미한다. 앞서 게시물에 작성한 코드를 기반으로 위 그림과 같이 고객이 요청을 3번을 하면 3개의 memberService 객체가 만들어진다. 즉 요청이 올때 마다 객체 인스턴스가 만들어 지고 있는 것이다. package com.hello.core.singleton; import com.hello.core.AppConfig; import com.hello.core...
-
도메인 주도 개발4 - Entity와 Value1FrameWork/Spring&Spring-boot 2023. 11. 12. 15:12
Entity와 Value1 도출한 모델은 크게 엔티티(Entity)와 밸류(Value)로 구분할 수 있다. 게시글요구사항 분석 과정에서 만든 모델은[그림 1.6]과 같은데 이 그림에는 엔티티도 존재하고 밸류도 존재한다. 엔티티와 밸류를 제대로 구분해야 도메인을 올바르게 설계하고 구현할 수 있기 때문에 이 둘의 차이를 명확하게 이해하는 것은 도메인을 구현하는데 있어 중요하다. 엔티티 엔티티의 가장 큰 특징은 식별자를 가진다는 것이다. 식별자는 엔티티 객체마다 고유해서 각 엔티티는 서로 다른 식별자를 갖는다. 예를 들어 주문 도메인에서 각 주문은 주문번호를 가지고 있는데 이 주문번호는 각 주문마다 서로 다르다. 따라서 주문번호가 주문의 식별자가 된다. 앞서 주문 도메인 모델에서 주문에 해당하는 클래스가 Or..
-
Spring 기본 13 - 스프링 빈 설정 메타 정보 - BeanDefinitionFrameWork/Spring&Spring-boot 2023. 11. 10. 17:44
스프링 빈 설정 메타 정보 - BeanDefinition 스프링은 어떻게 이런 다양한 설정 형식을 지원 하는 것일까? 그 중심에는 BeanDefinition이라는 추상화가 있다. 쉽게 이야기해서 *역할과 구현을 개념적으로 나눈 것* 이다. XML을 읽어서 BeanDefinition을 만들면 된다. 자바 코드를 읽어서 BeanDefinition을 만들면 된다. 스프링 컨테이너는 자바 코드인지, XML인지 몰라도 된다. 오직 BeanDefinition만 알면된다. BeanDefinition을 빈 설정 메타정보라 한다. @Bean, 당 각각 하나씩 메타 정보가 생성된다. 스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성한다. 즉 스프링 컨테이너 자체이 BeanDefinition에만 의존한다. 코드 레..