DB

[PostgreSQL] TEXT vs VARCHAR(1000) 무엇을 사용할까? 로그 저장시…..

postgreSQL를 사용중인데, 그럼 컬럼값을 REQUEST_BODY TEXT 해? 아니면, REQUEST_BODY VARCHAR(1000)으로 해? REQUEST_BODY 사이즈를 1000으로 잘라서 저장할껀데….

결론부터 딱 잘라서 말씀드리면 👇

PostgreSQL에서는 TEXT 로 컬럼을 만들고,
애플리케이션에서 1000자로 잘라서 저장하는 게 정답입니다.

VARCHAR(1000) 은 추천하지 않습니다.

이유를 실무 기준으로 정확히 설명드릴게요.


PostgreSQL TEXT vs VARCHAR(1000)

1️⃣ 성능 차이

PostgreSQL에서

TEXT
VARCHAR(1000)

👉 성능, 저장 방식, 인덱스 처리 방식 전부 동일합니다.

PostgreSQL 공식 문서:

TEXT와 VARCHAR는 내부적으로 동일하게 처리된다.

즉, VARCHAR(1000)이 더 빠르거나 안전하지 않습니다.


2️⃣ VARCHAR(1000)의 문제

REQUEST_BODY VARCHAR(1000)

이렇게 하면:

  • 1000자 초과 → DB 에러 발생
  • INSERT 실패 → 트랜잭션 롤백
  • 로그 저장 실패 → 장애 추적 불가

로그 테이블에서 실패하면 안 되는 구조입니다.


3️⃣ TEXT + 애플리케이션에서 자르기 = 실무 정석

REQUEST_BODY TEXT

그리고 Java에서

reqBody = limitBytes(reqBody, 1000);

이렇게 자르기.


🔐 실무 기준 설계

REQUEST_BODY TEXT
RESPONSE_BODY TEXT
MESSAGE TEXT

모두 TEXT 로 합니다.


🎯 왜 TEXT가 정답이냐

이유설명
DB 안전길이 초과 에러 없음
정책 유연나중에 2000, 4000 변경 가능
성능 동일VARCHAR와 차이 없음
장애 방지로그 저장 실패 방지

🚨 VARCHAR(1000)을 쓰는 경우

거의 없습니다.
PostgreSQL에서는 VARCHAR 길이 제한은 검증용 의미만 있습니다.

로그 테이블은 검증 대상이 아닙니다.


✅ 실무 최종 추천

REQUEST_BODY TEXT
RESPONSE_BODY TEXT
MESSAGE TEXT

그리고

private static final int MAX_BODY_LENGTH = 1000;

으로 Java에서 잘라서 저장.


🎯 초보자 요약

선택결과
VARCHAR(1000)장애 위험
TEXT + 자르기실무 정석

🔥 한 줄 요약

PostgreSQL 로그 컬럼은
무조건 TEXT + 애플리케이션에서 길이 제한
이게 정답입니다.

Hi, I’m 관리자