JAVA(244)
-
컴포넌트 스캔의 스프링 빈 중복 등록과 충돌
스프링 빈 중복 등록 컴포넌트 스캔시 @Component, @Service와 같은 애노테이션이 적용된 클래스를 대상으로 자동으로 스프링 빈으로 등록할수도 있지만 @Configuration과 @Bean을 통해서 수동적으로 빈을 등록할 수 있습니다. 스프링 빈이 중복 등록되는 경우 어떻게 되는지 알아봅니다. 1. 자동 빈 등록 vs 자동 빈 등록 NoUniqueBeanDefinitionException 예외 발생 동일한 인터페이스를 구현한 구현체가 2개 있고 두 구현체 모두 @Component를 적용하였다고 가정합니다. @Component public class MemoryMemberRepository implements MemberRepository { // ... } @Component public cl..
2023.05.03 -
컴포넌트 스캔의 필터(Filter) 생성
필터 필터의 필요성 컴포넌트 스캔시 옵션으로 includeFilter 또는 excludeFilter를 통해서 특정한 범위의 대상은 스프링 빈으로 등록하거나 제외할 수 있습니다. 이때 includeFilter 또는 excludeFilter 옵션값으로 필터를 설정합니다. 필터(Filter)의 종류 includeFilter : 컴포넌트 스캔에 스프링 빈으로 등록할 탐색 범위를 추가합니다. excludeFilter : 컴포넌트 스캔에 스프링 빈으로 등록 제외할 탐색 범위를 추가합니다. 필터 등록 방법 1. includeFilter에 설정할 커스텀 애노테이션 정의 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @in..
2023.05.03 -
컴포넌트 스캔(ComponentScan)
목차 컴포넌트 스캔의 필요성 컨포넌트 스캔 예시 excludeFilters basePackages basePackageClasses 컴포넌트 스캔(ComponentScan) 컴포넌트 스캔은 클래스를 탐색하며 @Component 애노테이션이 붙은 클래스를 스프링 빈으로 등록하는 기능입니다. 컴포넌트 스캔의 필요성 컴포넌트 스캔이 필요한 이유는 기존 @Bean을 통해서 수동적으로 스프링 빈을 등록하였지만, 등록할 빈 개수가 증가할수록 관리가 어려워집니다. 따라서 이러한 빈 등록을 자동적으로 해야할 필요성이 있습니다. 컴포넌트 스캔을 사용하지 않고 기존 스프링 빈을 등록하는 대표적인 방법은 @Bean 애노테이션을 사용하는 것입니다. 다음 코드와 같이 @Configuration 애노테이션이 적용된 클래스의 메소..
2023.05.03 -
SRP(Single Responsility Principle, 단일 책임 원칙)
SRP(Single Responsility Principle, 단일 책임 원칙) 단일 책임 원칙은 어떤 원칙인가? 어떤 한 객체는 하나의 책임만을 가져야 한다는 원칙입니다. 여기서 책임이란 어떤 객체가 그 객체에 맞는 역할을 수행하기 위한 기능들을 의미합니다. 역할은 객체가 어떤 책임들을 수행할 것인지 정의한 것입니다. 제 주관적인 생각으로는 단일 책임이라는 표현보다는 단일 역할 원칙이라는 표현이 더 적절하다고 생각합니다. 즉, 한 객체는 하나의 역할만을 갖고 책임들을 수행해야 한다는 원칙이라고 생각합니다. 역할 : 객체가 역할에 맞는 책임들을 수행할 것인지 정의한 것 책임 : 역할에 맞는 기능들 예를 들면 자동차라는 객체의 주요한 역할은 운전하는 것입니다. 그렇다면 자동차 역할에 따른 책임들이 존재할 ..
2023.05.03 -
애플리케이션 logging을 위한 적절한 방법
1. 작업을 위해서 적절한 도구들을 사용하자 SLF4J를 활용하여 다음과 같이 구현할 수 있습니다. log.debug("Found {} records matching filter: '{}'", records, filter); 2. 잊지말자, 로깅 레벨(logging levels)들은 너를 위한 것이다. 1) ERROR : 요청을 처리하는 중 오류가 발생한 경우 표시됩니다. 2) WRAN : 처리 가능한 문제, 향후 시스템 에러의 원이 될 수 있는 경고성 메시지를 표시합니다. 3) INFO : 상태 변경과 같은 정보성 로그를 표시합니다. 4) DEBUG : 프로그램을 디버깅하기 위한 정보를 표시합니다. 5) TRACE : 추적 레벨은 DEBUG 레벨보다 훨씬 상세한 정보를 표시합니다. 3. 무엇을 로깅할 ..
2023.05.01 -
Logback 라이브러리 설정
설정 파일 loback의 기본 설정 파일은 logback.xml 입니다. logback 라이브러리는 classpath 아래에 위치하는 logback.xml을 기본으로 탐색합니다. xml 파일에 로그 설정 logback.xml 파일에 다음과 같이 설정할 수 있습니다. %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 기본 로그 레벨은 info 레벨로 설정됩니다. kr.codesquad.cafe 패키지의 로그 레벨은 debug 레벨로 설정됩니다. 로그 출력 방식은 콘솔(ConsoleAppender)로 설정됩니다. 로그 레벨(log level) 로그 레벨은 다음과 같습니다. TRACE < DEBUG < INFO < WARN < ERROR 1) ERROR : ..
2023.04.24