펑션과 코딩의 행방불명

바나나톡 Online - 1일차 본문

Software Projects/SW & Backend

바나나톡 Online - 1일차

Function_Develop 2022. 5. 8. 20:14

오늘은 저번에 만들었던 바나나톡을 개조해서 실제 카톡처럼 서버와 연동시킬 것이다.

 

한 3시간동안 배탈의 민족의 소스코드를 개조하고 변형하면서 DB를 관리하였다. 먼저 DB를 살펴보자.

DB에서 table들은 계정이 담길 account, 유저의 친구를 담아줄 friend, 카톡방인 chat_room으로 구성하였다.

다른 테이블과 다르게 이번 테이블에는 token이라는것을 추가하였다. 이 token에서 한글자는 0-9 or A-Z가지, 그러니까 총 36가지로 유저와 카톡방의 token길이는 20이다.

#<TOKEN 생성 함수>
#접속 ID 생성 부호
thex=["0","1","2","3","4","5","6","7","8",
    "9","a","b","c","d","e","f","g","h","i",
    "j","k","l","m","n","o","p","q","r","s",
    "t","u","v","w","x","y","z"]

#Token 생성
TOKEN_LENGTH_CLIENT=10
TOKEN_LENGTH_DB=20
def Create_Token(length):
    """Cases : 36**(length)"""
    result=""
    for i in range(length):
        result+=str(thex[r.randint(0,len(thex)-1)])
    return result

token의 경우의 수는 13367494538843734067838845976576이다. 이정도면 겹치는일은 없을것 같다. 또 1초에 1억개씩 토큰을 도입해도 최대 1547163719773580288일이 걸릴것이다.

 

쨋든 그 다음으로는 MySQL의 데이터를 관리해줄 DataBase.py를 소개하겠다. DataBase.py에는  토큰 생성함수, 계정 존재 여부 함수, 채팅방으로 메세지를 보내는 함수, 회원가입 함수등 여러가지 함수를 만들어놨지만, 아직 SQL Injection을 방지하지는 못했다. 만약 이 상태로 내놓은 다면 나는 해킹당하기 먹이감일 것이다. 그래서 다음에 개발할때는 해킹방지 함수를 만들어야겠다.

#유저 ID 와 PW 확인
def isExist(uid, upw) -> bool:
    """Check Account With uid and upw"""
    sql_result=Command(f"select * from account where uid='{uid}' and upw='{upw}';")
    if sql_result!=():
        return True
    return False
 #예시로 uid에다가 ' or '1'='1 을 집어넣으면 해킹당하기 좋을거같다.

 

그리고 ManageClient.py에 저번에 사용했던 typing을 사용해보았다.

class UserList(typing.List[User]):
    def Alert(self, user:User, text:str):
        for i in self:
            if i!=user:
                i.Send(f"Client<Alert, {user.token}> : {text}")
        return True

이렇게 쓰면 좋은 점이 그냥 list에서는 아이템의 클래스를 몰라서 자동완성이 안되지만, 이거는 아이템마다 자동완성이 가능하기에 매우 유용하다. 그리고 이 파일에는 User 클래스가 있기 때문에 가장 코드가 복잡하다. 한 클래스안에 로그인, 로그아웃, 명령 처리, 수신, 전송 등 많은 기능을 가지고 있어야 하기 때문에 많드는데 가장 힘들었다.

 

이것들을 만드느라 체력을 다 써버렸다. 그래서 클라이언트에서 접속하는 함수를 만든후 로그인 함수를 만들때 오류가 나가지고 그냥 다음으로 미뤄버렸다. 그래도 오늘 많이 했으니까...

 


 

시험이 끝난주 주말이라 오늘하고 어제 합쳐서 코딩을 18시간 한거 같다. 덕분에 힐링은 안됐지만, 공부하는것 보단 나으니까. 덕분에 주말에 공부를 하지 못하였지만 뿌듯한 시간을 보냈다.

 

전체 소스코드는 모두 완성한 후에 github에 올리도록 하겠다.

'Software Projects > SW & Backend' 카테고리의 다른 글

바나나톡 Online - 2일차  (0) 2022.05.15
배탈의 민족  (1) 2022.04.10
Comments