FastAPI - 모델의 중첩

2025. 8. 29. 11:18Programming Language/Python

반응형

현실의 구조를 표현하기 위해서는 여러 연관되는 물건들이 서로간의 연결 혹은 포함의 관계를 가지고 있는데 이를 코드를 치다보면 어떤 자료형을 통해서 어떤 방식으로 연결을 만들어 낼지에 대해서 고민을 많이 하게 된다.

 

그중에서 자바의 경우는 List 내부에 Map이 들어 있다거나 List 내부에 우리가 직접 만들어 둔 VO 혹은 DTO를 넣어 같은 타입의 다수의 객체가 하나의 범주안에서 존재해야하는 경우들이 있는데 Fast API는 그와 같은 과정으로 모델간의 중첩을 만들어 이를 구현한다.

 

모델의 중첩을 이야하기 하기 이전에 먼저 가변 타입들에 대해서 설명해보자.

list, dict, set 등의 가변 타입의 경우는 어떤 타입의 값이던 내부에 저장이 가능하다.

그렇기에 원하는 타입의 형태만 받기 위해서는 내부 타입에 대한 구체적인 명시가 필요한데, 이를 타입 힌트라고 한다.

list_var : list[str] = []
set_var : set[str] = set()
dict_var : dict[str, int] = {}

 

여기서 이 타입 힌트를 모델을 사용할 수 도 있는데 우린 이걸 통해서 모델의 중첩을 구현할 것이다.

 

먼저 모델 두가지를 생성해보자.

보면 서브모델을 상위 모델이 list로 가지고 있게 된다.

 

이러면 우리가 값을 보낼 때 SuperModel에 대한 값에 SubModel에 대한 값을 list의 형태로 같이 보내주면 두 모델이 모두 값을 할당받게 된다.

 

함수를 하나 생성해보고

이제 이 값을 구성해서 

요청을 던져보면

이렇게 모델이 중첩된 값을 받아서 응답하는 것을 볼 수 있다.

 

또한 이렇게 가변 형태가 아니라 그냥 변수 하나를 중첩하는 경우에는 

이렇게 했었는데 Union을 사용해서 

이렇게 받아서 안전하게 값을 받을 수 도 있다.

물론 이를 둘다 합친

이런 형태의 구현도 가능하다.

 

 

또 요청을 모델 자체를 list로 받고 싶다면 매개변수 측에서 위와 같이 선언해주면 된다.

 

간단하게 이런 기능들이 있고 이런식으로 사용하는 구나 정도로 넘어가면 될듯 싶다

반응형