핵심 변화

한 행에 모든 컬럼을 넣어 두지 않고, 자주 읽는 핵심 컬럼은 users에 남기고 큰 컬럼은 별도 테이블로 분리합니다. 그래서 목록 조회는 더 가벼워지고, 큰 데이터는 필요할 때만 읽게 됩니다.

분리 전

목록 조회도 큰 row 전체를 건드립니다

users ( id, name, email, password_hash, bio, avatar_url, settings_json, login_history )
문제
bio, avatar_url, settings_json 같은 큰 컬럼이 한 row에 함께 있어 row 크기가 커지고, 단순 목록 조회에서도 불필요한 데이터를 같이 읽게 됩니다.
분리 후

핵심 row는 가볍게, 큰 컬럼은 필요 시 조인

핵심 테이블

users ( id, name, email, password_hash )

로그인, 목록, 기본 식별에 자주 쓰는 컬럼만 유지

프로필 분리

user_profiles ( user_id, bio, avatar_url )

설정 분리

user_settings ( user_id, settings_json )
조회 상황
읽는 경로
운영상 효과
목록 / 로그인
app -> users
자주 조회되는 컬럼만 캐시에 남기기 쉬워지고 I/O가 줄어듭니다.
프로필 / 설정 상세
app -> users + user_profiles / user_settings
큰 컬럼과 LOB 성격 데이터는 필요할 때만 읽어 성능 저하를 국소화합니다.