웹 개발 일기장 3 - 1 (로그인 로직)
우리는 데이터베이스와 연결하여 간단한 로그인 페이지를 만들어 보았습니다.
로그인은 무엇일까요??
우리는 아이디와 비밀번호를 입력하여 로그인을 실시합니다.
죽, 로그인은 그 사람이 맞는지 확인하는 작업으로 이때 식별과 인증 기능이 수행되어야합니다.
식별은 수 많은 데이터 중 특정 데이터를 찾는 작업입니다.
아이디가 대표적인 예시로 서버에는 수 많은 사람들의 아이디가 저장되어 있을 것입니다. 이 중 특정 아이디를 찾는 작업을 식별이라고 할 수 있습니다. 하지만 이 데이터를 요구한 사람이 본인이 맞는지 확인할 수 가 없습니다. 그래서 인증을 수행합니다.
인증은 특정 데이터의 소유자?? 본인이 맞는지 확인하는 작업입니다.
비밀번호가 대표적인 예시로 아이디와 비밀번호를 입력합니다. 수 많은 데이터 중 아이디로 특정 데이터를 찾을 수 있습니다. 하지만 인증!! 아무도 모르는 비밀번호를 같이 입력하여 그 소유자가 자신임을 입증할 수 있는 것입니다.
그래서 식별을 수행할 때 사용하는 정보는 식별 정보, 인증을 수행할 때 사용하는 정보를 인증 정보라고 합니다.
식별 정보 예시: 아이디, 이메일, 휴대폰 번호
인증 정보 예시: 비밀번호, OTP 번호
위에서 설명하였듯 식별 정보는 많은 데이터 중 특정 데이터를 골라낼 때 사용하는 정보이기 때문에 노출이 되어도 상관이 없습니다.
하지만!! 식별 정보 중 고유식별 정보가 있는데 이는 특정 개인을 식별할 수 있는 정보이기 때문에 노출이 되면 안되고 주민등록번호, 여권번호, 운전면허번호 등이 여기에 포함됩니다.
- 정보보안에서 고유식별정보 노출은 취약점으로 취급한다고 합니다.
식별 정보는 노출 되어도 상관없다고 했는 데 인증 정보는 어떨까요??
당연히 아시겠지만, 노출이 되면 안됩니다. 내가 아닌 다른 사람의 정보를 알 수 있다는 뜻이 되니까요...
이렇게 식별과 인증에 대해서 알아보았습니다.
그럼 이제 식별과 인증을 진행하는 간단한 로그인 로직을 설명과 같이 만들어 보겠습니다.
먼저 로그인 로직을 간단히 설명하면...
우리는 식별을 하기위해 DB에서 로그인할 때 입력한 아이디가 있는지 확인할 것 입니다.
그런 다음 DB의 비밀번호가 입력한 비밀번호와 같은 지 비교하여 인증을 실시합니다.
1. 식별과 인증을 동시에 하는 로그인 로직
식별과 인증을 동시에 하는 로그인 로직을 만드려면 어떻게 해야할까요??
바로 DB에 질의를 할 때 로그인을 구현할 수 있습니다.
예시입니다... : SELECT * FROM users WHERE id="$userid" and pw="$userpw";
이해가 되실까요?? 입력한 아이디와 입력한 비밀번호가 동시에 같은 데이터만 찾는 것이죠!!
만약 하나라도 틀릴 경우 원하는 데이터를 찾을 수 없을 것입니다.
그리고 결과가 있으면 로그인 성공이 되고, 결과가 없으면 하나라도 틀렸다는 것이기 때문에 로그인을 실패하게 됩니다.
바로 실습으로 확인해보겠습니다.

SQL 질의를 예시와 같이 아이디와 비밀번호를 동시에 검사하여 결과를 가져오는 것이 보입니다.

먼저 아이디와 비밀번호를 맞게 입력해보겠습니다. 그러면 로그인 성공되는 것을 확인할 수 있습니다.


2. 실벽과 인증을 분리해서 실행하는 로그인 로직
식별과 인증을 분리해서 실행하는 로그인 로직을 만드려면 어떻게 해야할까요??
처음 로그인 설명처럼 먼저 DB에서 입력받은 아이디를 찾아서 비밀번호를 가져옵니다. 만약 없으면 당연히 로그인 실패!!!
가져온 비밀번호와 입력받은 비밀번호가 같은지 비교하면 끝!!!
예시입니다... : SELECT * FROM users WHERE id="$userid";
그 후 if (가져온 비밀번호 == 입력받은 비밀번호) { 로그인 성공 } else { 로그인 실패 }
이렇게 하면 먼저 아이디로 식별 후 가져온 비밀번호로 인증하는 식별과 인증을 분리하는 로그인이 완성됩니다.

예시와 똑같이 적은 것을 확인할 수 있습니다. 결과도 바로 보겠습니다.
이번엔 guest로 로그인 해보겠습니다.


이렇게 로그인을 구현할 수 있는 방법은 여러가지가 있습니다. 물론... 더 있을 것입니다.
생각보다 좀 길어진 관계로 다음 블로그에 이어서 하겠습니다.
다음 시간에는 hash 함수에 대해 알아보겠습니다!!!