μž‘μ„±: 2026-04-23 09:58:32μˆ˜μ •: 2026-04-23 09:58:32

PostgreSQL 16μ—μ„œ 17둜 μ—…κ·Έλ ˆμ΄λ“œ κ°€μ΄λ“œ: μ£Όμš” 변경점 및 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜

PostgreSQL 17은 μ„±λŠ₯ μ΅œμ ν™”, 관리 νŽΈμ˜μ„± ν–₯상, 그리고 SQL ν‘œμ€€ 지원 강화에 쀑점을 λ‘” λŒ€κ·œλͺ¨ μ—…λ°μ΄νŠΈμž…λ‹ˆλ‹€. 특히 μ§„λ³΄λœ 진곡(VACUUM) ν”„λ‘œμ„ΈμŠ€μ™€ 증뢄 λ°±μ—…(Incremental Backup) κΈ°λŠ₯은 λ°μ΄ν„°λ² μ΄μŠ€ 운영 νš¨μœ¨μ„±μ„ 획기적으둜 λ†’μ—¬μ€λ‹ˆλ‹€.

1. PostgreSQL 17 μ£Όμš” 변경점

1.1 μ„±λŠ₯ 및 운영 μ΅œμ ν™”

  • VACUUM λ©”λͺ¨λ¦¬ 관리 ν˜μ‹ : VACUUM μž‘μ—… μ‹œ μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬ 관리 방식이 μ™„μ „νžˆ μž¬μ„€κ³„λ˜μ–΄, λ©”λͺ¨λ¦¬ μ†ŒλΉ„λŸ‰μ΄ 이전 버전 λŒ€λΉ„ μ΅œλŒ€ 20λ°° κ°μ†Œν–ˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” κ³ λΆ€ν•˜ μ‹œμŠ€ν…œμ—μ„œ μžμ› 경합을 μ€„μ—¬μ€λ‹ˆλ‹€.
  • 슀트리밍 I/O λ„μž…: 순차 μŠ€μΊ”(Sequential Scan) 및 ANALYZE μž‘μ—… 속도λ₯Ό λ†’μ—¬μ£ΌλŠ” μƒˆλ‘œμš΄ 슀트리밍 I/O μΈν„°νŽ˜μ΄μŠ€κ°€ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • 증뢄 λ°±μ—…(Incremental Backup): pg_basebackupμ—μ„œ 증뢄 백업을 κΈ°λ³Έ μ§€μ›ν•©λ‹ˆλ‹€. λ˜ν•œ pg_combinebackup 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ 증뢄 백업본을 전체 λ°±μ—…λ³ΈμœΌλ‘œ 볡원할 수 있게 λ˜μ–΄ λ°±μ—… νš¨μœ¨μ„±μ΄ κ·ΉλŒ€ν™”λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

1.2 SQL 및 개발자 편의 κΈ°λŠ₯

  • SQL/JSON ν‘œμ€€ 지원:
    • JSON_TABLE() ν•¨μˆ˜λ₯Ό 톡해 JSON 데이터λ₯Ό κ΄€κ³„ν˜• ν…Œμ΄λΈ” ν˜•νƒœλ‘œ λ³€ν™˜ν•˜μ—¬ SQL μ‘°μΈμ΄λ‚˜ 필터링에 ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • JSON_EXISTS(), JSON_QUERY(), JSON_VALUE() λ“± μƒˆλ‘œμš΄ 쿼리 ν•¨μˆ˜λ“€μ΄ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • MERGE ꡬ문 κ°•ν™”: MERGE λͺ…λ Ήμ—μ„œ RETURNING μ ˆμ„ μ‚¬μš©ν•  수 있게 λ˜μ—ˆμœΌλ©°, μ—…λ°μ΄νŠΈ κ°€λŠ₯ν•œ λ·°(Updatable Views)λ₯Ό λŒ€μƒμœΌλ‘œλ„ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • COPY 였λ₯˜ λ¬΄μ‹œ: COPY λͺ…령어에 ON_ERROR ignore μ˜΅μ…˜μ΄ μΆ”κ°€λ˜μ–΄, 일뢀 행에 μ—λŸ¬κ°€ μžˆλ”λΌλ„ μž‘μ—…μ„ μ€‘λ‹¨ν•˜μ§€ μ•Šκ³  계속 μ§„ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1.3 논리적 볡제(Logical Replication)

  • pg_createsubscriber: 물리적 λŒ€κΈ° μ„œλ²„(Physical Standby)λ₯Ό 논리적 볡제본(Logical Replica)으둜 μ†μ‰½κ²Œ μ „ν™˜ν•  수 μžˆλŠ” μƒˆλ‘œμš΄ μœ ν‹Έλ¦¬ν‹°κ°€ λ„μž…λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • μž₯μ•  쑰치(Failover) 지원: κΈ°λ³Έ μ„œλ²„ μž₯μ•  μ‹œμ—λ„ κ΅¬λ…μž(Subscriber)κ°€ 동기화 μƒνƒœλ₯Ό μœ μ§€ν•  수 μžˆλ„λ‘ μ œμ–΄ κΈ°λŠ₯이 κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

2. μ—…κ·Έλ ˆμ΄λ“œ μ „ μ£Όμ˜μ‚¬ν•­

  • 논리적 볡제 슬둯: PostgreSQL 17둜 μ—…κ·Έλ ˆμ΄λ“œν•  λ•ŒλŠ” 기쑴의 논리적 볡제 슬둯이 λ³΄μ‘΄λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(17μ—μ„œ 18둜 갈 λ•ŒλŠ” κ°€λŠ₯). λ”°λΌμ„œ μ—…κ·Έλ ˆμ΄λ“œ μ „ μŠ¬λ‘―μ„ μ‚­μ œν•˜κ³  μ—…κ·Έλ ˆμ΄λ“œ ν›„ λ‹€μ‹œ 생성해야 ν•©λ‹ˆλ‹€.
  • Search Path λ³΄μ•ˆ: λ³΄μ•ˆ κ°•ν™”λ₯Ό μœ„ν•΄ 관리 μž‘μ—… 쀑 search_path κ·œμΉ™μ΄ 더 μ—„κ²©ν•˜κ²Œ μ μš©λ©λ‹ˆλ‹€. 인덱슀 μ‹μ΄λ‚˜ κ΅¬μ²΄ν™”λœ λ·°μ—μ„œ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜λŠ” μŠ€ν‚€λ§ˆ λͺ…칭을 λͺ…μ‹œμ μœΌλ‘œ μ§€μ •ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€.
  • 지원 쀑단: AIX OS 지원이 κ³΅μ‹μ μœΌλ‘œ μ€‘λ‹¨λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

3. λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 절차 (pg_upgrade)

κ°€μž₯ ꢌμž₯λ˜λŠ” 방식은 데이터 νŒŒμΌμ„ 직접 λ³΅μ‚¬ν•˜μ§€ μ•Šκ³  링크만 μƒμ„±ν•˜λŠ” --link λͺ¨λ“œλ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

# 1. μƒˆ 버전(17)의 λ°”μ΄λ„ˆλ¦¬ μ„€μΉ˜ 및 데이터 디렉토리 μ΄ˆκΈ°ν™”(initdb)
# 2. μ—…κ·Έλ ˆμ΄λ“œ ν˜Έν™˜μ„± 체크
pg_upgrade \
  --old-datadir /var/lib/postgresql/16/main \
  --new-datadir /var/lib/postgresql/17/main \
  --old-bindir /usr/lib/postgresql/16/bin \
  --new-bindir /usr/lib/postgresql/17/bin \
  --check
 
# 3. μ‹€μ œ μ—…κ·Έλ ˆμ΄λ“œ μˆ˜ν–‰ (ν•˜λ“œλ§ν¬ λͺ¨λ“œ ꢌμž₯)
pg_upgrade \
  --old-datadir /var/lib/postgresql/16/main \
  --new-datadir /var/lib/postgresql/17/main \
  --old-bindir /usr/lib/postgresql/16/bin \
  --new-bindir /usr/lib/postgresql/17/bin \
  --link

4. μ—…κ·Έλ ˆμ΄λ“œ ν›„ 마무리 μž‘μ—…

  • 톡계 정보 κ°±μ‹ : μ—…κ·Έλ ˆμ΄λ“œ μ§ν›„μ—λŠ” μ‹€ν–‰ κ³„νš μ΅œμ ν™”λ₯Ό μœ„ν•΄ ./analyze_new_cluster.shλ₯Ό μ‹€ν–‰ν•˜μ—¬ 톡계 정보λ₯Ό λ‹€μ‹œ μˆ˜μ§‘ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • μ΅μŠ€ν…μ…˜ μ—…λ°μ΄νŠΈ: PostGIS λ“± μ‚¬μš© 쀑인 μ™ΈλΆ€ ν™•μž₯이 17 버전에 맞게 μ—…λ°μ΄νŠΈλ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜κ³  ν•„μš”ν•œ 경우 μž¬μ„€μΉ˜ν•©λ‹ˆλ‹€.
  • 인덱슀 μž¬κ΅¬μ„±: μ •λ ¬(Collation) κ΄€λ ¨ 라이브러리 μ—…λ°μ΄νŠΈκ°€ μžˆμ—ˆλ‹€λ©΄ REINDEXλ₯Ό 톡해 인덱슀 무결성을 ν™•μΈν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

PostgreSQL 17은 특히 λŒ€κ·œλͺ¨ 데이터λ₯Ό λ‹€λ£¨λŠ” ν™˜κ²½μ—μ„œ VACUUM μ„±λŠ₯ ν–₯상과 증뢄 λ°±μ—…λ§ŒμœΌλ‘œλ„ μΆ©λΆ„νžˆ μ—…κ·Έλ ˆμ΄λ“œν•  κ°€μΉ˜κ°€ μžˆλŠ” λ²„μ „μž…λ‹ˆλ‹€.