PostgreSQL 기본 연결 옵션
TMTPostgreSQL 기본 연결 옵션 (defaultProperties
)
연결 관련
-
socketTimeout
- 기본값:
0
- 설명: 데이터베이스 작업 실행 중 서버로부터의 응답을 기다리는 시간. 0은 무제한 대기. 긴 쿼리 실행 시 네트워크 문제로 인한 무한 대기를 방지하기 위해 설정 권장
- 기본값:
-
connectTimeout
- 기본값:
10
- 설명: 초기 데이터베이스 연결 수립 시 대기 시간. 서버가 응답하지 않을 때 빠른 실패를 위해 사용
- 기본값:
-
loginTimeout
- 기본값:
0
- 설명: 로그인 프로세스 완료까지의 대기 시간. 인증 과정에서의 타임아웃
- 기본값:
-
tcpKeepAlive
- 기본값:
false
- 설명: TCP keepalive 패킷 전송 여부. true로 설정 시 네트워크 장애를 빠르게 감지 가능
- 기본값:
-
ssl
- 기본값:
false
- 설명: SSL/TLS 암호화 연결 사용 여부. 프로덕션 환경에서는 보안을 위해 true 권장
- 기본값:
-
sslmode
- 기본값:
prefer
- 설명: SSL 연결 동작 방식 (disable/allow/prefer/require/verify-ca/verify-full)
- 기본값:
성능 관련
-
reWriteBatchedInserts
- 기본값:
false
- 설명: 다중 INSERT 문을 단일 요청으로 재작성하여 배치 성능 최적화. true 설정 시 대량 삽입 작업 성능 크게 향상
- 기본값:
-
preparedStatementCacheQueries
- 기본값:
256
- 설명: 캐시할 PreparedStatement 최대 개수. 자주 사용되는 쿼리의 재사용성 향상
- 기본값:
-
preparedStatementCacheSizeMiB
- 기본값:
5
- 설명: PreparedStatement 캐시의 최대 메모리 사용량(MiB). 메모리 사용량을 제어하기 위함
- 기본값:
-
defaultRowFetchSize
- 기본값:
0
- 설명: ResultSet에서 한 번에 가져올 행 수. 0이면 모든 결과를 한 번에 가져옴. 대용량 결과 처리 시 메모리 사용량 조절에 중요
- 기본값:
-
binaryTransfer
- 기본값:
true
- 설명: 데이터 전송 시 바이너리 형식을 사용할지 여부. 텍스트 대비 효율적인 데이터 전송 가능
- 기본값:
-
prepareThreshold
- 기본값:
5
- 설명: PreparedStatement를 서버 측에서 캐시하기 전, 최소 몇 번의 쿼리 실행이 필요한지 설정. 동일 쿼리가 이 횟수 이상 실행되면 prepared statement로 전환
- 기본값:
동작 관련
-
preferQueryMode
- 기본값:
extended
- 설명: 쿼리 실행 프로토콜 선택 (simple/extended/extendedForPrepared). extended는 PreparedStatement 최적화 제공
- 기본값:
-
autoSave
- 기본값:
never
- 설명: 트랜잭션 자동 저장 모드 (always/never/conservative). 예기치 않은 오류 발생 시 처리 방식을 결정
- 기본값:
-
binaryTransferEnable
- 기본값:
""
(빈 문자열) - 설명: 바이너리 전송을 사용할 특정 데이터 타입 지정. 빈 문자열이면 기본값 사용
- 기본값:
-
binaryTransferDisable
- 기본값:
""
(빈 문자열) - 설명: 바이너리 전송을 사용하지 않을 특정 데이터 타입 지정
- 기본값:
-
unknownLength
- 기본값:
Integer.MAX_VALUE
- 설명: LOB 등 길이를 알 수 없는 데이터 처리 시 사용할 최대 길이
- 기본값:
문자셋/인코딩
-
allowEncodingChanges
- 기본값:
false
- 설명: 서버의
client_encoding
파라미터 변경 허용 여부
- 기본값:
-
stringtype
- 기본값:
unspecified
- 설명: PostgreSQL 문자열 타입(TEXT, VARCHAR) 처리 방식을 결정
- 기본값:
-
charset
- 기본값:
UTF8
- 설명: 클라이언트-서버 간 통신에 사용할 문자 인코딩
- 기본값:
기타
-
assumeMinServerVersion
- 기본값:
""
(빈 문자열) - 설명: 최소 서버 버전을 가정. 특정 기능 사용 시 버전 체크 생략 가능
- 기본값:
-
applicationName
- 기본값:
PostgreSQL JDBC Driver
- 설명: 데이터베이스 모니터링 도구에서 표시될 애플리케이션 식별자
- 기본값:
-
gssEncMode
- 기본값:
allow
- 설명: GSS(Kerberos) 암호화 모드 (disable/allow/prefer/require)
- 기본값:
// org/postgresql/core/QueryExecutorBase.java
protected QueryExecutorBase(PGStream pgStream, int cancelSignalTimeout, Properties info) throws SQLException {
this.pgStream = pgStream;
this.user = PGProperty.USER.getOrDefault(info);
this.database = PGProperty.PG_DBNAME.getOrDefault(info);
this.cancelSignalTimeout = cancelSignalTimeout;
this.reWriteBatchedInserts = PGProperty.REWRITE_BATCHED_INSERTS.getBoolean(info);
this.columnSanitiserDisabled = PGProperty.DISABLE_COLUMN_SANITISER.getBoolean(info);
String callMode = PGProperty.ESCAPE_SYNTAX_CALL_MODE.getOrDefault(info);
this.escapeSyntaxCallMode = EscapeSyntaxCallMode.of(callMode);
this.quoteReturningIdentifiers = PGProperty.QUOTE_RETURNING_IDENTIFIERS.getBoolean(info);
String preferMode = PGProperty.PREFER_QUERY_MODE.getOrDefault(info);
this.preferQueryMode = PreferQueryMode.of(preferMode);
this.autoSave = AutoSave.of(PGProperty.AUTOSAVE.getOrDefault(info));
this.logServerErrorDetail = PGProperty.LOG_SERVER_ERROR_DETAIL.getBoolean(info);
// assignment, argument
this.cachedQueryCreateAction = new CachedQueryCreateAction(this);
statementCache = new LruCache<>(
Math.max(0, PGProperty.PREPARED_STATEMENT_CACHE_QUERIES.getInt(info)),
Math.max(0, PGProperty.PREPARED_STATEMENT_CACHE_SIZE_MIB.getInt(info) * 1024L * 1024L),
false,
cachedQueryCreateAction,
new LruCache.EvictAction<CachedQuery>() {
@Override
public void evict(CachedQuery cachedQuery) throws SQLException {
cachedQuery.query.close();
}
});
// method.invocation
this.closeAction = createCloseAction();
}