클라이언트 Validation과 서버 Validation

log.yunsik·2022년 11월 1일
0

개요

사다리 미션을 진행하면서 Console의 입력값을 검증하기 위해 다음과 같이 method를 작성하였다.

    private People inputPeople() {
        try {
            return new People(InputView.personNameInput());
        } catch (Exception e) {
            System.out.println("사람 이름 입력이 잘못됐습니다 다시 이력해주세요.");
        }
        return inputPeople();
    }

View Layer에서 InputView.personNameInput() method로 이름을 입력받고 Controller Layer에서 Person 객체를 생성하여 입력값이 잘못됐다면 다시 입력하도록 재귀함수 형태로 작성한 것이다.

예외처리로 잘못된 값을 입력시 다시 입력하게 해주면 좋겠다는 생각이 들어 이렇게 설계를 했었는데 People, Ladder, Result 등 다양한 입력 요소들이 생기면서 객체 생성을 위해 너무 많은 메소드들이 생기게 되었다.

그래서 Controller Layer에서 입력받는 로직을 Service Layer로 분리하려 했지만 View Layer에 의존하고 있어 View Layer의 의존 없이 Service Layer로 내리는 것이 쉽지 않았다.

책임을 분리하자

리뷰어님이 "웹 환경에서 클라이언트와 서버 밸리데이션의 목적"을 찾아보면 좋을 것이라 말씀하셔서 이에 대해 찾아보았다.

위 말을 듣고 제일 먼저 든 생각은 "클라이언트가 비지니스 로직에 의존하는 것이 올바른 설계인가?"이다.

물론 클라이언트에서 비지니스 로직에 대해 검증할 수도 있지만 이는 각 Layer의 책임이 적절하게 분리된 것이라고 볼 수 없을 것 같다.

클라이언트와 서버가 하나의 코드에 있다 보니 console이 웹 환경에서 클라이언트라고 생각하지 못했던 것 같다. 😅

Layer별 검증 요소

  • 클라이언트
    단순 입력 값 검증 ( 입력이 잘못된 값이라면 서버로 넘기지 않는다 )
  • 서버
    비지니스 로직에 따른 검증

참고자료

https://elvanov.com/2414
https://softwareengineering.stackexchange.com/questions/81062/data-input-validation-where-how-much

0개의 댓글