서로 다른 일을 잘하는 두 도구
Django ORM, ActiveRecord, Hibernate 같은 ORM은 행과 객체를 연결하고 반복적인 CRUD와 마이그레이션을 편하게 하며, 정적 타입 언어에서는 형 안전성도 보태. 데이터베이스 차이도 일부 감춰 주지만 그 추상화만 믿고 엔진을 쉽게 바꿀 일은 드물어. Raw SQL은 JOIN, 윈도 함수, CTE, JSONB, 전문 검색, pgvector처럼 데이터베이스의 표현력을 그대로 쓸 수 있어.
질의마다 알맞은 수준을 골라
단순 저장과 조회에는 ORM을 쓰고, 복잡하거나 성능이 중요한 길에서는 같은 연결과 트랜잭션 안에서 SQL로 내려오면 돼. 둘을 섞는 건 실패가 아니라 건강한 경계야.
생성되는 SQL을 읽을 수 있어야 해
N+1, 불필요한 열, 숨은 왕복을 확인하고, 대량 적재에서는 ORM이 숨긴 COPY를 직접 쓸 수 있는지도 봐. 로그와 EXPLAIN으로 실제 SQL을 확인해.