brunch

You can make anything
by writing

C.S.Lewis

by 에디의 기술블로그 Aug 11. 2019

Spring Assertion

스프링 프레임워크 환경에서의 Assertion

글을 시작하기 전에


스프링 프레임워크 에서는 다양한 Utils 를 제공하는데, 그 중에서 가장 많이 사용하는 것은 바로 Assertion 이다. 이 글에서는 스프링에서 제공하는 Assertion 에 대해서 소개하겠다. 참고로, 이 글에서 설명하는 Assertion 은 테스트 코드를 위한 것이 아니다. 애플리케이션 런타임 환경에서의 검증 코드에 사용한다.



Exception, Runtime Exception


Exception : Checked Exception

RuntimeException : Unchecked Exception


Unchecked Exception 은 컴파일 단계에서 처리하지 않는다. RuntimeException 를 상속받는 모든 Exception 은 Unchecked Exception 인데, 일반적으로 프로그래머의 실수에 의해서 발생하는 예외인 경우도 있고, 논리적으로 잘못된 인자에 의해서 발생하는 경우도 있다. 

어쨋든 이 글에서 논하는 Assertion 은 입력값의 검증이나 예외 상황을 디버깅하기 위한 용도로 사용한다. 코드가 실행될 때 어떤 값이 들어와야 하는지 정의를 하거나, 값의 범위를 체크하는 등 애플리케이션의 안정성을 높여줄 수 있다. 


자세한 내용은 생략하겠다. 같이 코드를 보면서 이해해보자. 



Custom Assertion 샘플 코드 작성


Assert Util 클래스를 샘플 코드로 만들었다.


notNull

프로그래머의 실수에 의해 발생하는 경우에, 예외를 발생시켜보자. Coffee(커피) 를 조회하는 간단한 API 코드를 작성해보겠다. 아주 심플하다. 커피의 이름을 파라미터로 받아서, 커피를 조회를 하는 메서드를 정의하였다. 만약, 해당 메서드는 커피의 이름을 반드시 파라미터로 전달 받아야 한다. 커피의 이름이 Null 인 경우에는 RuntimeException 을 발생시키고 싶다. 아래 코드와 같이 작성할 수 있다. 

값을 검증하는 로직이 필요한 경우에, 위와 같이 조건문과 IllegalArgumentException 을 발생시켜야 한다. 이런 조건문을 단순화하고, 반복적인 코드를 줄이기 위한 방법이 있을까? CustomAssert 클래스를 만들어서 static 메서드를 만들어보자. 

static 메서드이기 때문에, CustomAssert.notNull() 로 실행할 수 있다. 


notEmpty

이번에는 Collection 에 값이 없는 경우 예외를 발생시켜보자. 커피의 이름을 List<String> 타입으로 전달받는다고 가정했을 때, List<String> 의 값이 단 하나도 없는 경우에 RuntimeException 을 발생시키겠다. 일단, CustomAssert 클래스에 notEmpty 메서드를 정의하자. 

비즈니스 로직에서는 아래 코드와 같이 CustomAssert.notEmpty 로 인자를 검증할 수 있다. 

리스트로 문자열을 잘 받으면 아래와 같이 정상적으로 비즈니스 로직이 수행한다. 

하지만, 빈 문자열을 받으면...  

아래와 같이 필자가 정의한 RuntimeException 이 발생한다. 

isTrue, state

자세한 설명은 생략하겠다. 



하지만, 

실무에서는 이렇게 직접 Assertion 클래스를 만들어서 사용할 필요가 없다. 


왜냐하면, 누군가가 잘 만들어놓은 Assertion 를 사용하면 되기 때문이다. 스프링 프레임워크를 사용한다면 Spring Assertion 을 사용하는 것을 추천한다. 


참고로, JDK 1.4 부터 제공하는 Assertion 을 사용해 되지만, 이 글에서는 논하지 않겠다. 궁금하다면 아래 링크를 참고하길 바란다. 

https://javacan.tistory.com/entry/79



Spring Asserts


위에서 작성한 코드를, 스프링에서 유틸에서 제공하는 Assertion 을 사용하겠다. 패키지 경로는 아래와 같다. 

사용 방법은 아주 간단하다. 그냥 사용하면 된다... 


별로 설명할게 없다. 직접 사용을 해보면 이해가 빠를 것이다. 


스프링 프레임워크의 Assert 가 사용된 코드는 수없이 많다. 심심하면 찾아보길 바란다. 


참고로, 스프링에서 제공하는 Assert 클래스를 상속받아서 신규로 클래스를 정의해도 된다. 상속 받은 클래스에서는 메서드를 재정의해서 사용할 수도 있다. 


자세한 설명은 생략한다. 



마무리


이번 글에서는 스프링에서 제공하는 Assertion 에 대해서 아주 간단하게 알아보았다. 애플리케이션의 신뢰성, 안정성을 높이기 위해 Assertion 을 적절하게 사용하면 좋을 것이다. 끝.



레퍼런스


https://github.com/sieunkr/spring-assert

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/util/Assert.html

매거진의 이전글 웹서비스 백엔드 애플리케이션 아키텍처(1)-클린아키텍처
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari