[TIL] parameter 확인하는 허접한 라이브러리 만들기

dev.soo·2020년 11월 1일

service 단이나 model 단에서 키에러가 나는 것을 잡아주기 위해 controller 에서 key_error 혹은 key의 type_error 를 잡아줄 수 있는 방법을 모색해보았다.

  1. @params 라이브러리 사용
  • 이전 기수들의 github 을 참조하면 모두 @ params라이브러리를 사용하였다.
    나는 앞선 포스트에서 밝혔듯이 python 에서 발생하는 에러도 client message 와 함께 관리하고 있는데, 이 라이브러리를 쓰면 그 함수를 호출하기가 어려워졌다. (사실 더 찾아봐야 하지만)
  1. controller 단에서 직접 하나하나 확인
  • 하기에는 함수가 길어지고, 지저분해 진다. -> 직접 모듈화를 하기로 마음먹음
  1. 내가 만든 라이브러리
    1. controller 에 request 가 전달되면, db를 연결하기도 전에 우선 parameter 를 확인하고자 하였다.
    1. 우선 모든 키가 들어와야 하고, 내가 원하는 경로( path parameter, body, querystring)로 들어왔는지 확인해 주어야 한다.
    1. 키의 타입이 내가 원하는 타입이 맞는지 확인해야 한다.

결국 이런 라이브러리를 만들게 되었다.

controller 상단, 함수 시작하자 마자 부분

        try:
            body = request.json
            essens_params = {
                int : body['seller_id'],
                int : body['action_id']
                }
            
            check_check = check_param(essens_params)
            
            if check_check:
                return error_code(check_check)

        except TypeError as exception:
            return error_code({'error':'C0006', 'programming_error':exception})

        except Exception as exception:
            return error_code({'error':'C0001', 'programming_error':exception})

Type Error 에서는 해당 key 가 오지 않았다는 말이고, 두 번째 error 는 기타 에러를 잡아준다. essens_params에서 key(타입)와 value(받아온 값)의 순서를 바꾸게 되면 check_params 함수로 전달되었을 때 value 가 모두 string 이 되어버리는 문제가 있어 순서를 바꿔주었다. .. 어떻게 알게 되었냐면.. 알고싶지 않다( 그래도 하나 배웠으니..!).

check_param 함수 내부는 아래와 같다.

def check_param(essens_params):
    type_list = [key for key, value in essens_params.items()]
    value_list  = [value for key, value in essens_params.items()]

    length = len(type_list)

    for i in range(length):
        if type(value_list[i]) != type_list[i]:
            return {'error':'C0005'}

변수명 check_check 는 급해서 아무렇게나 했는데 보다보니 귀엽다.

0개의 댓글