본문 바로가기

Spring5

Service - ServiceImpl 쓰지 말라고만 하고 사라지면 어떡해요! 요즘은 많이 줄어들었지만 예전에는 개발을 하다 보면 Service - ServiceImpl 구조를 굉장히 많이 만나볼 수 있었다. 나 조차도 사실 이걸 왜 써야하는지, 근본적인 이유가 무엇인지에 대한 의문을 품지 않고 그저 이런 구조를 사용해서 개발을 하는 것이 회사 개발팀의 컨벤션이기도 했고, 사실 큰 불편함도 없기도 해서 사용하기도 했다. 어느 날 개발을 하던 도중에 의문이 생겼다. 아무리 봐도 대부분의 Service와 ServiceImpl의 관계는 1:1에서 더 이상 바뀔 일이 없을 것 같아 보였고, 동료 개발자에게 질문을 했다. 왜 이런 구조를 채택했냐고. 돌아온 대답은 우리가 알고 있는 이유와 비슷했다. 인터페이스와 구현체를 분리함으로써 얻을 수 있는 이점이 많다는 이유였다. 틀린 말은 아니다... 2024. 2. 26.
Spring Framework 4 ResourceLoader 리소스를 읽어오는 기능을 제공하는 인터페이스 - 파일 시스템에서 읽어오기 - 클래스패스에서 읽어오기 - URL로 읽어오기 - 상대/절대 경로로 읽어오기 --------------------------- Resource 추상화 java.net.URL을 추상화 한 것 -> springcore.io.resource로 해당 클래스를 감싸서 실제 low-level에 있는 resource에 접근하는 기능을 만든것이다. 이유 -> 기존 java.net.URL은 클래스패스로 resource를 가져오는 기능과 ServletContext기준으로 resource를 가져오는 기능이 없었다. resource를 가져오는 방법을 하나로 통일시킨것. 구현체 - UrlResource, classpathRes.. 2019. 12. 12.
Spring Framework 3 Component, ComponentScan @ComponentScan을 붙이고 있는 configuration부터 스캔을 시작한다. @SpringBootApplication은 내부적으로 @ComponentScan을 가지고 있다. basePackageClasses를 사용하면 해당 어플리케이션이 담겨있는 패키지와 해당 패키지의 하위 패키지 전부를 스캔한다. 하지만 해당 패키지 외부에 있는 것들은 스캔하지 않는다. @Filter -> 컴포넌트 스캔을 한다고 해서 모든 Annotation들을 스캔해서 Bean으로 등록하는 것이 아니다. Filter를 통해서 걸러내는 것들도 있다. ComponentScan의 중요 설정 - 어디부터 어디까지 스캔을 할 것인가 -> basePackageClasses - 어떤것들은 걸.. 2019. 12. 5.
Spring Framework 2 Autowired 필요한 의존 객체의 Type에 해당하는 Bean을 찾아서 주입해준다. Field vs setter vs constructor(스프링 4.3부터는 생략 가능) 발생 가능한 경우의 수 1. 필요한 의존 객체 type의 Bean이 없는 경우 - Bean이 존재 하지 않지만 이를 주입하라 하기 때문에 Error가 발생한다. - setter 혹은 field로 의존성 주입을 받는 경우 (required = false)를 사용하여 문제를 해결할 수 있다. - 하지만 생성자를 사용한 의존성 주입은 생성자에 전달받아야 하는 type의 Bean이 존재하지 않으면 instance를 만들지 못하고 등록이 되지 못한다. 2. 필요한 의존 객체 type의 Bean이 하나인 경우 - 3. 필요한 의존 객체 typ.. 2019. 12. 4.
728x90