14강: 인증
로그인 만들기
이제 "누구세요?"를 물어볼 차례예요
12강에서 Supabase로 데이터베이스(인터넷 창고)를 만들었어요. 13강에서는 API(주문 창구)로 남의 데이터를 가져다 쓰는 법도 배웠고요.
그런데 한 가지 문제가 있어요.
지금 만든 할 일 목록을 떠올려 보세요. 누구든 접속하면 모든 할 일이 다 보여요. 내가 적은 할 일을 옆집 사람도 볼 수 있고, 옆집 사람이 적은 것도 내게 보여요. 심지어 남의 할 일을 삭제할 수도 있어요.
현실에서 이러면 곤란하죠? 내 다이어리를 아무나 열어볼 수 있다면요.
그래서 인증(Authentication, 이 사람이 누구인지 확인하는 과정)이 필요해요. "누가 쓰고 있는지"를 알아야, "내 데이터는 나만" 보여줄 수 있어요.
이건 뭐예요?
인증 = 놀이공원 입장 팔찌
인증을 놀이공원에 비유해 볼게요.
놀이공원에 들어가려면 매표소에서 입장 팔찌를 받아야 해요. 팔찌 색깔에 따라 탈 수 있는 놀이기구가 다르죠. 자유이용권 팔찌가 있으면 모든 놀이기구를 탈 수 있고, 기본권 팔찌는 일부만 가능해요. 팔찌가 없으면 아예 입장을 못 하고요.
웹 서비스도 완전히 같아요.
| 놀이공원 | 웹 서비스 |
|---|---|
| 매표소 | 로그인/회원가입 페이지 |
| 입장 팔찌 | 세션 토큰(Session Token, 로그인 상태를 증명하는 열쇠) |
| 팔찌 색깔 | 권한(Role, 어디까지 할 수 있는지) |
| 팔찌 검사 직원 | 서버의 인증 확인 로직 |
| 놀이기구 | 서비스의 기능과 데이터 |
로그인은 매표소에서 팔찌를 받는 행위예요. 로그아웃은 팔찌를 반납하는 거예요. 그리고 놀이기구(기능)를 탈 때마다 직원(서버)이 팔찌(토큰)를 확인해요.
RLS = 아파트 도어락
데이터를 보호하는 개념도 하나 더 있어요. RLS(Row Level Security, 행 단위 보안) 라는 거예요.
아파트를 생각해 보세요. 현관문에 공동 비밀번호가 있어서 입주민은 건물에 들어올 수 있어요. 그런데 각 집에는 도어락이 따로 있잖아요? 내 집 열쇠로는 내 집만 열 수 있고, 옆집 문은 열 수 없어요.
RLS도 같아요.
- 아파트 현관 비밀번호 = 로그인 (서비스에 들어올 수 있는지)
- 각 집의 도어락 = RLS (내 데이터만 볼 수 있는지)
로그인만으로는 부족해요. 로그인했다고 다른 사람 데이터까지 보이면 안 되니까요. RLS가 "이 데이터는 이 사람 거니까, 이 사람만 볼 수 있게"를 자동으로 걸어줘요.
소셜 로그인 = 대리 인증
소셜 로그인(Social Login)은 이미 다른 서비스에서 인증한 정보를 빌려 쓰는 거예요.
새 쇼핑몰에 회원가입할 때 "카카오로 로그인", "구글로 로그인" 버튼 본 적 있죠? 이건 카카오나 구글이 "이 사람, 우리가 이미 확인했어요. 믿어도 돼요"라고 보증해주는 거예요. 마치 친구가 "얘 내 친구야, 괜찮은 사람이야"라고 소개해주는 것과 비슷해요.
장점은 명확해요.
- 사용자는 새 비밀번호를 또 만들 필요 없어요
- 개발자는 복잡한 인증 시스템을 직접 만들 필요 없어요
- Supabase가 구글, 카카오, GitHub 등과의 연결을 전부 처리해줘요