ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQLAlchemy
    Python 2026. 1. 23. 10:01

    SQLAlchemy는 python 계열의 ORM 라이브러리 중 하나이다.
    Java에서는 JPA가 가장 많이 사용되는 것처럼
    Python 생태계에서는 SQLAlchemy가 가장 많이 사용되고 있다.

    SQLAlchemy는 JPA의 “영속성 컨텍스트” 와 비슷한 개념을 제공한다.

     


    [Session]

    JPA의 EntityManager와 동일한 역할이다.

    1차 캐시 조회, 변경 감지, 객체 추적, 쓰기 지연 등 매핑된 객체의 상태를 관리해준다.
    JPA의 영속성 컨텍스트가 지원하는 기능들을 모두 다 똑같이 지원한다!

     

    1. 1차 캐시 (Identity Map)
      1. Session 내부에 객체의 ID값을를 key로 갖는 Map을 가지고 있다.
      2. 따라서 동일한 ID를 가진 객체를 조회하면 DB까지 안가고 메모리에서 바로 꺼내준다.
    2. 변경 감지 (Dirty Checking)
      1. 객체의 필드값이 코드적으로 변경되었을때, 커밋 시점에 SQLAlchemy Core 엔진을 이용하여 변경사항에 맞는 SQL문을 자동으로 생성하여 쿼리가 나가도록 해준다.
    3. 쓰기 지연 (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