[v3] springboot 블로그 만들기-8

데이터베이스를 조회하지 않고도 정규 표현식을 사용하여 형식을 검사할 수도 있지만 이번에는 ajax 를 사용한 유효성 검사를 해보았다.
HootJem's avatar
Sep 11, 2024
[v3] springboot 블로그 만들기-8
회원가입을 진행할 때 아이디가 중복인지 확인을 하고는 한다. 이는 db에 등록되어 있는 id 와 유저가 입력한 id를 비교하여 동일한게 있는지 확인하는 과정으로 이루어진다.
form 으로 전송할 시 필연적으로 페이지 리로드가 진행됨으로 꼭! 비동기 통신으로 이루어 져야한다.

html 수정

유효성 체크를 위한 버튼 추가
notion image
 
notion image
회원가입 버튼이 눌리면 onsubmit="return valid()" 가 실행된다. 이를 통해 중복 체크를 했는지 확인할 것. (true 면 실행, false 면 아무일도 안일어남)
 
<script> // bool 타입은 is 를 붙여 만든다. let isSameUsername = true; function valid(){ if(isSameUsername){ alert("중복체크가 필요합니다."); return false; }else { return true; } } </script>
 

중복체크 버튼에 sameCheck() 이벤트 추가

<button onclick="sameCheck()" type="button" class="btn btn-outline-primary">중복체크</button>
중복체크 버튼 클릭 시 실행될 함수를 만든다.
async function sameCheck() { // 1. username 가져오기 let username = $("#username").val(); console.log(username); // 2. fetch로 통신하기 let response =await fetch(`/user/samecheck?username=${username}`); let responseBody = await response.json(); console.log(responseBody); // 3. 중복됐으면 isSameUsername = true 프로미스로 받으면 패치댄 해야함 아니면어웨이트 if(responseBody.body){ isSameUsername=true; alert("중복된 유저네임이에요"); }else { isSameUsername= false; alert("가용가능한 이름입니다"); $("#username").attr("readOnly", true); } // 4. 중복 안됐으면 = isSameUsername = false; -> username input 을 read Only 로 }
중복되지 않은 아이디인 경우 해당 필드는 수정할 수 없도록 readOnly 한다.

서버 구축

@GetMapping("/user/samecheck") public ResponseEntity<?> sameCheck(@RequestParam("username") String username){ boolean isSameUsername = userService.유저네임중복되었니(username); return ResponseEntity.ok(Resp.ok(isSameUsername, isSameUsername ? "중복되었어요" : "중복되지않았어요")); }
Resp 코드
@AllArgsConstructor @Data public class Resp<T> { private Integer status; private String msg; private T body; public static <B> Resp<?> ok(B body){ return new Resp<>(200, "성공", body); } public static <B> Resp<?> ok(B body, String msg){ return new Resp<>(200, msg, body); } public static Resp<?> fail(Integer status, String msg){ return new Resp<>(status, msg, null); } }
public boolean 유저네임중복되었니(String username) { Optional<User> userOP = userRepository.findByUsername(username); if(userOP.isPresent()){ return true; }else{ return false; } }
isPresent 를 사용하여 조회된 userOP 가 비어있는지 확인한다. 비어있지 않다면 true 이므로 조회 요청한 아이디가 true 가 되면 중복되었다는 의미이다.
따라서 true → 중복, false → 사용가능 상태가 된다.
 
3항연산자를 사용하여
return ResponseEntity.ok(Resp.ok(isSameUsername, isSameUsername ? "중복되었어요" : "중복되지않았어요"));
답변을 리턴한다.
 
notion image
notion image
리턴된 값의 body 를 보고 후 처리를 하면 완료된다.

 

마무리

데이터베이스를 조회하지 않고도 정규 표현식을 사용하여 형식을 검사할 수도 있지만 이번에는 ajax 를 사용한 유효성 검사를 해보았다.
다음 포스팅에서는 페이지네이션기능 구현을 해 볼것이다.

SpringBoot 블로그 만들기 - v3 시리즈 1. https://inblog.ai/hj/v3-시작-27809 (개발환경 설정 및 post 맨 이용한 api 테스트) 2. https://inblog.ai/hj/v3-springboot-블로그-만들기-2-28708 (댓글 엔티티 생성 및 양방향 매핑) 3. https://inblog.ai/hj/v3-springboot-블로그-만들기-3-28793 (댓글 조회하기 완료) 4. https://inblog.ai/hj/v3-rest-api-를-위한-exception-설정-28848 (REST API 위한 익셉션 핸들러 구현) 5. https://inblog.ai/hj/v3-springboot-블로그-만들기5-28859 (댓글 삭제 기능 구현) 6. https://inblog.ai/hj/v3-springboot-블로그-만들기6-29071 (ajax 를 사용한 댓글 작성) 7. https://inblog.ai/hj/v3-springboot-블로그-만들기7-29077 (게시물 검색 기능 구현) 8. https://inblog.ai/hj/v3-springboot-블로그-만들기8-29073 (유효성 검사)
 
Share article

[HootJem] 개발 기록 블로그