AI로 로그인 시스템 만들기
회원가입·로그인·로그아웃과 '누가 무엇을 볼 수 있는가'까지 AI로 안전하게. 초보자가 빠지는 보안 함정도.
한 문장으로
로그인 = '당신이 누구인가(인증)' + '무엇을 해도 되는가(인가)'. 보안 규칙을 분명히 말해야 AI가 구멍 난 코드를 주지 않는다.
만들 결과물
회원가입·로그인·로그아웃이 되고 역할로 권한을 나눌 수 있는 시제품. 그리고 빼면 안 되는 보안 규칙을 알게 된다.
먼저: 로그인은 사실 두 가지다
많은 사람이 '로그인'을 그냥 아이디와 비밀번호 입력으로 생각합니다. 사실은 두 가지 일입니다. **인증(당신이 누구인가)**과 인가(무엇을 해도 되는가). 인증에 성공하면 시스템은 보이지 않는 '통행증'을 줍니다. 이후 요청마다 그것을 가지고 다니므로, 시스템은 본인임을 알고 그 작업을 해도 되는지도 판단합니다.
이 가이드는 문법 암기가 아니라 요구사항을 AI에게 어떻게 설명할지를 다룹니다. 동작하는 것처럼 보이지만 첫날에 뚫리는 게 아니라, 안전한 로그인을 만들게 하기 위해서입니다.
세 가지 길: 직접 만들기·플랫폼·소셜 로그인
| 방법 | 적합 | 주의점 |
|---|---|---|
| 비밀번호 로그인 직접 구현 | 완전한 제어, 원리 학습 | 해싱·만료·무차별 대입 방어를 직접 책임 |
| Auth 플랫폼 | 빠르고 안전 | 벤더 종속. 대부분 무료 한도 있음 |
| 소셜 로그인(Google 등) | 가입 문턱 낮추기 | 그래도 내 쪽에서 세션을 만든다 |
초보자의 현실적인 선택은 보통 '플랫폼 Auth + 소셜 로그인'입니다. 가장 사고가 잘 나는 비밀번호 보관을 전문가에게 맡기고, 자신은 '누가 무엇을 볼 수 있는가'에 집중합니다.
AI에게 이렇게 말하세요, 안 그러면 구멍을 받습니다
AI는 '동작하는' 로그인은 잘 만들지만 기본값이 늘 안전하지는 않습니다. 프롬프트에서 다음을 명시적으로 요구하세요.
- 비밀번호는 반드시 해싱(bcrypt 또는 argon2)하고, 절대 평문으로 저장하지 않는다.
- 로그인 시 발급한 토큰/세션은 만료를 두고 취소 가능해야 한다(로그아웃·비밀번호 변경 시 무효화).
- 토큰은 httpOnly 쿠키에 넣고, 프런트엔드 JavaScript가 읽을 수 있는 곳에 두지 않는다.
- 권한 확인은 백엔드에서 한다. 프런트는 버튼을 숨길 뿐, 보안 경계가 아니다.
이 목록을 '인수 기준'으로 AI에게 붙여 넣고 단계별로 구현하게 하세요.
아키텍처
초보자가 빠지는 함정
- 평문으로 비밀번호 저장: 한 번 유출되면 모두의 비밀번호가 노출. 반드시 해싱.
- 만료 없는 토큰: 한 번 도난당하면 계속 사용. 짧은 만료 + 취소 가능으로.
- 프런트에서 권한 판단: '관리자인가?' 판단을 화면에 두면, 조금 아는 사람이 고쳐서 들어옵니다.
- 시크릿을 프런트에: API 키나 서명 키가 브라우저에 도달한 순간 공개나 마찬가지.
다음 단계
- 먼저 개념을 다집니다: 인증 Auth
- 다음으로 저장할 사용자 데이터를 설계: AI로 데이터베이스 설계하기
자주 묻는 질문
AI에게 로그인을 만들게 하면 되는데, 왜 이걸 배워야 하나요?
AI는 ‘동작하는’ 로그인은 잘 만들지만 기본값이 늘 안전하지는 않습니다. 평문 비밀번호, 만료 없는 토큰, 프런트의 권한 판단 등. 직접 쓸 필요는 없지만, 이 보안 규칙을 알아보고 ‘인수 기준’으로 요구하며 실제로 지켰는지 확인할 수 있어야 합니다.
비밀번호 로그인을 직접 만드는 것과 Google 로그인을 쓰는 것 중 무엇이 안전한가요?
초보자에게는 소셜 로그인(Google 등)이나 Auth 플랫폼이 대체로 더 안전합니다. 가장 사고나기 쉬운 ‘비밀번호 보관’을 전문가에게 맡기기 때문입니다. 직접 만들어도 되지만 해싱·무차별 대입 방어·토큰 관리를 스스로 책임져야 해 문턱이 더 높습니다.
참고 자료
- Authentication Cheat Sheet — OWASP
- Session Management Cheat Sheet — OWASP
CRM 경로 다음 단계: 폼에서 CRM →