본문 바로가기

첫 서버 띄우기

1. 서버가 무엇인가

서버는 "주소를 달라고 하면 그 주소에 맞는 것을 돌려주는 프로그램"입니다.

브라우저 주소창에 naver.com을 치면 화면이 나옵니다. 그 사이에 벌어지는 일은 단순합니다. 브라우저가 "naver.com 주세요"라고 어딘가에 부탁하고, 그 어딘가가 화면을 만들어 돌려줍니다. 부탁을 받아서 돌려주는 쪽이 서버이고, 서버 위에서 돌아가는 프로그램을 백엔드라고 부릅니다.

이번 절에서는 이 서버를 내 컴퓨터 안에 하나 켭니다. 인터넷에 올리는 것이 아니라 내 컴퓨터 안에서만 도는 서버입니다. 그래서 주소도 127.0.0.1이라는 특별한 숫자를 씁니다. "내 컴퓨터 자신"이라는 뜻입니다.

이 책에서 만드는 서버는 한 가지 모양입니다. 브라우저가 주소를 달라고 하면, 서버 하나가 데이터를 꺼내고 화면(HTML)까지 만들어서 통째로 돌려줍니다. 화면을 만드는 곳과 데이터를 다루는 곳이 한 프로그램 안에 있습니다.

서버가 화면을 안 만들고 데이터만 주는 모양도 있습니다. 그 차이는 5장 끝에서 그림으로 비교합니다. 지금은 "이 책의 서버는 화면까지 만들어 준다"만 기억하면 됩니다.

2. 파이썬 확인

터미널에 아래를 칩니다.

python --version

Python 3.12.4처럼 버전이 나오면 됩니다. macOS에서 안 나오면 python3 --version으로 다시 칩니다. macOS는 이 책의 python을 모두 python3로 읽으면 됩니다.

버전이 안 나오고 빨간 글씨가 나오면 파이썬이 설치되지 않은 것입니다. python.org에서 설치합니다. Windows는 설치 첫 화면에서 Add python.exe to PATH에 꼭 체크하세요. 이걸 빼먹으면 터미널이 파이썬을 못 찾습니다.

3. FastAPI 설치

FastAPI는 파이썬으로 서버를 만들 때 쓰는 도구입니다. 파이썬에 기본으로 들어 있지 않아서 설치가 필요합니다.

pip install "fastapi[standard]"

글자가 한참 올라가다가 멈추면 끝입니다. 따옴표까지 그대로 치세요.

가상환경은 이 책에서 쓰지 않습니다

실무에서는 프로젝트마다 "가상환경"이라는 칸막이를 만들어 그 안에 도구를 설치합니다. 여러 프로젝트가 서로 다른 버전을 쓸 때 충돌을 막기 위해서입니다. 이 책은 프로젝트가 하나뿐이라 칸막이 없이 그냥 설치합니다. 가상환경은 FastAPI 베이스캠프 2장에서 다룹니다.

pip를 찾을 수 없다고 나오면 아래처럼 칩니다.

python -m pip install "fastapi[standard]"

4. 첫 코드

VS Code 왼쪽 탐색기에서 backend 폴더 위에 마우스를 올리면 새 파일 아이콘이 나옵니다. 눌러서 main.py라는 이름으로 파일을 만듭니다. 그 안에 아래 코드를 그대로 칩니다.

from fastapi import FastAPI
from fastapi.responses import HTMLResponse

app = FastAPI()


@app.get("/", response_class=HTMLResponse)
def index():
    return "<h1>hello world</h1>"

여덟 줄입니다. 한 줄씩 무엇인지는 다음 장에서 봅니다. 지금은 일단 켭니다.

5. 서버 켜기

터미널에 아래를 칩니다.

fastapi dev main.py

글자가 여러 줄 나오고, 그 안에 아래와 비슷한 줄이 보이면 성공입니다.

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

이제 브라우저를 열고 주소창에 아래를 칩니다.

http://127.0.0.1:8000

큰 글씨로 hello world가 나옵니다. 방금 여러분이 만든 서버가 브라우저의 부탁을 받고 돌려준 화면입니다.

6. 지금 무슨 일이 일어났나

  1. fastapi dev main.py는 "main.py에 적힌 대로 서버를 켜라"는 명령입니다.
  2. 서버는 켜진 채로 기다립니다. 터미널이 멈춘 것처럼 보이는 게 정상입니다.
  3. 브라우저가 127.0.0.1:8000에 /를 달라고 합니다.
  4. 서버는 /에 붙어 있는 함수 index를 실행하고, 그 함수가 돌려준 <h1>hello world</h1>를 브라우저에 보냅니다.
  5. 브라우저는 받은 글자를 화면으로 그립니다.

8000은 포트 번호입니다. 한 컴퓨터 안에 서버가 여러 개 있을 수 있어서, 몇 번 문으로 들어올지 번호를 붙입니다. FastAPI는 기본으로 8000번 문을 씁니다.

터미널, 서버, 브라우저 셋이 시간 순서로 무엇을 하는지 그리면 아래와 같습니다.

7. 바꿔 보기

서버를 켠 채로 main.py의 hello world를 자기 이름으로 바꾸고 저장합니다. 브라우저에서 새로 고침을 누르면 바뀐 이름이 나옵니다. fastapi dev는 파일이 바뀌면 서버를 알아서 다시 켜 줍니다. 터미널을 보면 다시 켜지는 글자가 올라갑니다.

8. 서버 끄기

터미널을 클릭하고 Ctrl + C를 누릅니다. 서버가 멈추고 다시 명령어를 칠 수 있는 상태가 됩니다. 브라우저에서 새로 고침을 누르면 이제 연결할 수 없다고 나옵니다. 서버가 없으면 주소도 없습니다.

다시 켜려면 위쪽 화살표를 눌러 fastapi dev main.py를 불러오고 Enter를 누릅니다.

AI에게 물어보기

FastAPI로 첫 서버를 켰어. 아래 코드 여덟 줄이 각각 무슨 일을 하는지 한 줄씩 설명해줘. 아직 데코레이터가 뭔지 몰라.
(main.py 붙여넣기)
"fastapi dev main.py"를 쳤더니 아래 에러가 나. 원인과 해결 방법을 알려줘.
(터미널 붙여넣기)

여기까지가 1교시입니다. 터미널을 열었고, 서버를 켰고, 껐습니다. 다음 장부터 주소를 하나씩 늘려 갑니다.