본문 바로가기
반응형

Web/Spring Boot8

[Mockito] spyBean vs mockBean @MockBean : given에서 선언한 코드에서만 사용할 수 있음 @SpyBean : given에서 선언한 코드 외에는 전부 실제 객체의 것을 사용 이미 존재하는 Bean을 SpyBean으로 Wrapping한 형태 기본적인 개념은 조금 다르나 사용법은 @MockBean과 @SpyBean은 동일 간략한 특징은 - MockBean은 가짜객체이므로 given에서만 개발자의 모의코드를 지정할 수 있음 이에, 실제 데이터베이스 연동되는 로직이 있어도 가짜 객체이므로 연동되지 않음 - SpyBean은 진짜객체이므로, 특정 given에서 개발자의 모의코드를 지정할 수 있음, 대신 given이 아닌 행위에 대해서는 실제 객체로 동작, 이에 구현된 로직이 실제 수행되며, 데이터에비스 연동이 실제로 이루어짐 - 참고 .. 2022. 7. 10.
[DI] 생성자 주입을 사용하자 DI 방식 종류는 1) 생성자 주입 2) setter 주입 3) 필드 주입 4) 일반 메서드 주입 위 4가지 중 1)생성자 주입으로 사용하자 왜? 1) final 키워드 작성 가능 == 불변 대부분 의존관계 주입은 한번 일어나고 애플리케이 종료시점까지 변경되면 안된다. setter와 메서드방식의 경우 public으로 지정하다보니 외부에서 실수로 개발자가 변경할 수 있는 위험요소가 있음 2) 의존관계 누락 방지 생성자는 인스턴스를 만들때, 당연히 위와 같이 컴파일 에러를 뱉음 (컴파일 오류는 세상에서 가장 빠르고 좋은 오류다) 그러나, setter 주입일 경우는? 현재 MemberService에서 Repository가 누락되었으나, 문제없이 생성자를 통해 인스턴스를 만들고, 주입받지 못한 memberSer.. 2022. 6. 21.
@EventListener & @PostConstruct 애플리케이션을 실행할 때, 다른 리소스에서 호출하지 않고도 특정 메서드를 수행시키고 싶을 때 (예로, 초기 데이터를 저장하는 경우 등 초기화 작업 시) 다음 어노테이션 중 하나를 수행 시킬 메서드에 적용한다. 1) @EventListener(ApplicationReadyEvent.class) 2) @PostConstruct 1)의 경우 스프링 컨테이너가 완전히 초기화를 다 끝내고, 실행 준비가 되었을 때 발생하는 이벤트이다. 2)의 경우는 AOP같은 부분이 아직 처리되지 않은 시점에 호출 될 수 있어, 간혹 문제가 발생할 수 있음 가급적 1)를 쓰는게 좋을듯 싶다. @EventListener(ApplicationReadyEvent.class) public void initData() { log.info(.. 2022. 6. 9.
[Spring] @RestControllerAdvice 서버단에서 로직을 처리하는 과정에서 발생하는 예외를 통합관리하고, 그 결과를 클라이언트에 반환해준다. 설정방법 @RestConroller가 붙어있는 api컨트롤러에서 발생하는 예외를 캐치하겠다는 의미 구현부 클래스 내부의 메서드들은 특정 Exception에 대해 처리하는 로직이 들어있다. @ExceptionHandler(CannotUpdateException.class) 는 CannotUpdateException (직접 만든 RunTimeException)이 발생했을 경우, 해당 메서드를 실행하겠다는 의미이다. @ResponseStatus 는 말그대로 응답헤더의 Http Status Code를 지정해주는 것이다. ErrorMessage는 클라이언트에게 반환하는 객체로, 예외 내용을 담고 있다. excep.. 2019. 7. 16.
반응형