MessageCodeResolverrequired.item.itemName 처럼 구체적인 것을 먼저 만들어주고,

required처럼 덜 구체적인 것을 가장 나중에 만듭니다.

모든 오류 코드에 대해서 메시지를 각각 다 정의하면 개발자 입장에서 관리하기 너무 힘듭니다.

크게 중요하지 않은 메시지는 범용성 있는 required 같은 메시지로 끝내고, 정말 중요한 메시지는

꼭 필요할 때 구체적으로 적어서 사용하는 방식이 더 효과적입니다.

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

세밀하게 작성할 수는 있지만 범용성이 떨어집니다.

세밀하게 하는 경우 너무나 많은 에러 코드가 작성될 것입니다.

required=필수 값 입니다.
range=범위는 {0} ~ {1} 까지 허용합니다.
max= 최대 {0} 까지 허용합니다.

범용성이 넓으나 내용이 위에 비해 부실합니다.

#Level1

required.item.itemName=상품 이름은 필수입니다.

#Level2

required=필수 값 입니다.