3장. 회원가입 / 로그인 API 만들기
백엔드 API 를 만드는 기초를 익혔으니, 우리가 앞으로 진행 할 프로젝트의 회원인증 작업을 시작해보도록 하겠습니다. 우리가 만들 회원인증 시스템에서는, 이메일 로그인과, 페이스북, 구글을 사용한 소셜로그인 기능을 구현 할 것인데요, 이번 강의에선 이메일 회원인증을 먼저 구현하도록 하겠습니다.
이메일 회원인증 (앞으로 로컬인증이라고 부르겠습니다) 을 구현하기 위해선 다음 API 들을 만들어주어야 합니다.
- POST /api/register/local: 회원가입 API
- POST /api/login/local: 로그인 API
- GET /exists/:key/:value: 이메일 / 아이디 중복확인
- POST /logout: 로그아웃
이번 3장에서는, 계정을 위한 데이터 스키마 디자인과, 데이터 생성 / 검증작업을 진행하도록 하겠습니다.
회원가입을 할 때엔, 이메일, 아이디, 그리고 비밀번호를 필요로합니다. 이 정보들을 데이터베이스에 저장을 하게 되는데요, 비밀번호의 경우엔 전달받은 비밀번호를 그대로 데이터베이스에 넣으면 보안상 매우 취약합니다.
그 이유는, 최악의 상황에 해커가 서비스를 공격을 하게되어 계정정보가 담겨있는 데이터베이스의 읽기권한을 취득하게 되었을 때, 모든 계정정보에 대한 접근이 생기게 됩니다. 추가적으로, 사용자들은 여러 서비스에 비슷한 비밀번호를 사용하는 경향이 있는데, 이로 인하여 사용자들의 다른서비스의 게정이 탈취되는 추가피해가 발생 할 수 있겠죠. 그렇기에, 비밀번호를 전달받은 그대로 일반 텍스트형태로 저장하는것은 무조건 피해야합니다.
이에 대한 해결법중 하나는 데이터베이스에 비밀번호를 담을때 SHA256 와 같은 해싱 알고리즘 함수를 사용하여 데이터를 저장하는 것 입니다. 이렇게 하면, 회원가입을 한 다음에 로그인 요청을 받았을 때, 로그인시 사용한 비밀번호를 해싱한 값과 기존에 만들었던 비밀번호를 해싱한 값을 비교함으로서 검증을 할 수는 있지만, 해당 유저의 비밀번호가 무엇인지는 알 수 없게됩니다.