imhamburger 님의 블로그
데이터엔지니어 부트캠프 - FastAPI로 만든 API 서비스를 Docker 이미지로 빌드하기 그리고 Fly.io로 배포하기 (8주차) 본문
데이터엔지니어 부트캠프 - FastAPI로 만든 API 서비스를 Docker 이미지로 빌드하기 그리고 Fly.io로 배포하기 (8주차)
imhamburger 2024. 9. 1. 23:321. FastAPI 프로젝트 준비
참고로, FastAPI는 Python으로 작성된 고성능 웹 프레임워크로, REST API 및 웹 애플리케이션을 쉽게 개발할 수 있도록 도와주는 도구이다. 빠르고 쉽게 개발할 수 있어서 FastAPI인가보다..!
먼저, FastAPI 프로젝트가 준비되어 있어야 한다. 간단하게 main.py를 만들었다.
FastAPI 홈페이지에서 참고하여 작성하면 된다.
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "world"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
결과
2. Dockerfile 작성
Docker 이미지를 빌드하려면 Dockerfile이 필요하다. 만약 Docker가 뭔지 모르겠다면... 이전글을 참고!
FastAPI 애플리케이션을 위한 Dockerfile 작성법은 공식문서를 참고하면 간단하게 작성할 수 있다.
# 베이스 이미지로 python 3.11 사용
FROM python:3.11
# 작업 디렉토리 설정
WORKDIR /code
# 필요 패키지 복사 및 설치
#COPY requirements.txt .
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
# Uvicorn 서버를 사용하여 FastAPI 애플리케이션 실행
CMD ["uvicorn", "src.fishmlserv.main:app", "--host", "0.0.0.0", "--port", "8080"]
requirements.txt 파일에는 FastAPI와 Uvicorn을 포함한 필요한 패키지가 있어야 한다.
fastapi>=0.112.2
uvicorn[standard]>=0.30.6
나의 디렉토리 경로
3. Docker 이미지 Build
터미널에서 아래 명령어를 실행하면 Docker가 이미지를 만들어준다.
docker build -t my-app .
- 이 명령어는 현재 디렉토리(.)의 Dockerfile을 사용하여 my-app이라는 이름으로 Docker 이미지를 빌드한다.
4. Fly.io 설치 및 로그인
Fly.io 홈페이지를 따라하기만 하면 잘 설치된다. 나는 맥이라서 brew를 이용해 설치하였다.
# Fly CLI 설치
brew install flyctl
# Fly에 로그인
fly auth login
근데 Fly.io가 뭐야?
Fly.io는 애플리케이션을 배포할 수 있게 해주는 클라우드 서비스 플랫폼이다.
Fly.io는 Docker 컨테이너 기반으로 애플리케이션을 배포할 수 있어, 개발자가 로컬에서 테스트한 환경을 그대로 배포할 수 있다.
5. Fly.io 애플리케이션 생성
Fly.io를 설치하였으니 Fly CLI를 사용하여 새 애플리케이션을 생성할 수 있다.
fly launch
#애플리케이션 이름 설정하여 생성하기
flyctl launch --name {애플리케이션 이름}
6. 위에서 만든 Docker 이미지 배포
다음 명령어를 사용하여 도커 이미지를 배포하면 끝!
flyctl deploy
7. 배포 확인
배포가 완료되면 Fly.io에서 제공하는 URL을 통해 애플리케이션에 접근할 수 있다. Fly CLI는 배포가 완료되면 이 URL을 출력해주는데, 웹 브라우저에서 이 URL을 열어 FastAPI 애플리케이션이 잘 작동하는지 확인할 수 있다.
아주 잘 배포되었다!
일주일을 보내면서...
이번 주는 정말 눈 깜짝할 사이에 지나가 버린 것 같다. 팀 프로젝트에 몰두하다 보니 하루하루가 어떻게 흘러가는지도 잘 느끼지 못할 정도였다. 팀원들과 함께 협력하고, 의견을 조율하면서 하나의 목표를 향해 나아가는 과정이 매우 의미 있었고, 동시에 많은 것을 배울 수 있는 시간이었다.
팀프로젝트가 끝나고 Docker 이미지 빌드와 Fly.io를 이용한 배포 과정을 배우게 되었는데, 처음에는 상당히 복잡하게 느껴졌지만, 하나하나 차근차근 흐름을 이해해 나가다 보니 생각보다 어렵지 않다는 것을 깨달았다. 도커와 Fly.io를 통해 실제로 애플리케이션을 배포해 보니, 내가 만든 것이 다른 사람들에게 서비스될 수 있다는 점에서 신기했다.(아직 대단한걸 만든 것은 아니지만...!) 그래도 조금씩 성장해 나가는 나 자신을 느낄 수 있었다.
앞으로 나의방향
이제 다음 주부터는 머신러닝을 본격적으로 배울 것 같다. 그동안 머신러닝이라는 단어는 여러 곳에서 들어봤지만, 막상 내가 직접 배우게 된다고 생각하니 약간의 부담감이 느껴지기도 한다. 머신러닝은 복잡한 개념들이 얽혀 있어 처음에는 이해하기 어려울 것 같지만, 그만큼 얻을 것도 많을 것이라고 생각한다. 지금까지 해온 것처럼 꾸준히 복습하고 정리하면서 하나씩 배워나가다 보면, 언젠가는 머신러닝도 나에게 익숙한 영역이 될 것이라고 믿는다.
이번 주는 팀 프로젝트에 집중하느라 코딩 공부를 조금 소홀히 했지만, 이제 다시 원래의 공부 루틴으로 돌아가려고 한다. 머신러닝이라는 새로운 분야에 발을 들여놓는 만큼, 기초부터 탄탄히 다지며 차근차근 나아가려 한다.
'데이터엔지니어 부트캠프' 카테고리의 다른 글
데이터엔지니어 부트캠프 - Regressor 회귀모델 구현하기 (10주차) (0) | 2024.09.10 |
---|---|
데이터엔지니어 부트캠프 - nGrinder로 Nginx 로드밸런서 분산 처리 테스트해보기 (with Docker) (9주차) (1) | 2024.09.06 |
데이터엔지니어 부트캠프 - 두번째 팀프로젝트 (8/26~8/28) (8주차) (12) | 2024.09.01 |
데이터엔지니어 부트캠프 - 카프카(Kafka) 이해하기 (7주차) (1) | 2024.08.25 |
데이터엔지니어 부트캠프 - 영화데이터 수집 프로그램 만들기 (6주차) (1) | 2024.08.18 |