본문으로 바로가기
728x90
반응형

목차

     

    개요 

    FastAPI에서 Makfile을 사용하다 보니 꽤나 자주 사용하는 명령어들의 모음이 생겼다. 언젠가 정리해둬야겠다 싶었는데 이번 기회에 정리해보고자 한다.


     

    1. ". env"를 사용할 수 있게 만들기

    ". env" 파일 프로젝트 코드 베이스 실행 간 필요한 환경변수들의 모음을 정의해 놓은 곳이다. Makefile에서도 이 환경변수를 참조해야 하는 경우가 있는데. 그럴 때 Makefile의 제일 상단에 다음과 같은 라인을 추가해 놓자.

    # .env 파일이 존재할 경우 환경변수로 가져오기
    ifneq (,$(wildcard .env))
        include .env
        export $(shell sed 's/=.*//' .env)
    endif

     


    2. uvicorn 실행하기

    개인적인 스타일에 따라 명령어를 어떤 식으로 정의할 정도의 차이겠지만 필자는 보통 Makefile을 통해 FastAPI 프로젝트를 실행하도록 명령어를 셋업 해둔다. 

    # makefile
    
    app.local:
    	 uvicorn src.main:application --host 0.0.0.0 --port 8080 --reload

     

    uvicorn 실행 시 특정 옵션을 사용하는 경우라면 다음과 같이 따로 정의해 둔다. 

    ...
    
    run.local.worker4:
    	uvicorn src:main.application --workers 4 --timeout-keep-alive 10  --log-config ./log.ini --reload

     

     


    3.  gunicorn 실행하기

    gunicorn 도 마찬가지다.

    run.gunicorn:
    	gunicorn src:main.application --worker-class uvicorn.workers.UvicornWorker -w 11 --keep-alive 60 --preload --bind 0.0.0.0:8000

    4. docker 실행하기

    docker 정도는 그냥 쉘에서 명령어로 실행하면 되지 않겠냐라고 할 수 있겠지만 Makefile을 통해서 명시적으로 드러내는 방법이 훨씬 더 낫다고 생각한다.

    run.docker.infra:
    	sudo docker-compose -f ./.docker/docker-compose-infra.yml up -d --remove-orphans

    5.  SQLAlchemy를 사용한다면 sqlacodegen 

    SQLAlchmey의 ORM 클래스를 자동으로 생성해 주는 sqlacodegen도 makefile에 정의해 두자.

    orm:
    	sqlacodegen mysql+pymysql://root:1234@localhost:9501/db > ./config/orm.py

     


     

    6. 테스트 실행하기

    locust를 이용해 로드테스트를 진행한다면 이 또한 포함이다.

    load.test:
    	locust -f ./load-test/locustfile-issue-v1.py --host=http://127.0.0.1:8000 --processes 3

    마치며

    기타 다른 예제로 Linting이나 Formatting 도구도 makefile에 두는 것이 좋은 선택일 수 있다. makefile에 명령어를 기술하는 방법은 프로젝트 수행 간 필요한 명령어를 공유하자라는 용도로 사용할 것을 추천하는 바이다. 

    728x90
    반응형