반응형
FastAPI 프로젝트에 연동한 MySQL의 작동 원리
MySQL을 FastAPI 또는 Python 프로젝트와 연동했다는 것은, 애플리케이션이 MySQL 데이터베이스에 접근하여 데이터를 읽고 쓰는 기능을 사용할 수 있도록 설정했다는 뜻입니다. 이때 내부적으로 어떤 일이 벌어지는지, 그리고 '최고관리자(root)' 계정이 어떤 의미를 가지는지 알아봅니다.
✅ 1. MySQL 최고관리자(root)의 역할
MySQL에서 root는 최고 권한을 가진 사용자입니다. 리눅스에서의 root와 비슷한 개념으로 보면 됩니다.
root 계정의 권한:
- 데이터베이스 생성/삭제
- 사용자 추가/삭제
- 테이블 구조 수정
- 모든 데이터에 접근 가능
- 권한 부여/회수 가능
mysql -u root -p
이 명령어는 root 권한으로 MySQL에 접속하겠다는 의미입니다. 비밀번호는 설치 시 직접 설정하거나 기본 설정값을 따릅니다.
✅ 2. 연동의 메커니즘 (FastAPI 또는 Python 입장에서)
[1] 데이터베이스 URL로 연결
Python에서 MySQL에 접속하려면 접속 정보를 문자열로 전달합니다.
예시:
DATABASE_URL = "mysql+pymysql://root:비밀번호@localhost:3306/fastapiDB"
구조:
mysql+pymysql ← 어떤 드라이버를 쓸 것인가
root ← 사용자 이름
비밀번호 ← 사용자 비밀번호
localhost ← MySQL 서버 위치
3306 ← 기본 포트
fastapiDB ← 연결할 데이터베이스 이름
[2] 드라이버의 역할 (pymysql)
pymysql은 Python에서 MySQL과 대화하는 통역사 역할입니다.
SQLAlchemy와 함께 자주 사용됩니다.
pip install pymysql
[3] 연동 예시 코드 (SQLAlchemy 사용 시)
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
DATABASE_URL = "mysql+pymysql://root:비밀번호@localhost:3306/fastapiDB"
engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(bind=engine)
✅ 3. 연동 후 실제 동작 흐름
- Python 코드에서 create_engine()으로 MySQL과 연결
- SQLAlchemy가 pymysql을 통해 MySQL 서버에 접속 시도
- MySQL에서 해당 사용자 계정의 권한을 검사
- 권한이 있으면 접속 성공
- 이후 session.query(), session.add() 등의 명령으로 데이터 읽고 쓰기
✅ 4. root가 아닌 사용자도 가능한가요?
네, 실제 운영 환경에서는 보안을 위해 root 대신 별도의 사용자 계정을 만들어 사용합니다:
CREATE USER 'fastapiuser'@'localhost' IDENTIFIED BY '패스워드';
GRANT ALL PRIVILEGES ON fastapiDB.* TO 'fastapiuser'@'localhost';
이제 접속 문자열은 이렇게 바뀝니다:
"mysql+pymysql://fastapiuser:패스워드@localhost:3306/fastapiDB"
✅ 요약정리
항목 | 설명 |
root | MySQL 최고관리자 계정 (모든 권한 보유) |
연동 URL | 접속 정보를 담은 문자열 |
pymysql | Python과 MySQL 간 통신 담당 드라이버 |
연동 방식 | SQLAlchemy 등 ORM 라이브러리를 통해 DB 접속 |
운영 권장사항 | root 대신 별도 사용자 생성 권장 |
반응형
'컴퓨터 활용 > 노년에 즐기는 코딩' 카테고리의 다른 글
MySQL 사용자 fastapiuser가 외부 시스템(다른 PC 등)에서도 접속 가능 (4) | 2025.05.11 |
---|---|
SQL 스타일 가이드 (1) | 2025.05.10 |
FastAPI 프로젝트에서 사용한 Git 명령어 정리 (3) | 2025.05.09 |
Django 웹 프레임워크에서 MySQL 데이터베이스로 변경 (5) | 2025.05.04 |
[Django] 장고 프로젝트에서 SECRET_KEY란? (1) | 2025.05.02 |
댓글