🧑🏫
멘토 한마디
여기까지 온 것만으로도 이미 어제의 나보다 한 뼘 자랐어요. 끝까지 함께 가요! 🌱
로그인은 거의 모든 서비스의 출입문입니다. 그런데 인증을 어설프게 만들면 가장 먼저 뚫리는 곳이기도 합니다. 이번 챕터에서는 '내가 누구인지' 확인하고 그 상태를 안전하게 유지하는 기본 개념을 잡습니다.
인증과 인가는 다르다
- 인증(Authentication) — '당신이 누구인가'를 확인. 로그인이 여기에 해당합니다.
- 인가(Authorization) — '당신이 무엇을 할 수 있는가'를 결정. 예: 일반 사용자는 글 작성, 관리자는 삭제까지.
핵심 로그인했다고(인증) 모든 권한이 생기는 건 아닙니다(인가). 둘은 별개이며, 권한 검사는 요청마다 서버에서 따로 해야 합니다.
비밀번호는 절대 그대로 저장하지 않는다
비밀번호를 평문(그대로)으로 저장하면, 데이터베이스가 유출되는 순간 모든 사용자의 비밀번호가 노출됩니다. 그래서 비밀번호는 해시(hash)로 바꿔 저장합니다. 해시는 되돌릴 수 없는 일방향 변환입니다.
// 저장할 때: 해시로 변환
$hash = password_hash($input, PASSWORD_DEFAULT);
// 로그인 검증: 입력과 저장된 해시 비교
if (password_verify($input, $hash)) { /* 통과 */ }좋은 비밀번호 해시(bcrypt 등)는 일부러 느리고, 사용자마다 다른 무작위 값(소금, salt)을 섞습니다. 그래서 같은 비밀번호라도 저장된 해시는 사람마다 다릅니다.
세션: 로그인 상태 유지하기
HTTP는 요청마다 서로를 기억하지 못합니다. 그래서 로그인 후에는 '이 사람은 방금 로그인한 그 사람'임을 이어줄 장치가 필요합니다. 대표적인 방법이 세션(session)입니다.
- 로그인에 성공하면 서버가 세션을 만들고 고유한 세션 ID를 발급합니다.
- 그 ID를 브라우저의 쿠키(cookie)에 저장합니다.
- 다음 요청부터 브라우저가 쿠키를 함께 보내면, 서버는 ID로 '누구인지' 알아봅니다.
- 로그아웃하면 서버가 그 세션을 폐기합니다.
쿠키를 안전하게
| 옵션 | 역할 |
|---|---|
| HttpOnly | 자바스크립트가 쿠키를 못 읽게 해 XSS로부터 보호 |
| Secure | HTTPS 연결에서만 쿠키 전송 |
| SameSite | 다른 사이트發 요청에 쿠키가 함부로 실리지 않게(CSRF 완화) |
주의 로그인·인증 정보는 반드시 HTTPS에서 주고받아야 합니다. 평문(HTTP)으로 보내면 중간에서 비밀번호·세션을 가로챌 수 있습니다. 또한 '관리자만 가능'한 동작은 화면에서 숨기는 것으로 끝내지 말고, 서버가 요청마다 권한을 다시 확인해야 합니다.
정리하면, 인증으로 누구인지 확인하고, 비밀번호는 해시로 저장하고, 세션·쿠키로 상태를 잇되 옵션으로 보호하며, 권한은 서버에서 매번 검사합니다. 이 기본만 지켜도 흔한 사고의 대부분을 피할 수 있습니다.
AD
이해도 퀴즈 (10문항)
정답 6개 이상 → +200 XP배운 내용을 정확히 점검해 보세요. 10문항 중 6문항 이상 맞히면 챕터가 완료되고 경험치(XP)가 적립됩니다. 난이도는 문항마다 하·중·상으로 섞여 있어요.
하 쉬움중 보통상 어려움
중
Q1.인증(Authentication)과 인가(Authorization)의 차이로 옳은 것은?
하
Q2.비밀번호를 평문 그대로 저장하면 안 되는 이유는?
중
Q3.비밀번호 저장에 쓰는 '해시(hash)'의 특징으로 옳은 것은?
중
Q4.로그인 검증 시 입력한 비밀번호와 저장된 해시를 비교하는 함수는?
상
Q5.같은 비밀번호인데도 사용자마다 저장된 해시가 다른 이유는?
중
Q6.HTTP가 요청마다 서로를 기억하지 못하는데, 로그인 상태를 이어 주는 대표 장치는?
상
Q7.로그인 성공 후 세션이 동작하는 순서로 옳은 것은?
상
Q8.쿠키 옵션 HttpOnly의 역할은?
중
Q9.로그인·인증 정보를 평문(HTTP)으로 주고받으면 생기는 위험은?
상
Q10.'관리자만 가능한 삭제' 기능을 안전하게 만드는 방법은?
← 이전 챕터 · CH5
폼과 사용자 입력 다루기
form과 input의 구조, label 연결, 그리고 클라이언트·서버 2단계 검증과 입력을 항상 의심해야 하는 이유를 익힙니다.
다음 챕터 · CH7 →
AI와 함께 디버깅
에러 메시지를 제대로 읽고, 문제를 재현하고, AI에게 답을 끌어내는 질문법을 익힙니다. 계속 이어가기 🚀
📚 함께 보면 좋은 정보글
AD