오류 코드와 메시지 처리(5)

학습 페이지

이번 시간에는 오류 코드를 어떻게 관리하는지, 오류 코드 관리 전략을 알아보자.

이전에 배우 것 처럼 MessageCodesResolver는 구체적인 에러코드를 먼저 만들어주고, 이후 덜 구체적인 순서로 에러코드를 만든다.

이 전략을 제대로 이용하기 위해 에러메세지 소스를 다음처럼 바꿔보자.

#required.item.itemName=상품 이름은 필수입니다.
 #range.item.price=가격은 {0} ~ {1} 까지 허용합니다.
 #max.item.quantity=수량은 최대 {0} 까지 허용합니다.
 #totalPriceMin=가격 * 수량의 합은 {0}원 이상이어야 합니다. 현재 값 = {1}
 
 #==ObjectError==
 #Level1
 totalPriceMin.item=상품의 가격 * 수량의 합은 {0}원 이상이어야 합니다. 현재 값 = {1}
 
 #Level2 - 생략
totalPriceMin=전체 가격은 {0}원 이상이어야 합니다. 현재 값 = {1}

 #==FieldError==
 #Level1
 required.item.itemName=상품 이름은 필수입니다.
 range.item.price=가격은 {0} ~ {1} 까지 허용합니다.
 max.item.quantity=수량은 최대 {0} 까지 허용합니다.
 
 #Level2 - 생략
 
#Level3
 required.java.lang.String = 필수 문자입니다.
 required.java.lang.Integer = 필수 숫자입니다.
 min.java.lang.String = {0} 이상의 문자를 입력해주세요.
 min.java.lang.Integer = {0} 이상의 숫자를 입력해주세요.
 range.java.lang.String = {0} ~ {1} 까지의 문자를 입력해주세요.
 range.java.lang.Integer = {0} ~ {1} 까지의 숫자를 입력해주세요.
 max.java.lang.String = {0} 까지의 문자를 허용합니다.
max.java.lang.Integer = {0} 까지의 숫자를 허용합니다.

 #Level4
 required = 필수 값 입니다.
 min= {0} 이상이어야 합니다.
 range= {0} ~ {1} 범위를 허용합니다.
 max= {0} 까지 허용합니다.

구체적인 수준에 따라 level을 나눴다. level4가 가장 범용적이고, 우선순위가 낮다.

이제 level1부터 매칭되는 메시지를 찾아나선다. 앞으로 적용되는 메시지를 바꾸고 싶다면 소스코드 변경 없이 메시지 소스만 바꾸면 된다.

여기서 중요한건, 크게 중요하지 않은 오류 메세지는 구체적인 이름을 만들 필요 없이, 기존에 만든 이전 level을 재활용하면 된다는 것임.

참고로 `validationUtils라는 유틸 객체도 있다. 이 친구는 if문으로 우리가 직접 만든 코드를 더 간단하게 바꿔준다..

ValidationUtils.rejectIfEmptyOrWhitespace(bindingResult, "itemName", 
"required");

하지만 이 유틸은 공백이거나, Empty값 등.. 간단한 기능만 검증해준다.

다음시간에 스프링이 직접 만든 오류 메시지를 쉽게 처리하는 법을 배워보자.