Spring의 MessageCodeResolver

zwon·2023년 8월 29일
0

Spring

목록 보기
5/12

BindingResult의 rejectValue(), reject()를 사용하면서 오류 코드를 사용해봤는데 오류 코드를 어떻게 설계해야할까? 라는 의문이 생길 수 있다.

오류 코드를 너무 자세하게 만들면 여러 곳에서 사용하기 어렵고,, 너무 두루뭉실하게 만들면 너무 두루뭉실해서 문제다... 가장 좋은 방법은 두루뭉실하게 사용하다가 자세한 내용이 필요한 곳에는 자세한 내용이 적용되도록하는 것이다.

이게 무슨 말인지 확 와닿지 않으니 예시를 보면서 이해해보자.

스프링은 MessageCodeResolver 인터페이스를 제공한다. 이 인터페이스의 구현체로느 DefaultMessageCodeResolver()를 사용하면 된다.

반환타입을 보면 String[]배열을 반환해준다. 파라미터로 받은 erroCode와 objectName을 가지고 여러개의 오류 코드를 생성 후 반환해준다고 생각하면 된다.

먼저 Object와 관련된 오류 코드부터 보자.

Object는 2가지 오류 코드를 자동으로 생성해준다.

그 다음 field와 관련된 오류 코드부터 보자.
여기서 fieldsms itemName만 테스트해보겠다.

field는 4가지 오류 코드를 자동으로 생성해준다.

이렇게 MessageCodeResolver가 오류 코드를 다 생성해준다.
출력 결과 맨 위가 제일 자세한 오류 코드이고 밑으로 갈 수록 덜 자세한 오류 코드이다.

오류 코드를 자세한 것부터 생성하고 점점 덜 자세한 코드를 생성하는데 우리가 오류 코드를 정의한 곳에서 하나씩 살펴보는 것이다.
그래서 자세한 오류 코드가 정의되어있으면 그 오류코드의 메시지가 출력되고, 없으면 그 다음 우선순위의 에러코드를 찾는 것이다.
이렇게 하면 rejectValue()나 reject() 로직을 수정할 필요 없이 오류 코드를 정의한 파일을 수정하면서 에러 메시지를 변경할 수 있다는 점이다.

근데 주의할 점은 MessageCodeResolver가 생성해주는 오류 코드 규칙을 알고 규칙대로 오류 코드를 정의해야한다.


MessageCodeResolver 오류 코드 생성 규칙

규칙을 알고 위에 오류 코드 출력 결과를 보면 바로 눈에 보일 것이다.

Object 오류 코드 생성 규칙

  1. errorCode + . + Object이름
  2. errorCode

Field 오류 코드 생성 규칙

  1. errorCode + . + Object이름 + . + Field
  2. errorCode + . + Field
  3. errorCode + . + Field type
  4. errorCode
profile
Backend 관련 지식을 정리하는 Back과사전

0개의 댓글