Digital Ocean(Ubuntu)에 FastAPI 서버 구축 절차(카톡봇 환경설정) 소개

소개

안녕하세요. 17기 카톡봇뉴스레터 스터디장 복받어(BotFather) 김현우입니다.

  • 저희 카톡봇뉴스레터는 이번 17기 때 스터디원들 사이에서 재미와 함께 실제 본인의 사업 및 업무 분야에서 적용하는 두 마리 토끼를 모두 잡을 수 있는 스터디로 입소문이 나고 있습니다.

  • 또한 비개발자 분들이 어려워하는 서버 설치 및 운용과 데이터베이스를 카톡봇이란 매력적인 친구를 만들면서 자연스럽게 체득하게 되기 때문에 유사 개발자로 좋은 출발점이 될 것입니다.

  • 오늘은 그 중에서도 월 6천원(4불)으로 인터넷상에 나만의 부동산을 사는 서버 구축 과정을 상세하게 다뤄볼까 합니다. 서버라는 건 막연히 생각하면 나와 먼 얘기 같지만, 요즘 누구나 휴대폰을 사서 통신비용을 내고, 랩탑으로 다양한 작업을 하듯이, AI를 공부하는 사람, 활용하고자 하는 사람들에겐 대단히 중요한 터닝 포인트가 되는 지점임을 강조드리며 시작해 보겠습니다.

진행 방법

🎁 1. Digital Ocean 가입

  • 가. Digital Ocean 서비스 소개
    DigitalOcean(디지털오션)은 클라우드 컴퓨팅 서비스를 제공하는 미국 기업입니다. 쉽게 말해, 인터넷상에 서버(컴퓨터)를 빌려주는 서비스로, AWS(아마존), Azure(마이크로소프트), Google Cloud와 비슷한 역할을 합니다. 주로 스타트업, 소규모 기업, 개발자들이 많이 사용하지만, 누구나 쉽게 사용할 수 있도록 설계된 것이 특징

* Digital Ocean 접속해 볼까요?(주소 : https://www.digitalocean.com/)

  • 나. Digital Ocean 계정 생성

    • 1) 화면 우측 상단에 파란색 Sign up 클릭!

      파란색 배경과 Word Cloud가있는 웹 사이트

    • 2) Sign Up with Google 클릭

      백그라운드에 보트가있는 웹 사이트의 스크린 샷

    • 3) 본인의 구글 계정 선택

      한국의 Google 계정 로그인 페이지
      Google 계정 로그인 페이지를 보여주는 화면
    • 4) 가입자 설문 응답

      • 응답 예시)
        - 1번 문항(현재 신분) : Student
        - 2번 문항(가입목적) : AI or Machine learning
        - 3번 문항(AI와 머신러닝으로 하려는 첫 계획) : I’m not sure what I need yet(미정)
        - 4번 문항(팀원 수) : It’s just me(1인 대표)

        파란색 배경이있는 웹 사이트의 스크린 샷


📚 2. Droplet 구독

  • 가. Droplet이란?

Droplet이란?

Droplet(드롭릿)은 DigitalOcean에서 제공하는 가상 컴퓨터입니다.
쉽게 말해, 인터넷에 연결된 내 전용 컴퓨터 한 대를 온라인에서 빌려 쓰는 것과 비슷합니다.

비유로 이해하기

  • 내 집 PC와 비슷하지만, 온라인에 있음

    • 집에 있는 컴퓨터처럼, 프로그램을 설치하고, 파일을 저장하고, 웹사이트를 띄울 수 있습니다.

    • 차이점은 이 컴퓨터(드롭릿)는 인터넷상에 있어서, 언제 어디서나 접속할 수 있습니다.

  • 카페24, 가비아 같은 웹호스팅보다 자유로움

    • 일반 웹호스팅은 제한된 기능만 제공하지만, 드롭릿은 내 마음대로 설정하고 원하는 대로 사용할 수 있습니다.

Droplet의 특징

  • 필요할 때마다 빠르게 만들 수 있음

    • 클릭 몇 번이면 새로운 드롭릿(가상 컴퓨터)을 바로 만들 수 있습니다.

  • 월 5달러 정도의 저렴한 비용

    • 저렴한 가격으로 내 전용 서버를 가질 수 있습니다.

  • 웹사이트, 앱, 데이터베이스 등 다양한 용도

    • 개인 블로그, 회사 홈페이지, 앱 서버 등 원하는 용도로 사용할 수 있습니다.

한 줄 요약

Droplet은 인터넷에 있는 내 전용 컴퓨터 한 대를 빌려 쓰는 것이라고 생각하면 쉽습니다.
내 컴퓨터처럼 자유롭게 쓰면서, 언제 어디서나 접속할 수 있다는 점이 특징입니다.

  • 나. Deploy a virtual machine 클릭

    다양한 유형의 데이터를 보여주는 Google Analytics 대시 보드의 스크린 샷

  • 다. Create Droplets 설정하기!
    * Create Droplets 첫 화면

    파란색 배경이있는 웹 사이트의 스크린 샷

📚 Create Droplet 설정 요령

1) Choose Region : Singapore

2) Choose an image : Ubuntu / 22.04(LTS) x64

3) Choose Size : Basic / Regular / $4

4) Choose Authentication Method : SSH Key / 설정 방법 하단에 추가 설명

5) We recommend these options : (체크) Add improved metrics monitoring and alerting (free)

6) 지불 방법 등록(Go to Billing) / 지불방법 등록 전 Create Droplet 버튼 비활성화 상태

7) Create Droplet 클릭(월 4불 구독 시작)

👉 우분투 버전 선택 관련 참고 사항

어떤 이미지를 선택해야 할까?

  • 첫 번째(최상단) Ubuntu 24.10 x64 이미지는 최신 버전이지만, LTS(Long Term Support) 버전이 아니므로 서버 실습이나 운영 환경에서는 권장되지 않습니다.

  • LTS 버전(24.04 LTS, 22.04 LTS)는 장기간(최소 5년) 안정적인 보안 업데이트와 지원을 받으므로, 강의안이나 실습, 실제 서비스 환경에서는 LTS 버전을 선택하는 것이 훨씬 안전합니다.

실습에 맞는 추천

  • 실습, 서버 운영 모두에 적합:

    • Ubuntu 24.04 (LTS) x64
      최신 LTS 버전으로, 최신 기능과 장기 지원을 동시에 받을 수 있습니다.

    • Ubuntu 22.04 (LTS) x64
      안정성과 호환성이 가장 검증된 버전입니다.

  • Ubuntu 24.10 x64(첫 번째 선택지)는 실습 테스트나 최신 기능이 꼭 필요한 경우에만 사용하세요.
    일반적으로는 LTS 버전을 선택하는 것이 좋습니다.

요약 표

이미지 이름

특징

추천 용도

Ubuntu 24.10 x64

최신, LTS 아님

테스트/최신 기능 체험

Ubuntu 24.04 (LTS) x64

최신 LTS, 장기지원

실습/운영

Ubuntu 22.04 (LTS) x64

안정성, 호환성 최고

실습/운영

결론

  • 실습용 서버 초기화에는 "Ubuntu 24.04 (LTS) x64" 또는 "Ubuntu 22.04 (LTS) x64" 중 하나를 선택하는 것이 가장 안전하고 권장됩니다.

  • 첫 번째(24.10 x64)는 특별한 이유가 없다면 선택하지 않는 것이 좋습니다.

참고:
LTS 버전은 장기 지원과 안정성, 보안 패치 제공이 보장되어 초보자 실습에 가장 적합합니다.

👉 SSH 설정 요령

SSH 설정이란 무엇인가?
내 PC에서만 서버에 접속할 수 있도록 내 PC에 암호키가 들어 있는 파일을 저장한 다음 그 암호키를 내 서버에도 저장하여 접속 시 별도의 패스워드 없이 편하게 바로 접속할 수 있도록 해주는 기능(보안성과 편의성 향상)

  • (1) Add SSH Key 클릭

    애드워즈에서 새 계정을 만드는 방법
  • (2) ssh-keygen 명령어 복사

    Google 웹 로그 분석에 SSL 키를 추가하십시오

  • (3) 터미널(맥북), 파워쉘(윈도우) 열기

    • 맥북에서 터미널 열기 : cmd+space -> terminal 입력 후 터미널(검정 아이콘) 찾아서 선택(Enter)

    • 윈도우에서 파웨쉘 열기 : windows + r -> powershell 입력 후 Enter

  • (4) (2) 에서 복사한 ssh-keygen 명령어를 터미널/파워쉘에 붙인 후 엔터 3번 -> 내 PC에 키 페어 저장

    ssh-keygen
    • Your public key has been saved in .... 메시지가 나오면 페어키 저장은 성공!

      숫자가있는 문자 메시지의 스크린 샷

  • (5) 터미널/파워쉘에 위와 같은 화면이 나온 다음 다시 프롬프트 창에 cat ~/.ssh/id_rsa.pub 입력

    • cat ~/.ssh/id_rsa.pub 을 입력하면 Add public SSH key 창에 복사해서 붙일 SSH key가 제공됨.

    cat ~/.ssh/id_rsa.pub
    • 빨간 박스의 키를 복사하여 아래 Add public SSH key 창에 붙이기

    그 중간에 빨간 원이있는 문서
ADD SSL 키 페이지의 스크린 샷

  • (6) Name에 임의의 이름을 넣고 Add SSH Key 버튼을 누르면 SSH 설정 끝!


💡 3. Ubuntu에 FastAPI 가상 서버 올리기

가. 서버 업데이트

sudo apt update && sudo apt upgrade -y

- sudo : superuser do 의 약자로 관리자 권한으로 명령을 실행하란 의미
- apt : "Advanced Package Tool"의 약자로 우분투(및 데비안 계열 리눅스)에서 프로그램을 설치·업데이트·삭제할 때 사용하는 도구
- && : 앞 명려어가 성공하면 뒤 명령어를 실행하란 의미
- -y : yes"의 약자로, 업그레이드 과정에서 나오는 모든 질문에 자동으로 '예'라고 답하라는 뜻

나. 기본 패키지 설치

sudo apt install -y python3 python3-pip python3-venv

- sudo : superuser do 의 약자로 관리자 권한으로 명령을 실행하란 의미
- apt : "Advanced Package Tool"의 약자로 우분투(및 데비안 계열 리눅스)에서 프로그램을 설치·업데이트·삭제할 때 사용하는 도구
- python3 : 파이썬3 언어를 설치
- python3-pip : pip이라는 파이썬 전용 프로그램 설치 도구를 설치
- python3-venv : venv라는 파이썬 가상환경 도구를 설치

다. FastAPI 프로젝트 폴더 만들기

mkdir fastapi-project

- mkdir : make directory의 약자로 새 폴더를 만들 때 사용하는 명령어
- fastapi-project : 만들 디렉토리 이름으로 이름을 고민하기 싫으면 똑같이 넣고 가도 무방

cd fastapi-project

- cd : change directory의 앞자를 딴 약자로, 뒤에 나오는 폴더로 이동할 때 사용

라. 파이썬 가상환경 만들기

python3 -m venv venv

- venv는 virtual environment의 약자로 파이썬 가상환경의 약속된 이름입니다. 이 가상환경 안에서만 파이썬 프로그램을 설치·실행할 수 있어, 다른 프로젝트와 충돌하지 않게 도와줍니다.

source venv/bin/activate

- 방금 만든 가상환경을 활성화(실행)하는 명령어로 외워두면 좋습니다!
- 활성화하면 앞으로의 파이썬 작업이 모두 이 가상환경 안에서 이루어집니다. 이 명령어를 하고 나면 프롬프트 앞에 (venv)가 붙은게 보입니다. 그러면 성공입니다.

마. FastAPI 및 Uvicorn 설치

pip install fastapi "uvicorn[standard]"

- 종합적으로, 파이썬에서 FastAPI와 Uvicorn(필요한 추가 기능 포함)을 한 번에 설치하라는 명령
(마치 "스마트폰에 카카오톡과 네이버 앱을 한 번에 설치하기"와 비슷)
- 설치가 끝나면 FastAPI로 웹서비스를 만들고, Uvicorn으로 실행할 수 있습니다.
- pip : 파이썬에서 필요한 프로그램이나 도구(라이브러리)를 인터넷에서 자동으로 내려받아 설치해주는 도구(명령어)
- uvicorn : uvicorn은 FastAPI로 만든 웹서비스를 실제로 실행시켜주는 프로그램(서버)
* [standard]는 uvicorn을 쓸 때 자주 필요한 추가 기능까지 한 번에 설치하겠다는 의미


🚀 4. FastAPI 가상 서버 잘 설치되었는지 테스트 해보기

  • 가. main.py 라는 예제 파일 만들기

nano main.py

- nano : 리눅스/유닉스에서 텍스트 편집하는 에디터 이름으로 파일이 없을 땐 빈 파일을 만들어 주고, 동일한 이름의 파일이 있을 때 그 파일을 열어줍니다.
- main.py : fastapi 서버에 여러 파이썬 파일이 있을 때 프로그램의 시작점으로 가장 많이 사용하는 파일 이름입니다. 관례(약속)처럼 쓰이기 때문에, 다른 사람도 코드를 쉽게 이해할 수 있습니다.

  • 나. main.py 파일에 아래 파일 복붙 -> 저장 -> 닫기

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello World", "status": "FastAPI is running!"}

@app.get("/health")
def health_check():
    return {"status": "healthy"}

- 위 파이썬 복사 후 붙이기 : cmd + v(맥북), control + v(윈도우)
- 🚀 저장 : control + o -> Enter
* 맥북도 cmd가 아닌 control을 누르고 o를 눌러야 하며, 엔터까지 누르면 "Wrote (코드 줄 수) lines"로 저장된 코드의 전체 줄 수가 하단에 확인되며, 이 메시지가 확인되어야 저장이 된 것임

기본 py 파일 이름을 작성하는 파일 이름 기본 Py 파일 이름을 작성하여 기본 Py 파일 이름을 작성하여 기본을 작성하십시오.
'11 줄 x 컷 y 페이스트'라는 단어가있는 검은 색 화면


- 닫기 : control + x
* 맥북도 cmd가 아닌 control을 누르고 x를 눌러야 하며, 파일편집기가 닫히고, 본래 프롬프트 창으로 화면이 전환됨

🌈 기존 코드 삭제 명령어
1) 전체 영역 선택 : shift + control 누른 상태로 화살표로 전 영역 선택
2) 기존 내용 삭제 : control + k (맥북도 cmd가 아닌 control 임에 유의)

  • 다. main.py 코드 실행

uvicorn main:app --reload --host 0.0.0.0 --port 8000

- uvicorn : FastAPI 서버를 실행하는 프로그램(엔진)
- main:app : main.py 파일 안에 있는 app이라는 이름의 FastAPI 앱을 실행하라는 뜻
* 위에 main.py 코드의 두 번째 줄을 보면 app = FastAPI()란 줄이 있다~
- --reload : 코드를 수정하면 서버가 자동으로 다시 시작되게 합니다. (개발·테스트할 때 편리)
- --host 0.0.0.0 : 모든 외부(다른 컴퓨터)에서도 접속할 수 있게 서버를 엽니다.
- --port 8000 : 8000번 포트(주소 끝에 :8000)로 서버를 엽니다.

→ 서버가 실행되면 아래와 비슷한 메시지가 나오며 이것은 서버가 잘 실행되고 있다는 뜻입니다.

Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

🌈 서버 실행 성공 메시지

(venv) root@ubuntu-s-1vcpu-512mb-10gb-sgp1-01:~/fastapi-project# uvicorn main:app --reload --host 0.0.0.0 --port 8000
INFO:     Will watch for changes in these directories: ['/root/fastapi-project']
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [28910] using WatchFiles
INFO:     Started server process [28912]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

  • 라. 실행결과 확인 : 웹브라우저에 서버 주소 확인 후 포트번호 8000번 붙여서 접속해 보기

서버가 내 노트북에서 실행중이라면, http://localhost:8000, http://127.0.0.1:8000와 같은 형태의 접속 주소로 쉽게 접속이 되지만, 우리는 Digital Ocean이라는 외부 서버에 FastAPI 서버를 구축했기 때문에 아래와 같은 형태의 주소를 만들어 브라우저 주소창에 붙여야 합니다.

http://서버의_IP주소:8000

👉 서버의 IP 주소 확인 방법

  • (1) Digital Ocean > Droplet

    링크가 강조된 Google 문서호 페이지의 스크린 샷

(2) Droplet > Droplet Name 클릭

버튼이있는 페이지의 스크린 샷


🌈 서버 접속 성공 화면(브라우저 이용 아래 주소로 각각 접속)

  • (가) 내서버 IP주소:8000
    👉 "message": "Hello World", "status": "FastAPI is running!" 출력

    컴퓨터 화면에 메시지가 표시됩니다

  • (나) 내서버 IP주소:8000/health / main.py 코드에 만들어 놓은 health 엔드포인트 호출 시
    👉 "status": "healthy" 출력

    한국 웹 사이트의 스크린 샷

  • (다) 내서버 IP주소:8000/docs
    👉 /docs 화면은 자동으로 만들어지는 "설명서 겸 체험장"입니다.

    Fastp라는 단어가있는 페이지의 스크린 샷
    • API 목록(주소, 기능)을 한눈에 볼 수 있습니다.

    • 서버가 어떤 기능(주소, 입력값, 결과 등)을 제공하는지 한눈에 보여주는 안내서

🤗 맺음말

  • 일단 저희 스터디원들과 앞으로 서버를 구축하고자 하는 입문자 분들에게 도움이 되면 좋겠습니다.

  • 서버는 이제 개발자의 영역이 아니라 AI를 공부하는 누구나 갖고 있어야 할 "전화번호"와 같은 것이 아닌가 생각됩니다.

  • 서버를 설치하고 운용하여 다양한 경험을 해보시고, 여러분이 하고자 하는 서비스 개발에 좋은 마중물이 되길 바랍니다.

10
4개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요