왜 AI가 만든 회원가입 코드를 그대로 쓰면 위험한가
ChatGPT, Claude 같은 생성형 AI에 “이메일과 비밀번호로 회원가입 기능을 만들어줘”라고 요청하면 짧은 시간 안에 작동하는 코드를 얻을 수 있습니다. 그러나 실제 서비스의 회원가입은 단순한 입력 폼과 데이터베이스 저장 기능이 아닙니다. 계정 복구, 비밀번호 변경, 회원 탈퇴, 개인정보 처리방침, 이용약관, 관리자 권한, 데이터 보존 정책이 함께 설계되어야 하는 운영 시스템입니다.
특히 한국에서 이메일, 이름, 휴대전화번호, 소셜 로그인 식별자처럼 개인을 알아볼 수 있는 정보를 수집하면 개인정보 보호법상 개인정보 처리와 관련된 의무를 고려해야 합니다. AI가 생성한 코드는 일반적인 예시일 뿐이며, 실제 서비스의 법적 책임과 운영 책임은 서비스 운영자에게 남습니다.
핵심 원칙: AI는 코드를 만들 수 있지만 정책을 대신 결정할 수 없다
AI가 만든 코드는 “기능이 돌아가는가”에 초점을 맞추기 쉽습니다. 반면 실제 서비스는 다음 질문에 답할 수 있어야 합니다.
- 사용자가 비밀번호를 잊었을 때 어떤 절차로 계정을 복구하는가?
- 비밀번호를 바꿀 때 현재 비밀번호를 다시 확인하는가?
- 탈퇴 요청이 오면 어떤 데이터는 삭제하고 어떤 데이터는 보존하는가?
- 개인정보 처리방침에 실제 수집 항목, 목적, 보관 기간이 정확히 적혀 있는가?
- 약관 위반 사용자를 정지할 수 있는 계약상 근거가 있는가?
- 관리자 화면에서 개인정보를 최소한으로 보여주고 접근 기록을 남기는가?
AI에게 “회원가입을 만들어줘”라고만 말하면 이런 결정은 빠질 수 있습니다. 따라서 운영자가 먼저 정책을 정하고, 정하지 못한 항목은 AI가 질문하도록 프롬프트를 설계해야 합니다.
기본 보안: 비밀번호는 절대 원문으로 저장하지 않는다
서비스 운영자도 사용자의 비밀번호 원문을 알 수 없어야 합니다. 데이터베이스에 비밀번호를 평문으로 저장하면 유출 사고 발생 시 피해가 즉시 확대됩니다.
안전한 방식은 비밀번호를 단방향 해시로 변환해 저장하는 것입니다. 단방향 해시는 원문 복원이 실질적으로 불가능하도록 설계된 변환 방식입니다. 일반적으로 비밀번호 저장에는 빠른 일반 해시 함수보다 bcrypt, Argon2id, PBKDF2처럼 비밀번호 저장을 위해 설계된 알고리즘이 권장됩니다.
비밀번호 저장 시 확인할 항목
| 점검 항목 | 권장 방향 | 이유 |
|---|---|---|
| 평문 저장 여부 | 절대 금지 | DB 유출 시 모든 계정이 즉시 위험해짐 |
| 해시 알고리즘 | bcrypt, Argon2id, PBKDF2 등 사용 | 무차별 대입 공격 비용을 높임 |
| 솔트 사용 | 사용자별 고유 솔트 적용 | 같은 비밀번호라도 다른 해시가 생성됨 |
| 작업 비용 설정 | 서버 성능을 고려해 충분히 높게 설정 | 대량 추측 공격을 어렵게 함 |
| 로그 기록 | 비밀번호와 재설정 토큰을 로그에 남기지 않음 | 로그 유출로 인한 2차 사고 방지 |
Ruby on Rails, Django, Laravel 같은 주요 웹 프레임워크는 안전한 비밀번호 저장 기능을 제공하지만, 프레임워크 기본값을 사용한다고 해서 계정 복구, 탈퇴, 개인정보 처리방침까지 자동으로 해결되는 것은 아닙니다.
AI가 빠뜨리기 쉬운 5가지 필수 정책
1. 비밀번호 재설정 정책
사용자는 반드시 비밀번호를 잊어버립니다. 비밀번호 재설정 기능이 없으면 운영자는 계정 복구 요청을 수동으로 처리해야 하고, 그 과정에서 본인 확인 실수나 개인정보 노출 위험이 커질 수 있습니다.
비밀번호 재설정은 단순히 “메일로 링크 보내기”가 아니라 토큰 수명, 재사용 방지, 계정 존재 여부 노출 방지까지 포함합니다.
결정해야 할 정책
- 재설정 링크 유효기간: 예를 들어 15분 또는 30분처럼 짧게 설정합니다.
- 1회 사용 여부: 한 번 사용한 링크는 즉시 무효화합니다.
- 토큰 저장 방식: 재설정 토큰 원문을 DB에 저장하지 말고 해시해 저장하는 방식을 고려합니다.
- 계정 존재 여부 노출 방지: 없는 이메일을 입력해도 “가입된 이메일이면 안내 메일을 보냈습니다”처럼 동일한 응답을 표시합니다.
- 요청 제한: 같은 이메일 또는 IP에서 과도한 재설정 요청이 발생하면 속도 제한을 적용합니다.
- 알림: 비밀번호가 변경되면 사용자에게 변경 알림을 보냅니다.
2. 회원 정보 수정 정책
회원은 이메일, 비밀번호, 닉네임, 알림 수신 설정 등을 바꾸고 싶어 합니다. AI가 만든 최소 기능에는 회원 정보 수정 화면이 빠지는 경우가 많습니다.
특히 비밀번호 변경은 보안 민감 작업입니다. 로그인된 세션만 믿고 변경을 허용하면, 카페나 사무실에서 자리를 비운 사이 타인이 계정을 탈취할 수 있습니다.
결정해야 할 정책
- 비밀번호 변경 시 현재 비밀번호를 다시 입력받을지 결정합니다.
- 이메일 변경 시 새 이메일 주소 인증을 요구할지 결정합니다.
- 이메일 변경 후 이전 이메일과 새 이메일에 알림을 보낼지 결정합니다.
- 중요한 정보 변경 후 기존 로그인 세션을 유지할지, 재로그인을 요구할지 결정합니다.
- 회원 정보 변경 이력을 감사 로그로 남길지 결정합니다.
3. 회원 탈퇴와 데이터 삭제 정책
회원 탈퇴는 실제 서비스에서 가장 중요한 정책 중 하나입니다. 사용자는 서비스를 그만둘 수 있어야 하며, 개인정보의 삭제 또는 처리 정지와 관련된 요청을 할 수 있습니다. 탈퇴 기능이 없거나 탈퇴 후에도 로그인 가능한 상태가 유지되면 신뢰와 법적 리스크가 동시에 커집니다.
다만 모든 데이터를 즉시 물리 삭제하는 것이 항상 정답은 아닙니다. 결제, 세금, 분쟁 대응, 부정 이용 방지 등 합법적 보존 사유가 있는 데이터는 일정 기간 보관이 필요할 수 있습니다. 그래서 탈퇴 정책은 “무엇을 삭제하고, 무엇을 익명화하며, 무엇을 보존하는가”를 구분해야 합니다.
Soft Delete와 Hard Delete 비교
| 구분 | 의미 | 장점 | 주의점 |
|---|---|---|---|
| Hard Delete | DB에서 데이터를 물리적으로 삭제 | 개인정보 잔존 위험을 줄임 | 결제·분쟁 기록까지 삭제하면 법적·회계상 문제가 생길 수 있음 |
| Soft Delete | 탈퇴 상태로 표시하고 로그인 차단 | 거래 기록, 게시글 관계, 감사 기록 보존이 쉬움 | 개인정보가 계속 남을 수 있어 익명화와 접근 제한이 필요함 |
| 익명화 | 이메일, 이름 등 식별자를 복구 어렵게 변환 또는 제거 | 통계·거래 기록을 보존하면서 식별 위험을 낮춤 | 실제로 재식별이 어려운 수준인지 검토해야 함 |
실무적으로 자주 쓰는 방식
- 계정 상태를
active,suspended,deleted처럼 구분합니다. - 탈퇴 계정은 즉시 로그인할 수 없게 합니다.
- 이메일, 이름, 전화번호 같은 직접 식별자는 삭제하거나 익명화합니다.
- 결제 이력, 세금 관련 기록, 부정 이용 대응 기록은 법적 근거와 보관 기간을 정해 제한적으로 보존합니다.
- 개인정보 처리방침에 탈퇴 후 보관되는 항목, 목적, 기간을 명확히 적습니다.
4. 개인정보 처리방침
이메일 하나만 수집해도 개인정보 처리와 관련된 고지가 필요합니다. 개인정보 처리방침은 “우리도 대충 하나 올려야 하는 문서”가 아니라, 실제 서비스가 어떤 정보를 어떤 목적으로 처리하는지 설명하는 공식 문서입니다.
다른 사이트의 개인정보 처리방침을 그대로 복사하면 위험합니다. 실제로 수집하지 않는 정보를 적거나, 실제로 수집하는 정보를 누락하면 문서와 서비스가 불일치하게 됩니다. AI를 활용한다면 먼저 데이터베이스 필드, 회원가입 폼, 소셜 로그인 제공 항목, 로그 수집 항목, 결제 연동 항목을 정리한 뒤 이를 바탕으로 초안을 만들게 해야 합니다.
개인정보 처리방침에 포함할 주요 항목
- 수집하는 개인정보 항목: 이메일, 이름, 닉네임, 소셜 로그인 식별자, 결제 정보 등
- 수집 및 이용 목적: 회원 식별, 로그인, 고객 지원, 결제 처리, 부정 이용 방지 등
- 보관 및 이용 기간: 회원 탈퇴 시까지, 관련 법령상 보존 기간 등
- 파기 절차와 방법: DB 삭제, 익명화, 백업 데이터 파기 주기 등
- 제3자 제공 여부: 광고, 분석, 결제, 배송 등 외부 제공이 있는 경우
- 처리위탁 여부: 클라우드, 이메일 발송, 결제 대행, 고객 상담 도구 등
- 이용자의 권리와 행사 방법: 열람, 정정, 삭제, 처리정지 요청 등
- 개인정보 보호책임자 또는 문의 창구
개인정보 처리방침과 이용약관의 차이
두 문서는 모두 중요하지만 역할이 다릅니다.
| 문서 | 핵심 역할 | 없거나 부실할 때의 위험 |
|---|---|---|
| 개인정보 처리방침 | 개인정보를 무엇 때문에 어떻게 처리하는지 설명 | 개인정보 보호법상 고지·공개 의무 위반, 이용자 신뢰 하락 |
| 이용약관 | 서비스 이용 조건과 운영자의 조치 근거를 정함 | 어뷰징, 사기, 욕설, 스팸 계정에 대한 제한 근거 부족 |
개인정보 처리방침은 데이터 처리 설명서에 가깝고, 이용약관은 사용자와 서비스 사이의 계약 조건에 가깝습니다. 둘 중 하나만으로는 부족합니다.
5. 이용약관과 제재 정책
이용약관이 없으면 악성 사용자가 서비스를 악용해도 계정 정지, 게시물 삭제, 이용 제한의 근거가 약해집니다. 특히 커뮤니티, 마켓플레이스, SaaS, 콘텐츠 플랫폼처럼 사용자가 활동을 남기는 서비스는 약관과 운영 정책이 반드시 필요합니다.
이용약관에 포함할 주요 내용
- 회원가입 조건과 계정 관리 책임
- 금지 행위: 불법 행위, 사기, 스팸, 크롤링 남용, 욕설, 타인 권리 침해 등
- 서비스 이용 제한 사유와 절차
- 게시물 또는 사용자 생성 콘텐츠의 처리 기준
- 유료 서비스가 있다면 결제, 환불, 해지 조건
- 서비스 변경, 중단, 종료에 관한 안내
- 책임 제한과 분쟁 해결 절차
가입 화면에는 개인정보 처리방침과 이용약관에 대한 동의 절차를 명확히 넣어야 합니다. 선택 동의와 필수 동의가 섞인 경우에는 이용자가 구분해서 선택할 수 있어야 합니다.