③을 먼저 보겠습니다. ③을 보면 metadata라는 표현이 두 번 나옵니다. 여기에서 metadata는 프로젝트에서 정의한 모든 SQLAlchemy ORM 모델을 투영한 MetaData 객체를 의미합니다. 우리는 간단하게 SQLModel 클래스를 상속받기만 했지만, 내부적으로는 SQLModel이 만든 선언형 모델의 클래스(declarative base model)를 상속받는 처리도 포함되어 있습니다. 이 과정에서 SQLAlchemy가 관리하는 Metadata에 우리가 정의한 모델이 등록되며, Alembic은 이를 참조하여 현재 데이터베이스 상태와 코드상의 모델 정의를 비교할 수 있습니다.
①은 바로 ③을 위한 것입니다.
# noqa 주석이 있는 두 줄은(④) Alembic에서 마이그레이션 관리할 모델이 있는 모듈입니다. 이 두 줄을 import해야 주석 ①과 ③이 제대로 동작합니다. 그렇지 않으면 SQLModel에 있는 metadata에 모델 정보가 등록되지 않습니다.