반응형 Backend, Server53 [스프링] 컴포넌트 스캔, 탐색 위치, 중복 등록과 충돌 목표 컴포넌트 스캔을 이용하여 자동으로 스프링 빈을 등록하게 하자! 추가로 @Autowired 기능을 사용하면 의존관계도 자동으로 주입할 수 있게 된다! 컴포넌트 스캔 사용법 설정 정보에 @ComponentScan을 붙여주면 된다. 이때 추가 파라미터로 excludeFilters, includeFilters 등을 추가할 수 있다. @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) public class AutoAppConfig { } 그리고 스프링 빈으로 등록할 대상 클래스에 @Component을 달아주어야 한다. @Component public.. 2021. 12. 26. [스프링] 싱글턴 컨테이너, @Configuration의 역할 싱글턴 패턴 - 싱글턴 패턴은 인스턴스를 하나만 생성되게 한다. - 싱글턴 패턴에도 문제점이 있는데, 다음과 같음 - 의존관계상 클라이언트가 구체 클래스에 의존한다. - 테스트 하기 어렵다. - 내부 속성을 변경하거나 초기화하기 어렵다. - private 생성자로 자식 클래스를 만들기 어렵다. 싱글턴 컨테이너 - 스프링 컨테이너는 싱글턴 패턴의 문제점을 해결하면서, 객체 인스턴스를 싱글턴으로 생성함을 보장해준다. - 스프링 컨테이너는 싱글턴 패턴을 적용하지 않아도 알아서 싱글턴으로 객체 인스턴스를 관리해준다. 싱글턴 사용 시 주의점: 동기화 이슈 싱글톤 패턴이든, 스프링 같은 싱글톤 컨테이너를 사용하든, 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를.. 2021. 12. 26. [스프링] 스프링 컨테이너와 스프링 빈 스프링 컨테이너의 생성 /스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); - ApplicationContext는 인터페이스이며 이를 스프링 컨테이너라 함 - 인터페이스이기 때문에 XML기반으로 만들 수도 있고, 어노테이션 기반 클래스로 만들 수도 있음 (다양한 설정 형식을 지원할 수 있는 이유는 BeanDefinition이라는 추상화가 있기 때문) - 스프링 컨테이너 안에는 스프링 빈 저장소가 있고 빈 이름과 빈 객체가 저장된다. - 스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입한다. - ApplicationContext 인터페이스는 BeanFacto.. 2021. 12. 25. [스프링] 객체 지향 설계의 5가지 원칙 객체 지향 설계의 5가지 원칙 - SOLID • SRP: 단일 책임 원칙(single responsibility principle) • OCP: 개방-폐쇄 원칙 (Open/closed principle) • LSP: 리스코프 치환 원칙 (Liskov substitution principle) • ISP: 인터페이스 분리 원칙 (Interface segregation principle) • DIP: 의존관계 역전 원칙 (Dependency inversion principle) SRP 단일 책임 원칙 - 한 클래스는 하나의 책임만 가져야 한다. 여기서 책임은 상황에 따라 클 수도 작을 수도 있다. - 중요한 기준은 변경이다. 변경이 있을 때 최대한 파급 효과가 적도록, 즉 변경해야 할 곳들이 적도록 해야 한.. 2021. 12. 25. [JPA] JPQL 중급 - (2) 다형성 쿼리, 엔티티 직접 사용, named 쿼리, 벌크 연산 다형성 쿼리 - TYPE - 조회 대상을 특정 자식으로 한정 • 예) Item 중에 Book, Movie를 조회해라 • [JPQL] select i from Item i where type(i) IN (Book, Movie) • [SQL] select i from i where i.DTYPE in (‘B’, ‘M’) //DTYPE은 설정을 통해 미리 지정할 수 있음 - TREAT • 자바의 타입 캐스팅과 유사 • 상속 구조에서 부모 타입을 특정 자식 타입으로 다룰 때 사용 • FROM, WHERE, SELECT(하이버네이트 지원) 사용 • 예) 부모인 Item과 자식 Book이 있다. • [JPQL] select i from Item i where treat(i as Book).auther = ‘kim’.. 2021. 12. 21. [JPA] JPQL 중급 - (1) 경로 표현식, 페치 조인**(중요!) 경로 표현식 경로 표현식이란 점을 찍어 객체 그래프를 탐색하는 것 용어 정리 • 상태 필드(state field): 단순히 값을 저장하기 위한 필드 (ex: m.username) • 연관 필드(association field): 연관관계를 위한 필드 • 단일 값 연관 필드: @ManyToOne, @OneToOne, 대상이 엔티티(ex: m.team) • 컬렉션 값 연관 필드: @OneToMany, @ManyToMany, 대상이 컬렉션(ex: m.orders) 경로 표현식 특징 • 상태 필드(state field): 경로 탐색의 끝, 탐색X • 단일 값 연관 경로: 묵시적 내부 조인(inner join) 발생, 탐색O • 컬렉션 값 연관 경로: 묵시적 내부 조인 발생, 탐색X -> FROM 절에서 명시적 .. 2021. 12. 20. 이전 1 ··· 4 5 6 7 8 9 다음 반응형