LLM

[3]FAST API

낑낑이 2025. 8. 7. 09:10

Fast API란?

Fast API는 Python 기반 Web Framework종류중 하나로, 기존 Flase가 사용됐던 웹 프레임워크가 속도가 느리고, 비동기가 어렵다는 단점으로 사용되고 있는 Framework에 해당한다

SPA(Single Page Application)

단일 HTML페이지로 이루어진 웹 어플리케이션으로 페이지가 새로 고침 없이 동적으로 업데이트되는 구조로 데이터 중심 어플리케이션에 특화된 기술이다

  • 처음에 한 번 HTML, CSS, JS를 로드한 뒤,
  • 이후에는 페이지 전체를 새로고침하지 않고, 필요한 데이터만 요청해서 화면 일부만 갱신

HTML 파일과 필요한 자바 스크립트 및CSS를 불러오고 이후 사용자 요청에 따라서 서버와 데이터를 주고 받으며 동적으로 업데이트합니다. 그리고 라우터 기능을 이용하여 URL에 따라서 컴포넌트를 렌더링하게 됩니다.(공부좀 더 해봐야될듯)

MPA(Multi Page Application)

여러개의 HTML페이지로 이루어진 웹 어플리케이션이며, 사용자가 이동할때마다, 새로운 HTML을 서버에서 받아오게 된다

 

  • 사용자가 페이지 접속 → 서버에서 HTML 생성 → 전체 페이지 응답
  • 페이지 이동 시 → 브라우저가 새로고침 후 새로운 페이지 요청

즉, MPA는 서버 요청과 부분적 동적 업데이트를 혼합해 사용하는 방식이고, SPA는 처음부터 동적 콘텐츠 업데이트를 클라이언트에서 전적으로 담당하는 방식이라는 점에서 차이가 있습니다. 일반적으로 애플리케이션의 복잡도, 성능 요구사항, SEO 필요성, 개발 리소스 등에 따라 선택합니다

 

 

(demo-app)  pip install fastapi


(demo-app)  pip install "uvicorn[standard]"


(demo-app)  pip install sqlalchemy aiomysql pymysql greenlet

(demo-app) uvicorn api.main:app --host 127.0.0.1 --port 8001 --reload

--host 127.0.0.1 서버를 어디에서 접근 가능하게 할지 지정하는 것📌 127.0.0.1은 내 컴퓨터(로컬) 만 접근 가능
--port 8001 서버가 어떤 포트 번호로 연결 요청을 받을지 지정
      - /Users/dkskr/fast-api/mariadb_tmplt/conf.d:/etc/mysql/conf.d

 

  • 🔧 **설정 파일(conf)**을 마운트
  • MariaDB는 /etc/mysql/conf.d에 있는 .cnf 파일들을 자동으로 불러와 설정함
  • 즉, 로컬에서 설정 파일을 수정하면 컨테이너가 해당 설정을 사용함

 

      - /Users/dkskr/fast-api/mariadb_tmplt/data:/var/lib/mysql

 

  • /var/lib/mysql은 MySQL/MariaDB의 데이터 파일들이 저장되는 내부 경로
  • 여기를 마운트함으로써 DB 데이터를 컨테이너 삭제 후에도 유지 가능

 

      - /Users/dkskr/fast-api/mariadb_tmplt/initdb.d:/docker-entrypoint-initdb.d

 

  • 초기화 SQL 스크립트 자동 실행
  • 이 디렉토리에 .sql, .sh 파일을 넣으면 컨테이너 시작 시 자동 실행됨
  • 예: 초기 테이블 생성, 유저 추가, 데이터 삽입 등

 

      - /Users/dkskr/fast-api/mariadb_tmplt/bak:/home/bak

 

  • 업 또는 임시 파일을 저장하는 용도
  • /home/bak은 MariaDB 내부에서 접근 가능한 경로
  • 이곳에 DB 덤프 파일 등을 저장하면 로컬에서도 접근 가능

구분 / (슬래시) \ (역슬래시)

운영체제 Linux / macOS / Unix Windows
역할 디렉토리 경로 구분자 디렉토리 구분자 (Windows), 또는 이스케이프 문자
예시 /home/user/docs C:\Users\Taehyun\Documents

 

 

 

GRANT ALL PRIVILEGES ON demo.* TO 'manager'@'%' IDENTIFIED BY 'SqlDba-1';

GRANT ALL PRIVILEGES 모든 권한 부여 (SELECT, INSERT, UPDATE, DELETE, CREATE 등 전체 권한)
ON demo.* demo 데이터베이스 내의 모든 테이블(*)에 대해서
TO 'manager'@'%' 'manager'라는 사용자 계정을 생성하고, 어디에서 접속하든(%) 허용
IDENTIFIED BY 'SqlDba-1' 해당 사용자의 비밀번호는 SqlDba-1로 설정

 

manager라는 사용자가 어디서든 접속 가능하고, demo 데이터베이스의 모든 권한을 부여받도록 만들며, 비밀번호는 'SqlDba-1'로 설정합니다.

FLUSH PRIVILEGES;

 

  • MariaDB는 계정과 권한 정보를 캐시에 저장해 놓습니다.
  • 이 명령은:
  • 지금까지의 GRANT, REVOKE, CREATE USER, DROP USER 등의 권한 변경 사항을 즉시 반영하라는 뜻입니다.

 


FAST API 관련 Work Flow 및 프로젝트

 

앞서 말씀 드렸듯이, Fast API를 활용해서 Python 기반 백엔드를 구축하는 것이 목적입니다

하지만 기존에 백엔드를 구축하게 되면 이게 잘 돌아가는건지..,. 오류가 어디서 생기는지 자세히 모르게 되는데

이것을 해결하기 위해, 사용하는것이 Swagger UI에 해당합니다

이렇게 Swagger UI가 존재하는데 Task를 실행하게 되면, 백엔드에서 정해놓은 동작이 잘 되는지 확인하는 것 입니다.

(ex: DB 데이터가 잘 읽혀져 오는지, 내가 적고자 하는 데이터가 DB에 잘 저장되는지)

 

기존에는 백엔드와 프론트엔드 개발자들이 협업을 하여 과정을 진행했지만, 백엔드 관점에서 완벽하게 오류가 없다는 것을 동작을 확인하고, 프론트엔드 개발자와 협업하는것이, 트러블슈팅 관점에서 보다 더 수월하기 때문에 많이 이용하고 있습니다

 

전체적인 모듈 개략도입니다.

Swagger UI에서 신호를 보면 Back-End에서 엔드포인트로 신호를 받고 DB에 정보를 보내거나, 받고서 Response를 Swagger UI로 가시적으로 확인하는 형식에 해당합니다

Swagger UI를 실행시키며 Trouble Shooting이 가능한데, Swagger UI에서 어느 부분에 오류가 생긴것인지 즉각적으로 반응해주기때문이다

 

 


#파이썬 실행

python -m uvicorn api.main:app --host 127.0.0.1 --port 8001 --reload

 

#SQL WORKbench에 생성

 

-- 1) DB 생성
CREATE DATABASE IF NOT EXISTS demo
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_general_ci;

-- 2) 계정/권한 (로컬 전용으로 안전하게)
CREATE USER IF NOT EXISTS 'manager'@'localhost' IDENTIFIED BY 'SqlDba-1';
CREATE USER IF NOT EXISTS 'manager'@'127.0.0.1' IDENTIFIED BY 'SqlDba-1';

GRANT ALL PRIVILEGES ON demo.* TO 'manager'@'localhost';
GRANT ALL PRIVILEGES ON demo.* TO 'manager'@'127.0.0.1';
FLUSH PRIVILEGES;

 

GRANT ALL PRIVILEGES ON demo.* TO 'manager'@'%' IDENTIFIED BY 'SqlDba-1';
>FLUSH PRIVILEGES;

 

#SQL DB 초기화

python -m api.migrate_db_a  

 

'LLM' 카테고리의 다른 글

[5]HTML  (3) 2025.08.08
[4]컴퓨터통신/HTML  (7) 2025.08.07
[2][Docker]Docker Container  (5) 2025.08.04
[1]Prompt Engeenering Code Review 1강  (2) 2025.07.29
[0]Prompt 활용 엔지니어링  (1) 2025.07.29