Previous


내가 주니어 개발자일때는 회사가 크지 않아 백엔드와 프론트엔드를 모두 맡아야하는 상황에서 이런 문제로 고민을 많이 했었다.

<aside> ❓ 유효성 검증은 서버와 프론트중 어디서 해야하는가?

</aside>

이번 강의에서도 서론에 언급하는 내용인데, 나 역시 했던 고민이기에 다시 한 번 생각해봤다.

뭔가 직접 성능테스트를 한 것도 아니면서 그 때의 나는 둘 다 유효성 검증을 하면 안전하겠지만 속도가 너무 느려지지 않을까 고민을 했다. (트래픽도 몹시 작은 프로젝트였으면서..)

그래서 처음엔 서버쪽에 검증로직을 넣어서 구현을 했는데, 그렇게 되니 고객입장에서는 즉각적인 반응성이나 서버에 무조건 전송을 한 뒤에 결과를 알 수 있기에 사용성이 떨어지는 상황이 되었다. 그래서 클라이언트에만 구현을 했더니 이번에는 사용자가 볼 때는 그럴싸해서 보기 좋았지만, 당장 내가 테스트목적으로 api를 직접 javascript의 ajax로 콜만해도 유효성 검증을 다 뛰어넘어버리는 상황이 생겨서 보안에 취약한 상황이 생겼다.

그래서 그 당시에 결론은 지금으로썬 너무 멍청하지만, 어짜피 제한된 인원(지점의 특정 직급만 해당한다.) 만 사용하는 프로그램이고, 폐쇄된 환경에서 제공되는 프로젝트이기에 클라이언트에만 열심히 유효성 검증 코드들을 넣어놨었다. 물론, 차후에 서버측에도 검증 코드를 넣어놓는 상황이 생겼으니 결국 둘 다 넣게 되었다.

결론은 서버와 클라이언트 양 측에 적절히 검증을 섞어서 사용하며 서버에서 최종 검증은 필수다.

검증 과정


클라이언트와 서버간의 데이터 검증 과정은 성공했을때와 실패했을때로 구분되는데, 이를 그림으로 보면 다음과 같다.