수련  ›  중급 — 서비스로 확장  ›  CH6 / 7
중급 — 서비스로 확장 ⏱ 14분 +200 XP

로그인·세션·인증 기초

인증과 인가의 차이, 비밀번호 해시 저장, 세션과 쿠키, 그리고 HTTPS·서버측 권한 검증의 필요성을 익힙니다.

🧑‍🏫
멘토 한마디
여기까지 온 것만으로도 이미 어제의 나보다 한 뼘 자랐어요. 끝까지 함께 가요! 🌱

로그인은 거의 모든 서비스의 출입문입니다. 그런데 인증을 어설프게 만들면 가장 먼저 뚫리는 곳이기도 합니다. 이번 챕터에서는 '내가 누구인지' 확인하고 그 상태를 안전하게 유지하는 기본 개념을 잡습니다.

인증과 인가는 다르다

  • 인증(Authentication) — '당신이 누구인가'를 확인. 로그인이 여기에 해당합니다.
  • 인가(Authorization) — '당신이 무엇을 할 수 있는가'를 결정. 예: 일반 사용자는 글 작성, 관리자는 삭제까지.
핵심 로그인했다고(인증) 모든 권한이 생기는 건 아닙니다(인가). 둘은 별개이며, 권한 검사는 요청마다 서버에서 따로 해야 합니다.

비밀번호는 절대 그대로 저장하지 않는다

비밀번호를 평문(그대로)으로 저장하면, 데이터베이스가 유출되는 순간 모든 사용자의 비밀번호가 노출됩니다. 그래서 비밀번호는 해시(hash)로 바꿔 저장합니다. 해시는 되돌릴 수 없는 일방향 변환입니다.

// 저장할 때: 해시로 변환
$hash = password_hash($input, PASSWORD_DEFAULT);

// 로그인 검증: 입력과 저장된 해시 비교
if (password_verify($input, $hash)) { /* 통과 */ }
좋은 비밀번호 해시(bcrypt 등)는 일부러 느리고, 사용자마다 다른 무작위 값(소금, salt)을 섞습니다. 그래서 같은 비밀번호라도 저장된 해시는 사람마다 다릅니다.

세션: 로그인 상태 유지하기

HTTP는 요청마다 서로를 기억하지 못합니다. 그래서 로그인 후에는 '이 사람은 방금 로그인한 그 사람'임을 이어줄 장치가 필요합니다. 대표적인 방법이 세션(session)입니다.

  1. 로그인에 성공하면 서버가 세션을 만들고 고유한 세션 ID를 발급합니다.
  2. 그 ID를 브라우저의 쿠키(cookie)에 저장합니다.
  3. 다음 요청부터 브라우저가 쿠키를 함께 보내면, 서버는 ID로 '누구인지' 알아봅니다.
  4. 로그아웃하면 서버가 그 세션을 폐기합니다.

쿠키를 안전하게

옵션역할
HttpOnly자바스크립트가 쿠키를 못 읽게 해 XSS로부터 보호
SecureHTTPS 연결에서만 쿠키 전송
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.'관리자만 가능한 삭제' 기능을 안전하게 만드는 방법은?

📚 함께 보면 좋은 정보글

정보글
API 키 발급과 보관
정보글
AI 코드 함정 피하기
AD