어떤 홈페이지든 아이디 중복체크는 기본이다.
아이디를 입력했을 때 바로 확인할 수 있어야하는데 이것을 AJAX 통신을 통해서 구현할 수 있다.
버튼을 클릭하여 중복 체크하기
JoinForm
<div class="container p-5">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<!-- 요청을 하면 localhost:8080/join POST로 요청됨
username=사용자입력값&password=사용자값&email=사용자입력값 -->
<div class="card">
<div class="card-header"><b>회원가입을 해주세요</b></div>
<div class="card-body">
<form action="/join" method="post" enctype="application/x-www-form-urlencoded">
<div class="mb-3">
<input id="username" type="text" class="form-control" placeholder="Enter username" required>
<button type="button" class="btn-warning" onclick="check()">아이디 중복체크</button>
</div>
<div class="mb-3">
<input type="password" class="form-control" placeholder="Enter password" name="password" required>
</div>
<div class="mb-3">
<input type="email" class="form-control" placeholder="Enter email" name="email" required>
</div>
<button type="submit" class="btn btn-primary form-control">회원가입</button>

아이디 중복 체크 버튼을 누를 시 check( )가 실행 돼서 중복체크 할 수 있도록 만든다.
API 컨트롤러
@GetMapping("/api/username-same-check")
public @ResponseBody ApiUtil<?> usernameSameCheck(String username){ //@ResponseBody 데이터 리턴을 위해
User user= userRepository.findByUsername(username);
if(user==null){
return new ApiUtil<>(false); // 아이디가 없다면 false를 바디에 담는다.
}else {
return new ApiUtil<>(true); // 아이디가 이미 존재한다면 true 를 바디에 담는다.
}
}
ApiUtil
package com.example.springblog._core.util;
import lombok.Data;
@Data
public class ApiUtil<T> {
private Integer status ;
private String msg ;
private T body;
public ApiUtil(T body) { // 통신 성공시
this.status = 200;
this.msg = "성공";
this.body = body;
}
public ApiUtil(Integer status, String msg) { // 통신 실패 시
this.status = status;
this.msg = msg;
this.body = null ;
}
}
AJAX 통신
<script>
let isSameCheck = false ;
function check(){ // 버튼 실행시 발동
let username =$("#username").val(); // 입력 필드의 값을 username 변수에 저장
$.ajax({ // 서버에 비동기 GET 요청
type:"get",
url:"/api/username-same-check", // 컨트롤러의 주소와 동일하게 작성
data: {username: username} // 요청데이터는 username
}).done((res)=>{
if(res.body==false){ // api 통신으로 받은 body 데이터를 가져온다.
isSameCheck = true;
alert("사용가능한 아이디입니다.")
}else{
isSameCheck = false;
alert("아이디가 중복되었습니다.")
}
}).fail((res)=>{
alert(res.responseJSON.msg);
});
}
</script>


DB에 존재 하지 않는 아이디를 누를 시 사용 가능하다는 팝업을 띄운다.


DB에 존재 하는 아이디를 입력하면 중복 됐다는 팝업이 뜬다.
onchange 이벤트 사용
<div class="mb-3">
<input id="username" type="text" class="form-control" placeholder="Enter username" name="username" onchange="check()" required>
</div>
onclick 대신 onchange를 사용해 사용자가 TAB버튼을 누를 시 실행 되게 만든다.
AJAX 통신
<script>
let isSameCheck = false ;
function check(){ // 버튼 실행시 발동
let username =$("#username").val();
$.ajax({
type:"get", // GET요청
url:"/api/username-same-check", // 컨트롤러의 주소와 동일하게 작성
data: {username: username}
}).done((res)=>{
console.log(res);
if(res.body==false){ // api 통신으로 받은 body 데이터를 가져온다.
isSameCheck = true;
alert("사용가능한 아이디입니다.")
}else{
isSameCheck = false;
alert("아이디가 중복되었습니다.")
}
}).fail((res)=>{
alert(res.responseJSON.msg);
});
}
</script>


DB에 존재 하지 않는 아이디를 입력하고 TAB과 같은 동작을 했을 때 사용 가능하다는 팝업을 띄운다.


DB에 존재 하는 아이디를 입력하고 TAB과 같은 동작을 했을 때 중복 됐다는 팝업이 뜬다.
Share article