본문 바로가기
GIT

[git] 회원가입 비밀번호 추천 생성조건, 정규식

by haheehee 2025. 3. 17.
728x90

 

회원가입 시 비밀번호를 어떻게 설정해야 할지 고민해본 적 있으신가요? 단순히 '123456'이나 'password' 같은 쉬운 비밀번호를 사용하면 계정이 해킹될 위험이 매우 큽니다. 따라서 보다 안전한 계정 보호를 위해 강력한 비밀번호 정책이 필요합니다. 이 글에서는 비밀번호 생성 조건과 실제 시행착오 사례를 통해 어떻게 하면 더 안전한 비밀번호를 만들 수 있는지에 대해 자세히 안내해드립니다.

정규식(Regular Expression)이란?

정규식은 문자열에서 특정한 패턴을 찾거나, 검증하거나, 치환하는 데 사용되는 문자열입니다. 예를 들어, 이메일 주소, 전화번호, 비밀번호와 같은 입력값을 검증할 때 유용하게 사용됩니다.

정규식의 작동 원리

정규식은 문자열을 패턴과 비교하여 일치 여부를 판단합니다. 정규식의 기호와 패턴을 활용하여 입력된 문자열이 조건을 충족하는지 검사합니다.

  • ^: 문자열의 시작
  • $: 문자열의 끝
  • \d: 숫자를 의미
  • \S: 공백이 아닌 문자를 의미
  • [a-z]: 소문자 a부터 z까지의 문자
  • (?=.*[a-z]): 소문자가 최소한 하나 포함되어야 함

1. 비밀번호 생성 필수 조건과 코드 예시

  • 최소 길이: 비밀번호는 최소 8자 이상이어야 합니다.
    ^.{8,}$
    const isValidLength = password => /^.{8,}$/.test(password);
  • 소문자 포함: 최소 1개 이상의 소문자(a-z)를 반드시 포함해야 합니다.
    ^(?=.*[a-z])
    const hasLowercase = password => /^(?=.*[a-z])/.test(password);
  • 숫자 포함: 최소 1개 이상의 숫자(0-9)를 포함해야 합니다.
    ^(?=.*\d)
    const hasNumber = password => /^(?=.*\d)/.test(password);
  • 특수문자 포함: 최소 1개 이상의 특수문자(!@#$%^&* 등)를 포함해야 합니다.
    ^(?=.*[!@#$%^&*()_+{}\[\]:;<>,.?~\\-])
    const hasSpecialChar = password => /^(?=.*[!@#$%^&*()_+{}\[\]:;<>,.?~\\-])/.test(password);
  • 공백 문자 제한: 비밀번호에 공백(스페이스)은 사용할 수 없습니다.
    ^\S*$
    const noSpaces = password => /^\S*$/.test(password);
  • 동일 문자 연속 제한: 동일한 문자가 3번 이상 연속될 수 없습니다.
    ^(?!.*(.)\1\1)
    const noTripleRepeat = password => /^(?!.*(.)\1\1)/.test(password);
  • 연속된 숫자/문자 제한: 'abc', '123'과 같은 연속된 문자는 피해야 합니다.
    ^(?!.*(012|123|234|345|456|567|678|789|890|abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|uvw|vwx|wxy|xyz))
    const noSequential = password => /^(?!.*(012|123|234|345|456|567|678|789|890|abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|uvw|vwx|wxy|xyz))/.test(password);

2. 전체 코드 예시

const validatePassword = (password) => {
  const isValidLength = /^.{8,}$/.test(password);
  const hasLowercase = /^(?=.*[a-z])/.test(password);
  const hasNumber = /^(?=.*\d)/.test(password);
  const hasSpecialChar = /^(?=.*[!@#$%^&*()_+{}\[\]:;<>,.?~\\-])/.test(password);
  const noSpaces = /^\S*$/.test(password);
  const noTripleRepeat = /^(?!.*(.)\1\1)/.test(password);
  const noSequential = /^(?!.*(012|123|234|345|456|567|678|789|890|abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|uvw|vwx|wxy|xyz))/.test(password);

  return isValidLength && hasLowercase && hasNumber && hasSpecialChar && noSpaces && noTripleRepeat && noSequential;
};

console.log(validatePassword("abc123!@#")); // false (연속된 문자 포함)
console.log(validatePassword("a1!a1!a1!")); // true (조건 충족)
  

3. 결론

비밀번호는 사용자의 계정을 보호하는 가장 중요한 첫 번째 장치입니다. 위에서 제시한 조건을 철저히 준수하면 해킹이나 계정 도용을 예방하는 데 큰 도움이 됩니다. 강력한 비밀번호로 자신의 소중한 정보를 안전하게 보호하세요.

 

728x90

댓글