이전 글 목록
1) 주어진 RFP를 바탕으로 주제 선정 - Spring Project(OTT 서비스)
2) ERD 설계 - Spring Project(OTT 서비스)
3) 회원 가입 기능 구현 - Spring Project (OTT 서비스)
4) 로그인, 로그아웃 기능 구현 - Spring Project (OTT 서비스)
5) 상세 페이지 및 회원 정보 수정 - Spring Project (OTT 서비스)
6) CRUD를 한번에 → 게시판 만들기(QNA게시판) - Spring Project(Mybatis) (OTT 서비스)
7) 게시판 페이징 처리 - Spring Project (OTT 서비스)
8) 카카오 지도 API 사용하기 - Spring Project (OTT 서비스)
9) (네아로) 네이버 로그인 API 활용 사이트 로그인 및 회원가입 - SPRING Project(OTT 서비스)
10) 카카오 로그인 API 사용하기(내 사이트 로그인 및 회원가입) - Spring Project(OTT Service)
11) 아임포트(포트원) API를 이용한 결제처리 - Spring Project(OTT Service)
12) 관리자 페이지 만들기(데이터 통계 및 chart.js, 유저 알고리즘) - Spring Project(OTT Service)
13) 관리자 페이지 (영상 정보 업로드 시 여러 테이블에 insert 및 update) - Spring Project(OTT Service)
14) 웹 소켓(Web Socket)을 활용한 실시간 알림 - Spring Service(OTT Service)
15) 웹소켓(WebSocket)을 활용한 관리자(1:N)와 사용자(1:1) 간의 채팅 만들기 - Spring Project(OTT Service)
16) 웹소켓(WebSocket)을 활용한 댓글 답글(대댓글)알림 - Spring Project(OTT Service)
17) 프로젝트 마무리 - Spring Project(OTT Service)
문제점
뷰에서 정규 표현식을 포함한 유효성 검사를 통해 가입 조건에 따라 가입을 한번 막고
회원가입 처리가 되기 전에 모델로 넘어올 때 당연히 조건을 통해 회원가입이 불가한 상황이라면 막아야 한다.
검수과정에서 원하는대로 되어있지 않았음을 발견했고, 수정 조치를 취했다.
수정
기존
@RequestMapping(value = "signup", method = RequestMethod.POST)
public ModelAndView createPost(UserDto userDto) {
userDto.setPassword(encoder.encode(userDto.getPassword()));
boolean tf = userService.create(userDto); //tf : 닉네임 중복여부 boolean
ModelAndView mav = new ModelAndView();
if (!tf) {
mav.addObject("message", "fault");
mav.setViewName("user/signup");
}else { //가입 성공
mav.addObject("message", "success");
mav.setViewName("common/start");
}
return mav;
}
기존 코드를 보니 tf를 선언하여 닉네임 중복여부만 파악한 후 가입을 진행시킨 모양이다.
모델에서의 검증이 없으니 당연히 모든 가입 절차가 끝난 후 아이디나 이메일, 휴대폰 번호를 지우고 가입하면 당연히 가입이 된다.
수정
@RequestMapping(value = "signup", method = RequestMethod.POST)
public ModelAndView createPost(UserDto userDto, ModelAndView mav) {
if(userDto.getId() == null || userDto.getEmail() == null || userDto.getNickname() == null || userDto.getPhone_num() == null) {
mav.addObject("message", "fault");
mav.addObject("signUpFail", userDto);
mav.setViewName("user/signup");
}
else {
userDto.setPassword(encoder.encode(userDto.getPassword()));
userService.create(userDto);
mav.addObject("message", "success");
mav.setViewName("common/start");
}
return mav;
}
길게 생각할 것 없이 생각나는대로 간단하게 수정했다.
1. 하나라도 null일 경우 가입이 안되도록 막았다.
2. 기존 설계자가 submit으로 전송하였기 때문에 페이지가 리로딩되는데, 유저의 편의성을 위해 userDto객체를 담아 view에 전송하였고, 실패의 경우 입력했던 값들이그대로 나올 수 있게 jstl 태그를 통해 설계했다.
<input value="<c:if test="${userDto.id != null}">${userDto.id}</c:if>
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!