우리학교에서 우산을 대여하려면 대출장소로 가서 자신의 학번, 이름을 담당자에게 말해주어야한다.
오늘은 대출 신청 기능에 대해 다뤄볼것인데, 앱을 통해 대출을 신청할 수 있게 하려면 확실한 본인인증이 가능해야 다른 사람이 나의 이름으로 빌리는 일이 방지될 것이다.
그래서 나는 로그인처럼 구현하기 어려워 보이는 기능말고 간단하게 내가 미리 학번과 인증번호를 담고 있는 Json text를 만들어 이를 각 반 반장에게 뿌리고 사용자가 자신의 학번과 인증번호를 입력하면 반복문을 돌아서 Json text상에서 사용자가 입력한 학번이 있는 position(위치)을 찾아서 그 position에 있는 키가 pw(필자가 임의로 지정한 키, password의 줄임말)인 값을 가져와 사용자가 입력한 값과 비교해서 같으면 본인인증을 성공하는 방식으로 구현 하기로 했다.
그런데 여기서 문제가 생긴다. 약 300명이나 되는 전교생의 인증번호를 어떻게 다 일일히 Json text로 만들며, 설령 반복문을 통해 만들었다 하더라도 이를 각 반 반장들에게 전달해야할텐데 어떻게 이 Json text를 보기좋게 전달한단 말인가?
그래서 나는 이 문제를 해결하기 위해 구글에서 제공하는 코드 서비스 colaboratory를 사용했다.(사람들은 이를 줄여서 colab이라고 부르기도 한다) colab에서는 python 코드를 쉽게 사용할 수 있다. 그래서 나는 구글에 비밀번호를 만들기위해 파이썬으로 랜덤 패스워드를 만드는 방법을 찾아봤고 또 이를 각 반 반장들이 보기 좋게 전달하기 위해 파이썬으로 자동적으로 엑셀파일에 값을 입력하고 그 파일을 저장하는 방법을 찾아서 다음과 같은 코드를 colab에서 작성했다.
import xlwt, xlrd from google.colab import files import random import string def gen_random_pw(length): global result_str letters = string.ascii_letters result_str = ''.join(random.choice(letters) for i in range(length)) grade = "" ban = "" num = "" pw = "" idx =0 wb = xlwt.Workbook() ws_1 = wb.add_sheet('sheet0', cell_overwrite_ok=True) for i in range(4): if i != 0: grade = str(i) for k in range(7): if k != 0: ban = str(k) for j in range(24): if j != 0: if j < 10: num = "0" + str(j) if j >= 10: num = str(j) if j == 23: file_name = grade + '학년 ' + ban + '반 우산대여앱 인증번호.xls' wb.save(file_name) files.download(file_name) wb = xlwt.Workbook() ws_1 = wb.add_sheet('sheet0', cell_overwrite_ok=True) idx = 0 hakbun = grade + ban + num ws_1.write(idx, 0, hakbun) pw = gen_random_pw(4) ws_1.write(idx, 1, result_str) print('{"hakbun":"' + str(hakbun) + '",' + '"pw":"' + str(result_str) + '"},') idx +=1 file_name = '우산대여앱 인증번호.xls' wb.save(file_name) files.download(file_name)
그리고 패스워드가 생성될때마다 학번과 함께 Json text의 양식으로 출력하고 이를 복사해 붙여넣어서 Json Text를 listmap에 추가시켰다.


이렇게 인증번호 기능을 구현할 수 있었다.
그러나, 이 방식은 앱을 실행시키는 코드에 인증번호가 담겨있기 때문에 만약 누군가가 앱을 디컴파일하기라도 하면
인증번호가 유출될 수 있다는 단점이 존재해서 완벽한 시스템은 아니다. 보안이 취약하다는 뜻이다.
그래서 이를 보완하려면 firebase auth 등을 활용해 전문적으로 로그인을 구현하는 방법을 사용하는 것이 좋을 것 같다.