티스토리 뷰

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()호출 → 연결 반환

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함