PostgreSQL 기본 연결 옵션

TMT

PostgreSQL 기본 연결 옵션 (defaultProperties)

연결 관련

  1. socketTimeout

    • 기본값: 0
    • 설명: 데이터베이스 작업 실행 중 서버로부터의 응답을 기다리는 시간. 0은 무제한 대기. 긴 쿼리 실행 시 네트워크 문제로 인한 무한 대기를 방지하기 위해 설정 권장
  2. connectTimeout

    • 기본값: 10
    • 설명: 초기 데이터베이스 연결 수립 시 대기 시간. 서버가 응답하지 않을 때 빠른 실패를 위해 사용
  3. loginTimeout

    • 기본값: 0
    • 설명: 로그인 프로세스 완료까지의 대기 시간. 인증 과정에서의 타임아웃
  4. tcpKeepAlive

    • 기본값: false
    • 설명: TCP keepalive 패킷 전송 여부. true로 설정 시 네트워크 장애를 빠르게 감지 가능
  5. ssl

    • 기본값: false
    • 설명: SSL/TLS 암호화 연결 사용 여부. 프로덕션 환경에서는 보안을 위해 true 권장
  6. sslmode

    • 기본값: prefer
    • 설명: SSL 연결 동작 방식 (disable/allow/prefer/require/verify-ca/verify-full)

성능 관련

  1. reWriteBatchedInserts

    • 기본값: false
    • 설명: 다중 INSERT 문을 단일 요청으로 재작성하여 배치 성능 최적화. true 설정 시 대량 삽입 작업 성능 크게 향상
  2. preparedStatementCacheQueries

    • 기본값: 256
    • 설명: 캐시할 PreparedStatement 최대 개수. 자주 사용되는 쿼리의 재사용성 향상
  3. preparedStatementCacheSizeMiB

    • 기본값: 5
    • 설명: PreparedStatement 캐시의 최대 메모리 사용량(MiB). 메모리 사용량을 제어하기 위함
  4. defaultRowFetchSize

    • 기본값: 0
    • 설명: ResultSet에서 한 번에 가져올 행 수. 0이면 모든 결과를 한 번에 가져옴. 대용량 결과 처리 시 메모리 사용량 조절에 중요
  5. binaryTransfer

    • 기본값: true
    • 설명: 데이터 전송 시 바이너리 형식을 사용할지 여부. 텍스트 대비 효율적인 데이터 전송 가능
  6. prepareThreshold

    • 기본값: 5
    • 설명: PreparedStatement를 서버 측에서 캐시하기 전, 최소 몇 번의 쿼리 실행이 필요한지 설정. 동일 쿼리가 이 횟수 이상 실행되면 prepared statement로 전환

동작 관련

  1. preferQueryMode

    • 기본값: extended
    • 설명: 쿼리 실행 프로토콜 선택 (simple/extended/extendedForPrepared). extended는 PreparedStatement 최적화 제공
  2. autoSave

    • 기본값: never
    • 설명: 트랜잭션 자동 저장 모드 (always/never/conservative). 예기치 않은 오류 발생 시 처리 방식을 결정
  3. binaryTransferEnable

    • 기본값: "" (빈 문자열)
    • 설명: 바이너리 전송을 사용할 특정 데이터 타입 지정. 빈 문자열이면 기본값 사용
  4. binaryTransferDisable

    • 기본값: "" (빈 문자열)
    • 설명: 바이너리 전송을 사용하지 않을 특정 데이터 타입 지정
  5. unknownLength

    • 기본값: Integer.MAX_VALUE
    • 설명: LOB 등 길이를 알 수 없는 데이터 처리 시 사용할 최대 길이

문자셋/인코딩

  1. allowEncodingChanges

    • 기본값: false
    • 설명: 서버의 client_encoding 파라미터 변경 허용 여부
  2. stringtype

    • 기본값: unspecified
    • 설명: PostgreSQL 문자열 타입(TEXT, VARCHAR) 처리 방식을 결정
  3. charset

    • 기본값: UTF8
    • 설명: 클라이언트-서버 간 통신에 사용할 문자 인코딩

기타

  1. assumeMinServerVersion

    • 기본값: "" (빈 문자열)
    • 설명: 최소 서버 버전을 가정. 특정 기능 사용 시 버전 체크 생략 가능
  2. applicationName

    • 기본값: PostgreSQL JDBC Driver
    • 설명: 데이터베이스 모니터링 도구에서 표시될 애플리케이션 식별자
  3. 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();
  }
Edit this page

On this Page