기록하기

Fast API를 사용해서 간단하게 회원가입, 로그인 기능을 구현할 수 있다고? 본문

Fast API

Fast API를 사용해서 간단하게 회원가입, 로그인 기능을 구현할 수 있다고?

_parkdaxun 2023. 7. 18. 16:54

오늘은 뭘 개발해볼까 무엇을 더 공부해 볼까 고민하던 도중 학교 백엔드 수업 수행평가로 간단하게 제작했던 Todo List가 떠올랐다. 백엔드의 ㅂ도 몰랐던 나는 어떻게 하면 제일 간단하고 쉽게 todo 생성, 삭제 기능을 구현할 수 있을까 고민하던 도중 Fast API를 발견했었다. Fast API는 내가 상상했던 것 보다 훨씬 간단했고, 파이썬을 잘 모르더라도 쉽게 개발 할 수 있었다. 그래서 사실 수행평가를 진행 하면서 너무 쉽게 점수를 따는 것 아닐까.. 아쉬움이 들었고 Fast API를 사용해서 조금 더 어려운 기능을 구현하면 좋을 것 같다고 생각했다. 그래도 너무 갑자기 어려운거 하면 안 되니까 회원가입이랑 로그인 어떤가 !! 🥹

 

 

* 참고 *

 

제가 적은 코드에는 실제 애플리케이션 보안과 데이터베이스 관리를 하지 않았어요. 특히 비밀번호 저장에 대한 보안 및 해시화, 데이터베이스 사용 등을 고려해야하는데 간단하게 만든다는 거에 집중한 나머지.. 보안에 고려하지 않았습니다. 제가 적은 코드를 혹여나 사용하실 분이 있다면 간단한 데모용으로만 사용해야 하며, 실제 애플리케이션에서는 안전한 인증과 데이터베이스 사용을 고려해서 구현해야 합니다!!

 

 

 

 

회원가입 엔드포인트

 

@app.post("/register/")
def register(username: str, password: str):
    if username in users:
        raise HTTPException(status_code=400, detail="Username already exists")

    users[username] = {"username": username, "password": password}

    return {"message": "User created successfully"}

 

 

이미 같은 사용자명이 딕셔너리에 존재하는 경우, 중복 회원가입을 방지하기 위한 코드,

만약 입력한 사용자명이 이미 있는 사용자명이라면 "Username already exists"라고 출력하도록 했습니다.

 

 if username in users:
        raise HTTPException(status_code=400, detail="Username already exists")

 

 

사용자 정보를 딕셔너리에 추가하는 코드

 

users[username] = {"username": username, "password": password}

 

 

 

 

로그인 엔드포인트

 

@app.post("/login/")
def login(username: str, password: str):
    user = users.get(username)

    if user is None or user["password"] != password:
        raise HTTPException(status_code=401, detail="Invalid credentials")

    return {"message": "Login successful"}

 

 

딕셔너리에서 해당 사용자명(username)에 대응하는 사용자 정보를 가져오는 코드

 

user = users.get(username)

 

 

사용자 정보가 없거나 비밀번호가 일치하지 않으면 로그인을 실패하도록 하는 코드

 

if user is None or user["password"] != password:
        raise HTTPException(status_code=401, detail="Invalid credentials")

 

 

이런식으로 Postman에서 확인해보았다.. 에러가 안 뜨고 잘 된 것 같아서 안심..!

 

만약 이미 입력 했던 username을 한번 더 입력 한다면..?

이미 username이 존재한다고 회원가입을 완료하지 못한다!!

 

 

 

전체 코드

 

from fastapi import FastAPI, HTTPException

app = FastAPI()

# 임시로 사용자 정보를 저장할 딕셔너리
users = {}

# 회원가입 엔드포인트
@app.post("/register/")
def register(username: str, password: str):
    if username in users:
        raise HTTPException(status_code=400, detail="Username already exists")

    # 사용자 정보를 딕셔너리에 추가
    users[username] = {"username": username, "password": password}

    return {"message": "User created successfully"}

# 로그인 엔드포인트
@app.post("/login/")
def login(username: str, password: str):
    user = users.get(username)
    if user is None or user["password"] != password:
        raise HTTPException(status_code=401, detail="Invalid credentials")

    return {"message": "Login successful"}

 

 

 

Fast API를 통해 회원가입과 로그인 기능을 구현한 후 느낀 점 : 생각보다 너무 간단했고.. To do List 만큼 간단했다. 나도 뭔가 백엔드 개발자가 된 것 같은 느낌이고 다음에는 또 간단하게 웹 프론트까지 개발해서 api를 연결 하고 완벽하게 백엔드와 프론트 모두 구현 할 수 있으면 좋을 것 같다.