파이썬 예제 (로그인 시스템)

로그인 시스템

우리는 하루에도 여러번 홈페이지 접속을 위해 ID, Password 를 입력하곤 합니다.

[로그인 화면]

이런 로그인 시스템은 어떻게 구성되어 있을까요?

사이트마다 조금씩 다르지만 대부분 아래와 같습니다.

1. 먼저 회원가입을 통해 내 ID, PW 를 저장.

2. 로그인 화면에서 내 ID, PW를 입력해 둘다 맞는 경우 로그인 성공, 아니면 실패

3. 여러번 로그인에 실패하면 보안강화

보통은 이런 방식입니다.


Python 으로 구현한 Login System


파이썬으로 간단히 구성해 보았습니다.

# 로그인 실패 횟수
cnt = 0

while True:

    # ID, PW 입력받기
    id = input('ID 입력:')
    pw = input('PW 입력:')

    # ID 와 PW 일치하는지 비교
    if id=='superman' and pw=='1234':
        print('로그인 성공')
        break
    else:
        cnt = cnt + 1
        print('로그인 {}회 실패'.format(cnt))

    if cnt >= 3:       
        print('보안을 위해 로그인 시스템을 종료합니다!')
        break

    #줄바꿈
    print()

로그인 시도는 한번만 시도할 수 있는게 아니라, 보통 3~5회 정도 시도가 가능합니다.

따라서 while 반복문으로 로그인 관련 코드를 반복 실행합니다.

그다음은 7, 8번 라인을 통해 사용자로 부터 ID, PW를 입력받습니다.

input() 함수는 사용자의 입력을 기다리기 위해 아래 코드로 바로 넘어가 실행되지 않고 코드를 멈추게 만듭니다.


사용자가 'superman' 이라는 글자를 입력하고 엔터키를 누르면 input()명령어는 종료되며, 사용자가 입력한 'superman'이라는 글자를 id 변수에 저장합니다.

비밀번호도 마찬가지로 입력 받습니다.

프로그램 코드는 위에서 아래로 순차적으로 수행되므로 다음은 if 조건문을 만나게 됩니다.
# ID 와 PW 일치하는지 비교
    if id=='superman' and pw=='1234':
        print('로그인 성공')
        break
    else:
        cnt = cnt + 1
        print('로그인 {}회 실패'.format(cnt))
만약 앞선 과정에서 id 라는 변수에 'superman'이라는 문자열이 그리고 pw 변수에 '1234'라는 문자열이 저정되어 있다면 '로그인 성공' 메시지를 출력하고 break문을 통해 while 반복문을 탈출하게 됩니다.

여기서 and 라는 논리연산자의 역할이 중합니다.

id가 'superman' 이고 그리고 pw가 '1234' 즉, 두가지 조건이 모두 만족하는 경우에 참이라는 결과를 얻게 만듭니다.


만약 id, 또는 pw 중 하나로도 일치하지 않거나, 둘다 틀린 경우에는 else 구문으로 들어와 로그인 실패횟수를 저장하는 cnt 변수를 1증가시키고, 로그인 실패 메시지를 출력합니다.


이제 id, pw 가 3번이상 틀리면, 아래 코드가 동작하게 됩니다.
if cnt >= 3:       
        print('보안을 위해 로그인 시스템을 종료합니다!')
        break

cnt는 로그인이 실패한 횟수를 저장하는 변수인데 앞서 else구문, 즉 로그인이 실패할 때 마다 1씩 증가시켜 두었습니다.

이제 이 cnt값이 3보다 크면, 보안을 위해 로그인 시스템을 종료하도록 만듭니다.

break문을 이용해 while 반복문을 빠져나가도록 합니다.


어떤가요? 생각보다 쉽죠.

여기서 만족하지 말고 보안강화 기능을 추가해 나의 별명이나, 보물 1호 등과 같은 정보를 미리 입력하고, 3회 이상 실패시 보안강화 질문을 통해 계속해서 로그인을 진행할 수 있도록 업그레이드 시켜보면 좋을 것 같습니다.

GUI 버전의 회원가입, 로그인 예제 링크 참조바랍니다. 


감사합니다.

댓글

댓글 쓰기

이 블로그의 인기 게시물

Qt Designer 설치하기

C++ 예제 (소켓 서버, 이미지, 파일전송)