인증·인가 Auth
Auth는 두 가지 질문에 답해요. 당신은 누구인가(인증), 그리고 무엇을 할 수 있는가(인가).
한 문장으로
Auth는 '당신이 누구인지'와 '무엇을 할 수 있는지'를 다루는, 시스템 보안의 첫 번째 문이에요.
쉽게 말하면
Auth는 사실 두 가지를 합쳐 부르는 말이에요. 인증(Authentication) 은 "당신이 당신임을 증명하는 것" — 아이디와 비밀번호를 넣거나 Google로 로그인하는 거죠. 인가(Authorization) 는 "당신이 무엇을 할 수 있는지 정하는 것" — 예를 들어 일반 사용자는 관리자 페이지에 들어갈 수 없어요.
로그인에 성공하면 시스템은 당신에게 '통행증'(토큰 또는 세션)을 발급해요. 이후 요청마다 그걸 지니고 다니면, 시스템은 비밀번호를 다시 묻지 않고도 당신인 줄 압니다. 이 통행증은 유효 기간이 있어야 하고 취소할 수 있어야 해요. 그렇지 않으면 도난당했을 때 위험합니다.
아키텍처
동작 흐름
진짜로 유출을 부르는 실수
Auth 재앙의 대부분은 별난 게 아니라, 거듭 나타나는 몇 가지 실수에서 비롯돼요.
- 프론트엔드의 검사를 믿는다 — 관리자 버튼만 숨겨 두고 백엔드 엔드포인트는 열려 있어, 직접 호출하면 누구든 들어갈 수 있어요.
- 토큰에 기한이 없고 취소도 못 한다 — 도난당한 통행증이 그 길로 영원히 유효해져요.
- 비밀번호를 평문으로 저장한다 — 데이터베이스가 한 번 새면 모든 계정이 동시에 드러나요(비밀번호는 해시 처리해야 해요).
- 어느 한 엔드포인트에서 인가 검사를 빠뜨린다 — "당신에게 허락됐는가"를 묻지 않는 경로가 하나만 있어도 공격자에겐 충분해요.
흔한 오해: "로그인이 되면 = Auth 끝"이라는 생각이에요. 로그인은 "당신이 누구인지"(인증)에만 답해요. 모든 민감한 작업에는 백엔드에서 "당신에게 허락됐는가"를 따로 확인하는 검사(인가)가 여전히 필요해요 — 그리고 통행증(토큰)에는 유효 기간과 취소 수단이 있어야 합니다. 그렇지 않으면 도난당한 하나가 언제까지나 유효한 채로 남아요.
핵심 정리
- Auth = 인증(당신이 누구인지) + 인가(무엇을 할 수 있는지).
- 로그인 후에는 토큰 / 세션을 통행증으로 쓴다 — 유효 기간과 취소 수단을 갖춰서.
- 인가 검사는 반드시 백엔드에서. 프론트엔드에서 버튼을 숨기는 건 보안이 아니다.
일상 속 비유
회사에 들어가는 것과 같아요. 사원증을 찍어 직원임을 증명하고(인증), 출입 시스템이 어느 층에 들어갈 수 있는지 정하죠(인가).
장점
- 사용자 데이터를 남이 보거나 함부로 바꾸지 못하게 보호함
- 역할에 따라 누가 무엇을 할 수 있는지 제어함
- 표준 방식이 성숙해, AI가 안전한 템플릿을 만들어 냄
단점
- 틀리면 곧 보안 구멍이 되고, 결과가 심각함
- 토큰, 세션 같은 개념이 초보자에겐 추상적임
적합한 경우
- 회원, 관리자 페이지, 유료 기능이 있는 시스템
- 여럿이 협업하고 권한 등급이 필요한 플랫폼
맞지 않는 경우
- 개인 데이터가 없는, 완전히 공개된 정적 사이트
초보자 점수표
- 초보자 추천도
- 2/5
- 학습 비용(높을수록 비용 큼)
- 4/5
- 시장 수요
- 5/5
- AI 생성 친화도
- 4/5
자주 묻는 질문
인증(Authentication)과 인가(Authorization)는 무엇이 다른가요?
인증은 ‘당신이 누구인가’(로그인 등 신원 확인)이고, 인가는 ‘무엇을 할 수 있는가’(남의 데이터를 지울 수 있는지 등 권한 확인)입니다. 둘 다 빠지면 안 됩니다.
사용자 비밀번호를 직접 저장해야 하나요?
가능하면 피하세요. OAuth(구글/깃허브 로그인)나 성숙한 인증 서비스를 우선하세요. 굳이 직접 저장한다면 비밀번호는 반드시 해시(bcrypt 등)해야 하며 평문 저장은 절대 안 됩니다.
JWT와 세션 중 어느 쪽이 더 안전한가요?
둘 다 안전하며 차이는 관리 방식입니다. 세션은 즉시 폐기가 쉽고, JWT는 무상태 확장에 적합합니다. 초보자는 플랫폼 기본 솔루션을 쓰고 인증을 직접 발명하지 마세요.