[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 + 애플리케이션에서 길이 제한
이게 정답입니다.



