본문 바로가기

전체 글

(21)
의존관계 주입 의존관계 주입 의존관계 주입은 런타임 시점에 스프링 컨테이너에 등록된 빈을 @Autowired가 적용된 필드에 주입하여 구현체를 직접 생성하지 않아도 사용이 가능하게끔 하는 것이다. 주입받은 코드는 구현체를 직접적으로 생성하지 않았기 때문에 OCP, DIP를 지킬 수 있다. 의존관계 주입은 크게 생성자 주입, 수정자 주입(setter 주입), 필드 주입이 있다. 기본적으로 스프링은 빈을 먼저 등록 후 의존관계 주입을 하지만, 생성자 주입의 경우 빈 등록 전 객체를 생성하고 의존관계를 주입 후 등록하는 예외가 있다. 생성자 주입 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository me..
@Repository 기능 @Repository 는 데이터 액세스 계층에서 사용되는 애너테이션이다. 보통은 컴포넌트 스캔의 대상이 되기 위해 적용하지만 스프링 부트와 JPA 를 사용할 경우 예외 변환기(PersistenceExceptionTranslationPostProcessor) 를 자동으로 등록해서 @Repository 를 적용한 빈을 프록시로 변환한다. 이렇게 변환된 프록시는 데이터 액세스 계층에서 예외가 발생하면 스프링 예외 추상화(DataAccessException)로 변환해준다. 스프링 예외 추상화로 변환 시 이점은 JPA 뿐만 아니라 JdbcTemplete, MyBatis 와 같은 데이터 접근 기술에서 발생되는 예외를 통합적으로 관리한다는 점이다. 따라서 데이터 접근 기술을 변경하더라도 예외 처리하는 로직을 수정할 ..
@MappedSuperclass 와 임베디드 타입 @MappedSuperclass 와 임베디드 타입은 여러 엔티티에서 공통으로 사용되는 필드를 별도의 클래스로 분리하여 부모 엔티티에 적용하는 방식이다. 하지만 @MappedSuperclass 의 경우 상속을 받아 적용하고, 임베디드 타입의 경우 위임을 받아 적용하므로 서로 다른 상황에서 쓰일 수 있다. @MappedSuperclass 사용 예시 DataInfo.java @MappedSuperclass public abstract class DataInfo { private String createdBy; private LocalDateTime createdDate; private String lastModifiedBy; private LocalDateTime lastModifiedDate; } Membe..
AOP 용어 AOP 용어 정리 조인 포인트(Join point) 어드바이스가 적용될 수 있는 위치, 메소드 실행, 생성자 호출, 필드 값 접근, static 메서드 접근 같은 프로그램 실행 중 지점 조인 포인트는 추상적인 개념이다. AOP를 적용할 수 있는 모든 지점이라 생각하면 된다. 스프링 AOP는 프록시 방식을 사용하므로 조인 포인트는 항상 메소드 실행 지점으로 제한된다. 포인트컷(Pointcut) 조인 포인트 중에서 어드바이스가 적용될 위치를 선별하는 기능 주로 AspectJ 표현식을 사용해서 지정 프록시를 사용하는 스프링 AOP는 메서드 실행 지점만 포인트컷으로 선별 가능 타켓(Target) 어드바이스를 받는 객체(핵심 기능이 있는 메서드), 포인트컷으로 결정 어드바이스(Advice) 부가 기능 특정 조인 ..
요청 파라미터 검증 요청 파라미터의 검증은 1차적으로 클라이언트 영역에서 하지만 데이터를 다루는 서버 영역에서도 반드시 체크가 필요하다. 스프링을 사용하면 보통은 Validator와 BeanValidator 두가지를 통해 검증한다. 두가지의 사용 용도는 경우의 따라 달라지기도 하지만 보통은 요청 파라미터만을 검증할 때는 BeanValidator를 적용하고, 파라미터를 이용해 계산을 하거나 별도의 조건이 있다면 Validator 를 사용한다. BeanValidator BeanValidator 는 데이터를 담는 객체의 필드마다 검증하고 싶은 애노테이션을 붙여 적용하는 방식이다. 애노테이션만 적용하면 되므로 if문을 사용해 코드가 지저분해지지도 않는다. BeanValidator 는 널을 허용하지 않는 것부터 숫자 제한, 이메..