전공영역 공부 기록

FastAPI를 이용한 docker-compose API 개발 1편

악분 2021. 8. 9. 11:00
반응형

프로젝트 글 모음

1편: https://malwareanalysis.tistory.com/137

2편: https://malwareanalysis.tistory.com/138

3편: https://malwareanalysis.tistory.com/139

 

1편에서 다루는 내용

1편에서는 왜 이 프로젝트를 시작했는지, 어떤 것을 개발했는지 등 프로젝트 소개를 합니다. 

 

영상으로도 만나볼 수 있습니다.

https://youtu.be/o1Oq6Mhw-VM

 

 


 

1. 개발 이유

docker 명령어를 외부에서 수행하기 위해서 이 프로젝트를 시작했습니다.

 

개발한 프로젝트 목록을 도커로 띄우기 위에서는 무조건 서버 원격 쉘에 붙었어야 했습니다. 도커 포트를 오픈해서 다이렉트로 접근할 수 있지만 보안문제(ip와 포트만 알면 docker명령어 실행) 때문에 자체 개발을 하기로 결정했습니다.

그림1: 외부에서 docker 명령어를 수행하지 못하는 상황

 

 

 

2. 프로젝트 목표

이 프로젝트는 2개의 목표를 가지고 있습니다. 웹 프레임워크는 FastAPI를 사용했습니다.

 

  1. docker-compose명령어를 실행과 삭제하는 API를 개발
  2. 누구나 실행하지 못하도록 인증기능 구현

 

그림2 프로젝트 목표

 

 

2.1 docker-compose API

프로젝트 API는 docker명령어가 아닌 docker-compose를 제어합니다. docker를 사용하지 않는 이유는 형상관리가 힘들기 때문입니다.

 

docker-compose는 docker-compose.yaml파일로 컨테이너를 제어할 수 있습니다. 하지만 docker는 실행한 순간에만 존재하는 휘발성 데이터이므로 docker-compose와 다르게 한번 실행한 컨테이너는 다시 제어하기 어렵습니다. 

 

2.2 인증

프로젝트 API를 누구나 실행하지 못하도록 인증을 구현했습니다. 구현 난이도를 낮추기 위해 인가는 생략했고 Http Basic Auth(계정과 비밀번호 일치검사)를 사용했습니다. 

 

 

3. FastAPI를 선택한 이유

제가 웹 프레임워크를 선택한 기준은 2개입니다. FastAPI가 이 기준에 가장 부합해서 선택하게 되었습니다.

 

  1. 인증 로직을 빠르게 구현할 수 있도록 템플릿을 제공
  2. 도커 컨테이너 이미지를 쉽게 만들 수 있는 여부

 

후보로는 springboot, flask가 있었습니다.springboot에서 인증을 구현하기 위해서 springsecurity를 공부해야 해서 제외했습니다. flask는 도커 컨테이너 이미지 만들기가 fastapi보다 번거러워서 제외했습니다.

반응형