| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- 취미
- 유효성 검사
- @AuthenticationPrincipal
- 그림
- Method 방식
- 시
- AJAX
- API
- JavqScript
- IntelliJ
- 백틱
- VS Code
- 자바 스크립트
- 카카오
- 보안
- 웹개발
- security
- Security 설정
- 낙서
- 로그인
- ES6+
- js
- login
- MockAPI
- HttpOnly
- 공부
- SpringBoot
- 분리 개발
- 웹
- findBy
- Today
- Total
개발가능구역
[ IntelliJ ] SpringBoot JavaScript 활용 유효성 검사 ( 비밀번호 확인 ) 본문
[ IntelliJ ] SpringBoot JavaScript 활용 유효성 검사 ( 비밀번호 확인 )
oosomall 2025. 9. 27. 20:03

사용 클래스 : Controller, Service, DTO, Entity
사용 인터페이스 : Service 구현, Repository
사용 DB : ORACLE
UI : HTML5, JavaScript, Thymeleaf
< Script code >
<script>
var isPwMatch = false;
$(document).ready(function () {
$("#pw_check_btn").click(function () {
var pw = $("#pw").val();
var pwCheck = $("#pw_check").val();
if(pw === "" || pwCheck === "") {
alert("비밀번호를 모두 입력해주세요.");
return;
}
$.ajax({
type: "post",
url: "/pwcheck",
data: { "pw": pw, "pwCheck": pwCheck },
success: function (data) {
if(data === "match") {
$("#pw_check_msg").text("비밀번호가 일치합니다.").css("color", "green");
isPwMatch = true;
} else {
$("#pw_check_msg").text("비밀번호가 일치하지 않습니다.").css("color", "red");
isPwMatch = false;
$("#pw_check").focus();
}
},
error: function () {
alert("서버 통신 중 오류가 발생했습니다.");
}
});
});
$("form").submit(function () {
if(!isPwMatch) {
alert("비밀번호가 일치하지 않습니다.");
return false;
}
});
});
</script>
✅ 스크립트 큰 요약
$(document).ready(function () {
$("#pw_check_btn").click(function () { ... });
$("form").submit(function () { ... });
});
스크립트에서 이 두 개는 같은 열에 위치한다
둘은 각각의 역할이 있다
- $("#pw_check_btn").click(...) : 패스워드 확인 버튼 클릭 시 실행
- $("form").submit(...) : 폼 전송 시 실행
✅ 스크립트 세부 요약 1
1️⃣
var isPwMatch = false;
- var : 변수를 선언할 때 쓰는 키워드 / JS에서 변수 만들 때 var, let, const 가 있다.
- isPwMatch = false : 초깃값으로 false를 지정한다.
- 이유: 처음에는 비밀번호 일치 여부가 확인되지 않은 상태이기 때문이다.
- AJAX에서 체크 후 일치하면 true 로 바뀐다.
즉, 폼 제출 전에 " 비밀번호가 일치하지 않는다 " 를 기본 설정으로 지정해 놓은 것이다.
2️⃣
$(document).ready(function () {}
- $ : jQuery 에서 사용하는 선택자 함수
- $( "#pw" ) : id가 pw인 요소를 선택
- $( " .class " ) : class 선택
- document : 현재 웹 페이지 전체 문서 객체
- $( document ).ready( . . . ) : 문서가 다 로딩된 후 JS 실행
- function() { . . . } : JS 에서 함수 정의 / 이벤트 느
- 특정 동작을 묶어서 실행할 수 있다
3️⃣
$("#pw_check_btn").click(function () {
var pw = $("#pw").val();
var pwCheck = $("#pw_check").val();
id가 pw_check_btn인 것이 click 이벤트가 생기면 function이 작동한다
var pw 에는 패스워드란에 입력한 value값이 들어온다
var pwCheck 에는 패스워드 확인란에 입력한 value값이 들어온다
.val(); value값을 읽거나 설정할 때 사용한다. 위 코드는 값 읽기 에 해당된다
4️⃣
if(pw === "" || pwCheck === "") {
alert("비밀번호를 모두 입력해주세요.");
return;
}
|| ( or 연산자 ) 를 통해서 pw, pwCheck 둘 중 하나라도 빈 문자열일 때, alert로 메시지 띄우고, 되돌린다.
즉, 두 개의 칸 모두 채워넣어야 하는 필수 입력란인 것이다.
나는 이를 부정조건문 이라고 부르고 싶다.
추가로 === 과 == 는 차이가 있다
- == : 값만 같으면 찬다 ( 자동 형변환 발생 가능성 )
- === : 값과 타입까지 같아야 찬다 ( 자동 형변환 방지 )
5️⃣
$.ajax({
type: "post",
url: "/pwcheck",
data: { "pw": pw, "pwCheck": pwCheck },
success: function (data) {
if(data === "match") {
$("#pw_check_msg").text("비밀번호가 일치합니다.").css("color", "green");
isPwMatch = true;
} else {
$("#pw_check_msg").text("비밀번호가 일치하지 않습니다.").css("color", "red");
isPwMatch = false;
$("#pw_check").focus();
}
},
error: function () {
alert("서버 통신 중 오류가 발생했습니다.");
}
});
위에 조건문( if )에서 무사히 입력이 다 되었다면 AJAX로 넘어온다
AJAX ( Asynchronous JavaScript And XML )
- 자바스크립트를 이용해서 페이지 새로고침하지 않고, 서버와 데이터를 주고받는 기술이다
- 비동기 ( Asynchronous ) : 요청하고 바로 화면 갱신하지 않아도 된다
- XML / JSON : 서버와 주고받는 데이터 형식
다시 코드로 돌아와서
- $.ajax({ . . . }); : $ 를 이용해서 ajax 사용
- type : 매핑 타입
- url : 어디로 데이터를 보낼 지에 대한 주소다
- data : { 변수1 : pw, 변수2 : pwCheck }
- pw = 패스워드란 입력 데이터, pwCheck = 패스워드 확인란을 서버로 보낸다
- 입력창에 1234로 입력했다면 pw1234&pwCheck1234 이런식으로 보내지는 것
- success : 서버 응답 성공 시 실행될 함. 즉, 서버가 내가 보낸 데이터에 응답하고 보낸 값이 data인 것이다.
- 서버에게 받은 데이터 값이 "mecth" 라는 문자열과 같을 경우 / isPwMatch = true;
- 서버에게 받은 데이터 값이 다른 경우 / isPwMatch = false;
- focus() 메서드는 id = pw_check인 입력창(패스워드 확인란)으로 커서를 옮긴다
- focus() 뒤에 .select() 메서드를 추가하면 해당 텍스트를 자동으로 파란색 드래그 선택해준다.
✅ 스크립트 세부 요약 2
$("form").submit(function () {
if(!isPwMatch) {
alert("비밀번호가 일치하지 않습니다.");
return false;
}
});
form 태그에서 전송( submit )되려고 할 때 실행된다
- isPwMatch 는 ajax 성공 여부( 비밀번호 일치 / 불일치 )를 저장한 전역 변수였다
- 조건문으로 데이터를 체크했을 때, 불일치 상태라면 메시지 띄우고, false 반환
- return false; 는 폼 제출을 막고, 이벤트를 중단시킨다
< Controller >
@PostMapping("/signup_save")
public String signup02(MemberDTO dto) {
if(!dto.getPw().equals(dto.getPwcheck())) {
return "member/signup";
}
service.save(dto);
return "redirect:/";
}
@PostMapping("/pwcheck")
@ResponseBody
public String pwcheck(@RequestParam("pw") String pw,
@RequestParam("pwCheck") String pwCheck) {
if(pw.equals(pwCheck)) {
return "match";
} else {
return "nomatch";
}
}
@ResponseBody 사용 이유 :
- Spring MVC 에서는 기본적으로 String을 반환하면 그 값이 뷰 이름으로 처리가 된다
- 뷰(view) : 사용자가 보는 화면 / JSP, HTML, Thymeleaf 등
- 뷰 이름(view name) : JSP나 HTML 등의 파일 이름
- AJAX 에서는 "match" 같은 텍스트로 받아야 하기 때문에 @ ResponseBody 를 붙이면 HTTP 응답 바디에 그대로 들어간다
- @Controller 말고 @RestController 를 사용하면 모든 메서드가 자동으로 @ResponseBody가 적용돼서 편리하
- ajax 중 url 에 작성한 주소로 데이터를 @RequestParam을 통해 받아온다
- 조건문 중 문자열 비교를 활용해서 pw과 pwCheck 문자열을 비교한다
- 데이터 응답을 스크립트로 보내 마무리 처리한다
이제 출력을 해보면


언젠가는 꾸미게 될 것이다..!
'SpringBoot > IntelliJ' 카테고리의 다른 글
| [ IntelliJ ] Spring Security 로그인 01 (0) | 2025.09.30 |
|---|---|
| [ IntelliJ ] JavaScript 활용 유효성 검사 ( 전화번호 ) (0) | 2025.09.29 |
| [ IntelliJ ] Validation 유효성 검사 (4) | 2025.09.26 |
| [ IntelliJ ] Spring Boot 검색 기능 ( 쿼리 사용 or 자동 쿼리 ) (2) | 2025.09.25 |
| [ IntelliJ ] Spring boot 페이징 처리하기 (0) | 2025.09.24 |