티스토리 뷰
1. HTTP 세션
- 웹에서 사용자의 로그인 상태나 정보를 잠시 기억하는 것
- 예시 : 웹사이트 로그인 상태 유지
- 저장 위치: 서버 메모리, 데이터베이스 또는 클라이언트 쿠키
2. SQLAlchemy 세션
- 데이터베이스와 연결된 작업 공간
- 예시 : 데이터베이스에 학생 정보를 추가할 때, 세션을 열어 데이터를 작성한 뒤 저장(커밋), 작업 도중 문제가생기면 세션을 닫고 저장된 데이터는 취소(롤백)됨
3. 상태 관리 세션
- 클라이언트- 서버 간 연결 유지 및 상태 관리
- 예시 : requests 라이브러리에서 HTTP 세션을 사용해 여러 요청에서 동일한 인증 정보를 공유
- 저장 위치: 주로 클라이언트 메모리에서 작동
4. 각 요청마다 독립적인 session객체를 생성하고, 요청이 끝나면 세션을 닫는 이유
- 데이터베이스 연결의 안정성과 요청 처리의 독립성을 보장하기 위해
1) 요청 간 데이터 충돌 방지
- 하나의 session 객체를 여러 요청에서 공유하면, 한 요청에서 변경된 데이터가 다른 요청에 영향을 미칠 수 있다.
2) 데이터 무결성 보장
- 세션이 공유되면 트랜잭션 관리가 어렵다. 예를 들어, 하나의 요청에서 rollback()이 호출되면, 다른 요청의 데이터 작업도 취소될 수 있다.
3) 자원 관리 및 연결 누수 방지
- 세션을 닫지 않으면 데이터베이스 연결이 유지되며, 자원을 낭비하거나 연결 누수가 발생할 수 있다.
5. 연결 풀 (Connection Pool) => SQLAlchemy에서 create_engine
- 데이터베이스와의 연결(네트워크 연결 설정 > 인증 > 초기화 작업 수행)을 재사용하기위한 매커니즘
- 미리 만들어진 데이터베이스 연결을 풀(Pool)로 관리하고, 요청이 들어올 때 기존 연결을 재사용하거나 새로운 연결을 제공하는 방식
- 왜 필요할까? 데이터베이스와 새로 연결을 생성하는 데는 시간이 걸리고, 많은 요청이 동시에 들어오면 각각의 요청마다 연결을 새로 열면 서버의 리소스가 빠르게 소진되는 문제를 방지하기 위함
6. SQLAlchemy 엔진 (create_engine)
- 애플리케이션 시작 시, create_engine이 연결 풀을 생성
- 각 세션은 연결 풀에서 하나의 연결을 가져와 작업을 처리
- 작업이 끝난 후 세션이 닫히면(session.close()) 연결은 종료되지 않고 연결 풀로 반환된다.
- 다음 요청에서 새로운 세션이 생성되면, 연결 풀에서 기존 연결을 재사용
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
# 데이터베이스 엔진 생성 (연결 풀 기본값: 5개)
engine = create_engine("sqlite:///example.db", pool_size=5, max_overflow=10)
# 세션 팩토리 생성
SessionLocal = sessionmaker(bind=engine)
# 세션 생성 및 작업
session = SessionLocal()
# 데이터베이스 작업 수행...
session.close() # 세션이 닫히면 연결은 풀로 반환
- create_engine의 연결 풀 관련 주요 매개변수
매개변수 | 설명 | 기본값 |
pool_size | 기본 연결 풀에서 유지할 수 있는 최대 연결 수 | 5 |
max_overflow | pool_size를 초과해 생성할 수 있는 추가 연결 수 | 10 |
pool_recycle | 연결이 재활용되기 전까지 유지되는 시간(초) | -1 |
pool_timeout | 연결 풀에 연결이 없을 때 연결을 기다리는 최대 시간(초) | 30 |
pool_pre_ping | 연결이 유효한지 확인하기 위해 미리 "PING" 쿼리를 실행 | False |
echo | SQLAlchemy가 실행하는 SQL쿼리를 콘솔에 출력 | False |
- sessionLocal() 호출 → 연결 풀에서 연결 가져오기 → 데이터 작업 수행 → session.close()호출 → 연결 반환
'AI > AI 서비스 개발' 카테고리의 다른 글
[AI 서비스 개발] dict와 json (1) | 2025.01.29 |
---|---|
[AI 서비스 개발] 웹검색 api 비교 (1) | 2025.01.28 |
[AI 서비스 개발] CrewAI Tools (1) | 2025.01.23 |
[AI 서비스 개발] Pydantic과 SQLAlchemy (0) | 2025.01.22 |
[AI 서비스 개발] CrewAI (0) | 2025.01.19 |
- Total
- Today
- Yesterday
- 스크랩
- 실기
- 30분
- 오픽
- 아침
- 티스토리챌린지
- 고득점 Kit
- llm
- 갓생
- 줄넘기
- C언어
- 기초
- 운동
- ChatGPT
- 오블완
- 루틴
- Ai
- 빅데이터 분석기사
- 다이어트
- 영어회화
- 프로그래머스
- 경제
- 습관
- Python
- opic
- 아침운동
- 미라클모닝
- SQL
- IH
- 뉴스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |