novalidate 속성이란?
HTML의 novalidate 속성은 폼(form)을 제출할 때 브라우저가 입력 데이터에 대한 유효성 검사를 수행하지 않도록 지정하는 부울(Boolean) 속성입니다. 일반적으로 required, pattern, type="email" 같은 유효성 검사 관련 속성이 설정된 경우, 브라우저는 폼 제출 시 자동으로 값을 검증하고 오류가 있으면 제출을 막습니다. 하지만 novalidate 속성을 <form> 요소에 추가하면 이러한 기본 검증 과정을 건너뛰고 폼이 그대로 제출됩니다.
서버 측에서 직접 유효성 검사를 처리하거나, JavaScript로 커스텀 검증 로직을 구현하는 경우 이 속성이 유용하게 활용됩니다.
문법
novalidate 속성의 기본 문법은 다음과 같습니다.
<form novalidate></form>
속성값 없이 속성 이름만 작성해도 되며, 필요에 따라 JavaScript의 setAttribute() 메서드를 사용해 동적으로 설정할 수도 있습니다.
예제
아래 예제는 텍스트 입력 필드에 required 속성이 적용된 폼에서, 버튼 클릭 시 novalidate 속성을 동적으로 추가하는 방법을 보여줍니다.
<!DOCTYPE html>
<html>
<style>
body {
color: #000;
height: 100vh;
background: linear-gradient(62deg, #FBAB7E 0%, #F7CE68 100%) no-repeat;
text-align: center;
}
input[type='text'] {
width: 300px;
padding: 8px 16px;
border: 2px solid #fff;
background: transparent;
border-radius: 20px;
display: block;
margin: 1rem auto;
outline: none;
}
.btn {
background: #db133a;
border: none;
height: 2rem;
border-radius: 20px;
width: 330px;
display: block;
color: #fff;
outline: none;
cursor: pointer;
margin: 1rem auto;
}
::placeholder {
color: #000;
}
</style>
<body>
<h1>HTML novalidate attribute Demo</h1>
<form>
<input type="text" placeholder="Enter your name" required>
<input type="submit" value="Submit" class="btn" onclick='check()'>
</form>
<button type='button' class="btn" onclick="set()">Set No Validation</button>
<div class="show"></div>
<script>
function set() {
document.querySelector('form').setAttribute('novalidate', 'true');
}
</script>
</body>
</html>실행 결과

텍스트 필드에 아무 값도 입력하지 않은 상태에서 "Submit" 버튼을 클릭하면, required 속성에 의해 다음과 같은 경고 메시지가 표시되며 폼 제출이 차단됩니다.

이번에는 "Set No Validation" 버튼을 클릭하여 폼 요소에 novalidate 속성을 설정한 뒤, 다시 이름을 입력하지 않고 폼을 제출해 보세요. 이번에는 경고 메시지 없이 폼이 정상적으로 제출되는 것을 확인할 수 있습니다.

정리
novalidate 속성은 브라우저의 기본 폼 유효성 검사를 비활성화하는 간단하면서도 강력한 도구입니다. 다만 클라이언트 측 검증을 건너뛰더라도 서버 측에서 반드시 데이터를 검증해야 한다는 점을 기억하세요. 클라이언트 검증은 사용자 편의를 위한 것이며, 보안과 데이터 무결성은 서버 측 검증으로 확보해야 합니다.