인프런 커뮤니티 질문&답변

모기물림님의 프로필 이미지
모기물림

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

상품 수정

readonly를 풀고 ID를 강제 입력 했을 때의 대응법

작성

·

858

0

안녕하세요. 

수정 폼에서 개발자도구를 통해 상품 id input의 readonly를 지우면 임의로 값을 입력할 수 있게 되는데

수업 예제의 경우 itemRepository의 update 메소드에 id를 받는 로직이 없어서 소용이 없지만 

id 로직을 추가하면 변경이 가능한 것을 보고 작성하거나 선택할 수 없는 옵션을 강제로 입력하여 보냈을 때의 대응법이 궁금해서 질문드립니다.

예제와 같이 아예 처리 로직이 없을 수도 있지만

예를 들어 앞의 문항을 무엇을 선택했느냐에 따라 뒷 문항의 선택지가 제한되는 등의 설문폼이 있는 경우 일단 선택문항 전체에 대해 일괄적으로 로직처리를 할 것 같은데 이런 경우 어떻게 대응을 하게 되나요?

1. 변형을 방지하는 프론트엔드의 스킬과 노하우가 있다..?

2. 백엔드에서 검증 로직을 철저하게 짠다..?

3. (예제와 같이) 아예 손도 못대게 불필요한 로직을 배제한다..?

답변 1

1

안녕하세요. 

제가 프론트엔드에 대해서 자세히 몰라 아는 선에서 말씀드리자면

유효성 검사(validation)은 프론트에서도, 백엔드에서도 진행 되어야 한다고 알고 있는데요, 

가령 회원가입과 관련해서 ID의 최소 길이에 대한 검증이 필요하다면 회원가입 앞단에서는

 input 태그에서

<input type="text" id="name" name="name" required minlength="4" maxlength="8">

값이 필수로 입력되어야 하고, 최소-최대 길이에 대한 검증을 앞단에서 처리하면서

동시에 서버 단에서도

@PostMapping("/sign-up")
public String signUpSubmit(@Valid SignUpForm signUpForm, Errors errors) {
if (errors.hasErrors()) {
return "sign-up";
}
// 회원가입
}

처리하여 2번의 검증 절차를 통해 문제를 방지 할 수 있는거죠. 또한 이렇게 해야 서버 단에서의 검증 로직이 돌지 않아 부하를 줄일 수 있구요.

예를 들어, 동시에 10만명이 회원가입을 한다고 했을 때 5만명은 화면 단에서 검증이 걸린다면 서버에서 (동시에) 처리해야 할 유효성 검사에 대한 부하가 줄겠죠?

,

이러한 validation 관련하여서는 "스프링 유효성 검사" , "Spring validation" 키워드로 검색해 보시면 많은 정보들을 보실 수 있으시고 곧 출시하게 될 영한님의 MVC-2편 강좌 에서 다룰 내용으로 알고 있습니다.

,

말씀하신 id 로직을 추가하면 변경이 가능한 것을 보고 작성하거나 선택할 수 없는 옵션을 강제로 입력하여 보냈을 때의 대응법이 궁금해서 질문드립니다.

,

불필요한 파라미터가 넘어온다 했을 때 서버 단에서 해당 로직을 처리하는 부분이 없다면 무시하는 것을 볼 수 있습니다.

@Controller
public class TestController {
@GetMapping("/form")
@ResponseBody
public String form(@RequestParam Integer id, @RequestParam String name) {
return id + " " + name; // id와 name을 반환하여 화면에 echo하는 코드
}
}

설명에 틀린점이 있다거나 더 궁금한 사항이 있으시면 댓글 남겨주세요. 영한님께서 댓글 남겨주실 것 같습니다~

모기물림님의 프로필 이미지
모기물림
질문자

오 감사합니다!

모기물림님의 프로필 이미지
모기물림

작성한 질문수

질문하기