728x90
반응형
현재 프로젝트에서 유효성 검사는 잘 이루어지지 않고 있었다.
하나의 속성 데이터에 대한 유효성 검사를 마음먹고 하려니 서비스단이 너무 길어졌다.
중복되는 코드들도 너무 많고 이거 참 난감한 상황이 발생했다.
애초에 유효성 검사 로직을 수행하는 공통 로직을 만들면 어땠을까 생각도 해봤는데
이미 늦은 듯하다.
그래서 고민을 하다가 서비스 폴더에 하나의 검증 클래스를 생성했다.
기존 | 보완 |
contoller ㄴ dataContoller.java service ㄴ dataService.java dao ㄴ dataDao.java vo ㄴ dataVo.java |
contoller ㄴ dataContoller.java service ㄴ dataService.java ㄴ dataValidate.java dao ㄴ dataDao.java vo ㄴ dataVo.java |
여기서는 검증만 진행한다.
서비스단에 있는 모든 메소드 명과 일치시킨 메소드 명을 검증 클래스에 생성하고
해당 서비스 메소드마다 요구하는 검증이 다르므로 그에 맞는 유효성 검사를 실행한다.
public void getDataList(DataVo vo) {
// 언어 코드 유효성
if(!vo.getLan().trim().equals("")) {
if(lanCodeList.stream().filter( code -> vo.getLan().toUpperCase().equals(code.getCode_value())).findAny().orElse(null) == null) {
throw new CustomException(ApiResultErrorCode.FieldValueException, "언어 코드를 확인해주세요.");
}
}
// 채널 코드 유효성
if(!vo.getSourceType().trim().equals("")) {
for(String type : vo.getSourceType().split(",")) {
if(channeleCodeList.stream().filter( code -> type.equals(code.getCode_value())).findAny().orElse(null) == null) {
throw new CustomException(ApiResultErrorCode.FieldValueException, "채널 코드를 확인해주세요.");
}
}
}
// 사용 여부 유효성
if(!vo.getUseYn().trim().equals("") && !(vo.getUseYn().equals("Y") || vo.getUseYn().equals("N"))) {
throw new CustomException(ApiResultErrorCode.FieldValueException, "사용 여부 값을 확인해주세요. ('Y' or 'N' or '')");
}
// orderByValue 유효성
if(!vo.getOrderByValue().trim().equals("") && !(vo.getOrderByValue().equals("ASC") || vo.getOrderByValue().equals("DESC"))) {
throw new CustomException(ApiResultErrorCode.FieldValueException, "orderByValue 값을 확인해주세요. (ASC : 오름차순, DESC : 내림차순)");
}
// OrderByField 유효성
if( !vo.getOrderByField().trim().equals("") && !Enums.getIfPresent(notSentenceEnum.class, vo.getOrderByField()).isPresent() ) {
vo.setOrderByField(notSentenceEnum.of(vo.getOrderByField()));
}
}
하나하나 검사하다보면 코드는 길어지고 복잡해지지만 그래도 개발된 API 를 사용하는 입장에서 명확하고 꼼꼼하게 이용할 수 있을 생각하면 이게 맞는 것 같다.
근데 아직도 드는 고민이 몇 개 있다.
- 공통으로 유효성 검사를 실행하고 싶은데 공통점을 찾아내기가 힘들다. 처음부터 구조를 세웠으면 나았을까 ?
- 서비스 단이 길다는 이유로 유효성 로직을 분리하는게 맞을까 ?
- Vo 의 setter 에서 유효성 검사를 하는 것도 생각해봤지만 해당 속성값에 들어가는 값이 항상 일치하는 것이 아닌 경우에 따라 값이 달라지는 경우는 어떻게 처리해야 할까 싶어 포기했다. 예를들어 아래처럼 있을 때 참 매개변수를 받아서 화이트 스페이스 값을 허용 해줄지 말지 받는 것도 애매하고 ..
- 검색 조건에서 쓰이는 사용여부 속성
- 'Y'
- 'N'
- ''
- 'Y' 도 'N' 도 검색하지 않겠다.
- 등록시 쓰이는 사용여부 속성
- 'Y'
- 'N'
- 검색 조건에서 쓰이는 사용여부 속성
- @Valid 로 속성을 지정해 사용하자니 위에와 같은 상황에서는 어떻게 대처를 하지 싶었다.
아무튼 어떤 로직이 최선일지 잘 모르겠어서 아직도 헤메는 중 ,,, 😥
728x90
반응형
'개발중 > Spring' 카테고리의 다른 글
스프링 테스트 코드 작성하기 (1) | 2022.09.06 |
---|---|
Response headers 에 Content-Disposition 안보임 😥Cors 관련인가 ? (0) | 2022.07.19 |
좋은 객체 지향의 다섯가지 원칙 SOLID (0) | 2022.04.11 |
스프링과 스프링 부트에 대해 알아보기 (0) | 2022.04.11 |
✨ STS 설치 가이드 ✨ (0) | 2022.03.27 |