From ffb882444d5b29368acfb6c19c3c01e33dd0670f Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Tue, 30 Jun 2026 21:05:04 +0000 Subject: [PATCH] =?UTF-8?q?=EC=84=B1=EB=8A=A5:=20DefaultDocumentConversion?= =?UTF-8?q?Service=EC=97=90=EC=84=9C=20String.format=EC=9D=84=20HexFormat?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EA=B5=90=EC=B2=B4=ED=95=98=EC=97=AC=20?= =?UTF-8?q?=EC=86=8D=EB=8F=84=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .jules/bolt.md | 3 +++ CHANGELOG.md | 1 + .../viewer/service/DefaultDocumentConversionService.java | 8 ++------ 3 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 .jules/bolt.md create mode 100644 CHANGELOG.md diff --git a/.jules/bolt.md b/.jules/bolt.md new file mode 100644 index 0000000..872bd24 --- /dev/null +++ b/.jules/bolt.md @@ -0,0 +1,3 @@ +## 2026-06-30 - Java HexFormat Optimization +**Learning:** In Java 21, `java.util.HexFormat.of().formatHex(bytes)` is highly preferred over iterating and using `String.format(\"%02x\", b)` for converting a byte array to a hex string. +**Action:** Replaced String.format in a loop with HexFormat in DefaultDocumentConversionService to enhance performance during content hash generation. diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..9ce75e9 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1 @@ +# Changelog\n\n## [Unreleased]\n- ⚡ `DefaultDocumentConversionService` 내부 해시 생성 시 `String.format`을 `HexFormat`으로 교체하여 성능 개선 diff --git a/src/main/java/com/clearfolio/viewer/service/DefaultDocumentConversionService.java b/src/main/java/com/clearfolio/viewer/service/DefaultDocumentConversionService.java index 9c59593..a3a6829 100644 --- a/src/main/java/com/clearfolio/viewer/service/DefaultDocumentConversionService.java +++ b/src/main/java/com/clearfolio/viewer/service/DefaultDocumentConversionService.java @@ -121,12 +121,8 @@ private String contentHash(MultipartFile file) { } byte[] raw = digest.digest(); - StringBuilder hex = new StringBuilder(raw.length * 2); - for (byte b : raw) { - hex.append(String.format("%02x", b)); - } - - return hex.toString(); + // 성능 향상을 위해 String.format 대신 HexFormat 사용 + return java.util.HexFormat.of().formatHex(raw); } catch (NoSuchAlgorithmException ex) { throw new IllegalStateException("SHA-256 digest unavailable", ex); } catch (IOException ex) {