2025년 March 17일
  1. 개발 히스토리
  2. [Backend] MSP 프로젝트 – CRUD

[Backend] MSP 프로젝트 – CRUD

기존 코드 구조

@user_router.post('/register')
 async def register(request: Request):
     body = await request.json()
     name = body.get('name')
     email = body.get('email')
     password = body.get('password')
     print(name, email, password)
 
     try:
         conn = get_db_connection()
         with conn.cursor() as cursor:  # 커서 사용  자동으로 닫히도록 with문 사용
             query = """
                 INSERT INTO user_table (email, pw, name, role, "group", status, register_at) 
                 VALUES (%s, %s, %s, %s, %s, %s, NOW())
             """
             cursor.execute(query, (email, password, name, 'user', 'newUser', 'active'))
             conn.commit()
         conn.close()  # 연결 닫기
         return {"message": "Register Success"}
     except Exception as e:
         return JSONResponse(content={"error": str(e)}, status_code=500)

기존에는 위 코드처럼 엔드포인트를 정의할 때, 직접 엔드포인트 정의 함수에서 데이터베이스에 접속하여 상호작용했습니다. 그러나 이러한 방식은 이후에 유지보수하기에 있어서, 코드가 너무 길고 복잡해집니다.

그렇기 때문에 현재 CRUD 디렉터리를 새로 생성하여,

DB와 상호작용하기 위한 함수만 미리 정의하도록 코드를 작성 중입니다.

CRUD 디렉터리 구조

CRUD 디렉터리 내에 project 관련 엔드포인트를 위한 project.py,

user 관련 엔드포인트를 위한 user.py를 나누어서 작성합니다.

우선 회원가입 (register)를 기준으로 변경된 구조입니다.

CRUD 코드

def user_register(db : Session, email : str, pw : str, name : str):
    new_user = User(
        email = email,
        pw = pw,
        name = name,
        role = 'user',
        group = 'newUser',
        status = 'active',
        register_at=datetime.utcnow()
    )
    db.add(new_user)
    db.commit()
    db.refresh(new_user)
    return new_user

회원가입 기능을 구현하기 위해서는, 요청된 데이터들을 User 테이블에 저장해야 합니다.

이러한 기능을 엔드포인트에서 구현하지 않고,

crud/user.py에서 회원 데이터 저장 함수를 따로 구현합니다.

그리고 엔드포인트를 정의할 때에는 따로 쿼리문이나 SQL Alchemy를 사용하지 않고,

미리 생성해둔 함수를 그대로 활용하는 방식으로 코드의 유지보수성 및 가독성을 높일 수 있습니다.

변경된 엔드포인트 코드

@user_router.post('/register', response_model=RegisterResponse)
async def register(request: RegisterRequest, db: Session = Depends(get_db)):
    email = request.email
    password = request.password
    name = request.name
    try:
        user_register(db, email = email, pw = password, name = name)
        return {"message": "Register Success"}
    except Exception as e:
        return JSONResponse(content={"error": str(e)}, status_code=500)

미리 함수를 정의하면서 실제 엔드포인트 코드가 더욱 간결해졌습니다.

현재 3월 17일 기준으로 회원과 관련된 모든 엔드포인트에 이러한 방식이 적용되었습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *

연관 글
BCT NEWS
인기 글
워드프레스 보안
워드프레스 모음
워드프레스 유지보수