maxlength 속성으로 사용자에게 입력 제한을 두지 마세요

이 글은 Don’t use the maxlength attribute to stop users from exceeding the limit 를 번역한 것입니다. 원문과 번역본 간에 일부 차이가 있을 수 있으니 참고하시기 바랍니다.

"오류 방지" 휴리스틱에 대해 들어본 적이 있나요?

이 말은 "사용자가 실수하지 않도록 모든 조치를 취하세요"라는 뜻입니다. 이는 좋은 조언입니다. 하지만 일부 디자이너들은 이를 "오류를 보여주지 마세요"라는 뜻으로 받아들이는데, 이는 잘못된 접근입니다.

maxlength 속성을 예로 들어보겠습니다. 생년월일(YYMMDD) 입력 필드에 maxlength="6"을 설정하면 사용자가 처음 6자 이후로 입력하는 내용은 자동으로 무시됩니다. 이는 사용자가 6자 이상 입력해서 발생할 수 있는 오류를 미리 막으려는 것입니다.

하지만 그렇다고 해서 사용자가 실수를 하지 않는다는 의미는 아닙니다. 결과적으로 maxlength 속성은 사용자 경험(UX)을 개선시키는 것이 아니라 오히려 더 나쁘게 만듭니다.

이유는 다음과 같습니다(그리고 올바른 방법에 대해서도 설명하겠습니다.):

문제점 #1: 인터페이스가 고장났거나 반응이 없는 것처럼 느껴진다

사용자가 최대 글자 수에 도달하면 더 이상 입력이 되지 않기 때문에, 사용자는 인터페이스에 문제가 있다고 생각할 수 있습니다. 또한, maxlength 속성이 적용되어 있다고 브라우저가 사용자에게 알려주지도 않습니다.

문제점 #2: 사용자는 입력이 무시되고 있다는 것을 인지하지 못할 수 있다. (그리고 잘못된 정보가 저장될 수 있다.)

많은 사용자가 타이핑할 때 화면이 아닌 키보드를 보기 때문입니다.

시각 장애인들을 위한 스크린 리더 프로그램도 입력 한도에 도달했다는 것을 알려주지 않고, 글자 수 제한이 어느 정도인지도 알려주지 않습니다.

사용자가 입력을 마친 뒤 화면을 확인했을 때 일부가 누락된 것을 알게 되면 다시 입력하고 수정해야 합니다. 만약 사용자가 확인을 하지 않는다면, 잘못된 정보가 저장될 수 있습니다.

문제점 #3: 제한보다 긴 값을 복사 붙여넣기 하면 잘리게 된다

많은 사람들이 실수를 피하려고 다른 문서에서 값을 복사해 폼에 붙여넣습니다. 그런데 제한된 길이보다 긴 값을 붙여넣으면 초과된 부분은 잘려나갑니다. 사용자는 이를 알아차리지 못하고 잘못된 값을 저장할 수 있습니다.

문제점 #4: 유연하지 못하다

예를 들어, 사용자가 생년월일을 '88/02/12'로 입력하려고 하는데 maxlength="6"이 적용되어 있다면, '88/02/'까지만 입력되고 뒤의 '12'는 입력되지 않습니다.

문제점 #5: 자동 완성된 값이 제한보다 길면 잘리게 된다

많은 사용자가 브라우저의 자동 완성 기능이나 비밀번호 관리자를 사용합니다. 이러한 도구를 이용해 폼을 채울 때, 값이 제한보다 길면 입력이 잘릴 수 있습니다.

다음과 같은 방법이 좋습니다

그냥 오류를 보여주세요

사용자가 제한보다 긴 값을 입력하면, 무엇이 문제인지 인지하고 수정할 수 있도록 알려주세요.

maxlength를 사용한 예제와 사용하지 않고 오류를 보여주는 예제 이미지
왼쪽: maxlength로 인해 입력된 내용이 잘렸습니다. 오른쪽: maxlength를 설정하지 않고 오류를 표시합니다.

제한 한도를 늘리세요

글자 수 제한이 꼭 필요하지 않다면, 제한을 늘리는 것이 좋습니다. 한도를 넉넉하게 하면 사용자가 잘못된 정보를 입력하는 것을 막을 수 있습니다.

남은 글자 수 표시 기능을 추가하세요

한도를 늘릴 수 없고 사용자가 한도를 초과할 가능성이 있다면, 남은 글자 수를 표시해 주세요. 이렇게 하면 사용자가 얼마나 더 입력할 수 있는지 쉽게 알 수 있어서 문제를 빠르게 파악할 수 있고, 추후 발생할 오류 가능성도 줄일 수 있습니다.

남은 글자 수 표시가 표시되는 Textarea 예제
Textarea 아래쪽에 남은 글자 수가 표시된다.