ํ”„๋กœ์ ํŠธ

์ผ๋ฐ˜

์‚ฌ์šฉ์ž์ •๋ณด

Actions

์ƒˆ๊ธฐ๋Šฅ #48

์ง„ํ–‰์ค‘

์ƒˆ๊ธฐ๋Šฅ #44: ๐Ÿ“˜ Mangement Cloud server FastAPI ํ”„๋กœ์ ํŠธ

๐ŸŸฅ Epic 1 - Task 3 ๐Ÿš€ FastAPI ๊ธฐ๋ณธ ์„œ๋ฒ„ ๊ตฌ์ถ•

minkyu park์ด(๊ฐ€) 20์ผ ์ „์— ์ถ”๊ฐ€ํ•จ.

์ƒํƒœ:
์‹ ๊ทœ
์šฐ์„ ์ˆœ์œ„:
๋ณดํ†ต
๋‹ด๋‹น์ž:
์‹œ์ž‘์ผ:
2026/10/01
์™„๋ฃŒ์ผ:
์ง„์ฒ™๋„:

0%

์ถ”์ •์‹œ๊ฐ„:

์„ค๋ช…

๐ŸŸฅ Epic 1 โ€” Task 3

๐Ÿš€ FastAPI ๊ธฐ๋ณธ ์„œ๋ฒ„ ๊ตฌ์ถ•

๐Ÿ“Œ ์ž‘์—… ๊ฐœ์š”

  • FastAPI ๊ธฐ๋ฐ˜ mgmt ์„œ๋ฒ„์˜ ์ฒซ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค.
  • ํ”„๋กœ์ ํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ•ต์‹ฌ ์—”ํŠธ๋ฆฌํฌ์ธํŠธ(main.py)๋ฅผ ์ž‘์„ฑํ•˜๊ณ ,
  • ๊ธฐ๋ณธ์ ์ธ API ์—”๋“œํฌ์ธํŠธ(/ping)๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์„œ๋ฒ„๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‘๋‹ตํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•œ๋‹ค.

์ด ์ž‘์—…์€ ์ดํ›„ ๋ชจ๋“  ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ์ตœ์ดˆ ์‹คํ–‰ ํ™˜๊ฒฝ ๊ตฌ์„ฑ ๋‹จ๊ณ„์ด๋‹ค.

๐ŸŽฏ ์ž‘์—… ๋ชฉ์ 

  • FastAPI ์„œ๋ฒ„๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

  • uvicorn์„ ํ†ตํ•ด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

  • /ping API๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ๊ธฐ๋ณธ์ ์ธ ์š”์ฒญ/์‘๋‹ต ํ๋ฆ„์„ ๊ฒ€์ฆํ•œ๋‹ค.

  • PyCharm ๋””๋ฒ„๊ทธ ํ™˜๊ฒฝ๊ณผ test_main.http ํŒŒ์ผ์„ ํ™œ์šฉํ•ด API ํ…Œ์ŠคํŠธ ๊ธฐ๋ฐ˜์„ ๋งˆ๋ จํ•œ๋‹ค.

๐Ÿ› ๏ธ ์ง„ํ–‰ ๋‚ด์šฉ

๐Ÿ—‚๏ธ 1. FastAPI ์—”ํŠธ๋ฆฌํฌ์ธํŠธ(main.py) ์ž‘์„ฑ

FastAPI ์„œ๋ฒ„์˜ ์‹œ์ž‘์ ์ด ๋˜๋Š” main.py ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ ,
FastAPI ์ธ์Šคํ„ด์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

from fastapi import FastAPI

app = FastAPI()

@app.get("/ping")
def ping():
    return {"msg": "pong"}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run("app.main:app", host="127.0.0.1", port=8000, reload=True)
  • reload=True๋Š” ๊ฐœ๋ฐœ ํŽธ์˜์„ฑ ํ–ฅ์ƒ

  • ๋””๋ฒ„๊น… ์‹œ์—๋Š” reload=False๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

๐Ÿ—‚๏ธ 2. uvicorn ์‹คํ–‰ ํ…Œ์ŠคํŠธ

  • PyCharm์—์„œ Run/Debug Configuration์„ ์ƒ์„ฑํ•˜์—ฌ FastAPI ์„œ๋ฒ„๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

  • ์‹คํ–‰ ํ›„ ๋ธŒ๋ผ์šฐ์ €์—์„œ

๐Ÿ‘‰ http://127.0.0.1:8000/ping

์‘๋‹ต์ด { "msg": "pong" } ์ด๋ฉด ์ •์ƒ

๐Ÿ—‚๏ธ 3. test_main.http ํŒŒ์ผ์„ ํ™œ์šฉํ•œ API ํ…Œ์ŠคํŠธ

  • PyCharm์ด ์ž๋™ ์ƒ์„ฑํ•œ .http ํŒŒ์ผ์„ ํ™œ์šฉํ•˜์—ฌ FastAPI ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•ด๋ณธ๋‹ค.

์˜ˆ์‹œ:

### Ping Test
GET http://127.0.0.1:8000/ping
Accept: application/json
  • Send Request ๋ฒ„ํŠผ ํด๋ฆญ

  • ์‘๋‹ต์ด ์ •์ƒ์ ์œผ๋กœ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธ

๐Ÿ—‚๏ธ 4. ๋ผ์šฐํ„ฐ ๊ตฌ์กฐ ๋ถ„๋ฆฌ ์ค€๋น„

ํ–ฅํ›„ /server, /control, /ssh ๋“ฑ ๊ธฐ๋Šฅ๋ณ„ ๋ผ์šฐํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด
app/routers/health.py ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  /ping API๋ฅผ ์ด๋™ํ•  ์ค€๋น„๋ฅผ ํ•œ๋‹ค.

์˜ˆ์‹œ:

from fastapi import APIRouter

router = APIRouter()

@router.get("/ping")
def ping():
    return {"msg": "pong"}

๊ทธ๋ฆฌ๊ณ  main.py์—์„œ ๋ผ์šฐํ„ฐ๋ฅผ ๋“ฑ๋กํ•œ๋‹ค:

from fastapi import FastAPI
from app.routers import health

app = FastAPI()
app.include_router(health.router)

๐Ÿ—‚๏ธ 5. FastAPI ์ž๋™ ๋ฌธ์„œ ํ™•์ธ

  • FastAPI๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž๋™ ๋ฌธ์„œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  • Swagger UI

    ๐Ÿ‘‰ http://127.0.0.1:8000/docs

  • ReDoc

    ๐Ÿ‘‰ http://127.0.0.1:8000/redoc

์—ฌ๊ธฐ์„œ /ping API๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

๐Ÿ“Œ ์‚ฐ์ถœ๋ฌผ

  • FastAPI ์—”ํŠธ๋ฆฌํฌ์ธํŠธ(main.py)

  • /ping API ๊ตฌํ˜„

  • uvicorn ์‹คํ–‰ ๋ฐ ๋””๋ฒ„๊ทธ ํ™˜๊ฒฝ ๊ตฌ์„ฑ

  • test_main.http ํ…Œ์ŠคํŠธ ์™„๋ฃŒ

  • ๋ผ์šฐํ„ฐ ๊ตฌ์กฐ ๋ถ„๋ฆฌ ์ค€๋น„ ์™„๋ฃŒ

  • Swagger/ReDoc ์ž๋™ ๋ฌธ์„œ ์ •์ƒ ํ‘œ์‹œ

ํ‘œ์‹œํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

Actions

๋‚ด๋ณด๋‚ด๊ธฐ Atom PDF