본문 바로가기
Web/Spring

[Spring] 테스트, 템플릿, 예외

by 정고정 2021. 10. 29.
반응형

2. 테스트

단위테스트 작은 단위의 코드에 대해 수행한 테스트

테스트주도적개발 TDD

  • 테스트 코드를 먼저 만들고, 해당 테스트를 성공하게 해주는 코드를 작성하는 방식
  • 최대한 주기를 짧게 가져간다 → 단위테스트 위주

JUnit4의 @Test 수행 방식

JUnit의 애플리케이션 컨텍스트

JUnit 확장기능은 테스트가 실행되기 전에 딱 한 번만 애플리케이션 컨텍스트를 만들어두고, 테스트 오브젝트가 만들어질 때마다 특별한 방법을 이용해 애플리케이션 컨텍스트 자신을 테스트 오브젝트의 특정 필드에 주입해 주는 것.

성격은 다르지만 일종의 DI

DI를 이용한 테스트

  1. 테스트 코드에 의한 DI
  2. 테스트를 위한 별도의 DI 설정
  3. 컨테이너 없는 DI 테스트

테스트 방법의 선택: 3 → 1 → 2

학습테스트

기존 기술의 확인을 위해 작성한 테스트

  • 다양한 조건에 따른 기능을 손쉽게 확인해 볼 수 있다.
  • 학습 테스트 코드를 개발 중 참고할 수 있다.
  • 프레임워크나 제품을 업그레이드할 때 호환성 검증을 도와준다.
  • 테스트 작성에 대한 훈련이 된다.
  • 새로운 기술을 공부하는 과정이 즐거워진다.

버그테스트

일단 실패하도록 작성한 테스트

  • 테스트의 완성도를 높여준다.
  • 버그의 내용을 명확하게 분석하게 해 준다.
  • 기술적인 문제를 해결하는 데에 도움이 된다.


3. 템플릿

OCP 다시 생각해 보기

성질이 다른 코드 중에서 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분을 자유롭게 변경되는 성질을 가진 부분으로부터 독립시켜서 효과적으로 활용할 수 있도록 하는 방법

기존 전략패턴의 템플릿

필요에 따라 컨텍스트는 그대로 유지하면서(OCP 폐쇄원칙) 전략을 바꿔 쓴다(OCP 개방원칙).

전략과 클라이언트의 동거

중첩클래스 이용

  1. 중첩 로컬 클래스
  2. 내부 클래스에서 외부의 변수를 사용할 때는 외부 변수를 반드시 final로 선언해야 한다
  3. 익명 내부 클래스 ★★★★★

컨텍스트와 DI

인터페이스를 이용한 스프링 빈으로 DI

  1. 스프링의 DI를 이용하기 위해 빈으로 등록해서 사용하는 방법
  2. DAO의 코드를 이용해 수동으로 DI/를 하는 방법

템플릿과 콜백

일반적으로 단일 메소드 인터페이스 사용

템플릿/콜백의 작업 흐름

템플릿/콜백의 특징

  • DI 방식의 전략 패턴 구조
  • 매번 메소드 단위로 사용할 오브젝트를 새롭게 전달받는다는 것이 특징.
  • 콜백 오브젝트가 내부 클래스로서 자신을 생성한 클라이언트 메소드 내의 정보를 직접 참조한다는 것

콜백 재활용

콜백 예제(Calculator)

GitHub - gojung/TobyPractice: 2021 Study


4. 예외

자바에서 throw로 발생시킬 수 있는 예제

  • java.lang.Error
  • java.lang.Exception과 체크예외
  • java.lang.RuntimeException과 언체크/런타임 예제

예외처리 방법

  • 예외 복구
  • 예외처리 회피
  • 예외 전환
    1. 내부에서 발생한 예외의 의미를 명확하게 하기 위해
    2. 예외 처리의 용이성을 위해
    3. ex) 예외처리를 강제하는 체크 예외를 언체크 예외인 런타임 예외로 변경하는 경우
  • 일반적으로 중첩 예외를 이용해 새로운 예외를 만들고 원인 예외를 내부에 담아 던진다.

예외처리 전략

  • 런타임 예외의 보편화 복구할 수 없는 예외는 없다고 가정한 낙관적 예외처리 기법
  • 애플리케이션 예외 애플리케이션 자체 로직에 의해 의도적으로 발생, 무조건 catch해서 조치를 취하도록 요구하는 예외

낙관적인 락킹

DataAccessException 활용 시 주의사항

DB의 에러코드와 달리 JPA나 하이버네이트, JDO 등에서 각 기술이 재정의한 예외를 가져와 스프링이 최종적으로 DataAccessException으로 변환한 예외는 세분화되어 있지 않다.

어느 정도 추상화된 공통 예외로 변환해 주기는 해도 근본적인 한계가 존재하므로 완벽을 기대할 수는 없다.

review


 

반응형

댓글