본문 바로가기
C.W.K.
Stream
Lesson 03 of 10 · published

운영 코드에서 SELECT *를 피하는 이유

~10 min · operations, queries

Level 0스키마 새싹
0 XP0/86 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

필요한 열을 계약으로 적어

SELECT *는 psql 탐색, 마이그레이션, 일회성 스크립트에서는 괜찮지만 운영 앱 코드에서는 대역폭·색인 전용 스캔·스키마 변경·의도 표현에 비용을 만들어. 대역폭을 낭비하고, 색인 전용 스캔을 막고, 스키마 변경에 결과 모양을 흔들며, 읽는 사람이 필요한 값을 알 수 없게 해. 운영 코드의 SELECT *는 열 목록으로 바꿔.

큰 열은 특히 분리해

ORM이 모든 열을 가져오게 둬도 때로는 괜찮지만, 한 달에 한 번만 읽는 4MB JSONB 열까지 매번 가져온다면 필요한 열만 명시해야 해. 명시적인 열 목록은 성능 기법이면서 의도 문서야.

Code

나쁜 예와 좋은 예·sql
-- 나쁨
SELECT * FROM users WHERE id = ?;

-- 좋음
SELECT id, name, email, role FROM users WHERE id = ?;
ORM에서 SELECT *를 부르는 함정·python
# SQLAlchemy: default 로 모든 컬럼 fetch
users = session.query(User).all()

# 거대한 JSONB 또는 BYTEA 컬럼 있으면 defer
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(Text)
    profile_json = Column(JSONB, deferred=True)  # 접근 시만 로드

Exercise

코드베이스의 운영 경로에서 SELECT *를 찾아. 각각 모든 열이 필요한지 판단하고 아니라면 명시한 열로 바꿔. 반환 열이 줄면서 새로 포함 색인을 쓸 수 있게 된 곳도 기록해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.