-
SQLAlchemyPython 2026. 1. 23. 10:01

SQLAlchemy는 python 계열의 ORM 라이브러리 중 하나이다.
Java에서는 JPA가 가장 많이 사용되는 것처럼
Python 생태계에서는 SQLAlchemy가 가장 많이 사용되고 있다.
SQLAlchemy는 JPA의 “영속성 컨텍스트” 와 비슷한 개념을 제공한다.
[Session]
JPA의 EntityManager와 동일한 역할이다.
1차 캐시 조회, 변경 감지, 객체 추적, 쓰기 지연 등 매핑된 객체의 상태를 관리해준다.
JPA의 영속성 컨텍스트가 지원하는 기능들을 모두 다 똑같이 지원한다!- 1차 캐시 (Identity Map)
- Session 내부에 객체의 ID값을를 key로 갖는 Map을 가지고 있다.
- 따라서 동일한 ID를 가진 객체를 조회하면 DB까지 안가고 메모리에서 바로 꺼내준다.
- 변경 감지 (Dirty Checking)
- 객체의 필드값이 코드적으로 변경되었을때, 커밋 시점에 SQLAlchemy Core 엔진을 이용하여 변경사항에 맞는 SQL문을 자동으로 생성하여 쿼리가 나가도록 해준다.
- 쓰기 지연 (Flush)
[SQLAlchemy ORM]
형님이 말씀하신 JPA의 핵심 기능들은 SQLAlchemy ORM의 Session 객체가 전부 다 가지고 있습니다.
- 1차 캐시 (First-level Cache): 동일한 트랜잭션 내에서 같은 ID로 조회하면 DB에 다시 가지 않고 메모리에서 꺼내옵니다.
- 지연 로딩 (Lazy Loading): 연관된 객체를 실제로 사용할 때 쿼리를 날립니다. (lazy="select" 옵션 등)
- 쓰기 지연 (Transactional Write-Behind): session.add()를 해도 바로 쿼리가 안 나갑니다. session.flush()나 commit()이 호출될 때까지 쿼리를 모았다가 한 방에 쏩니다.
- 변경 감지 (Dirty Checking): 객체의 값만 바꿔놓고 commit하면, 알아서 UPDATE 쿼리를 생성해서 날립니다.
[SQLAlchemy Core]
실질적인 엔진 부분이다.
SQLAlchemy ORM으로 정의된 인터페이스를 보고 그에 알맞는 쿼리를 생성해준다.
'Python' 카테고리의 다른 글
안전하게 환경변수 로딩하기 (0) 2026.07.10 TypedDict vs Pydantic BaseModel (0) 2026.01.29 Sentry Logging (0) 2026.01.03 ContextVar (0) 2026.01.03 async with / async for (0) 2025.12.13 - 1차 캐시 (Identity Map)