diff --git a/.jules/bolt.md b/.jules/bolt.md new file mode 100644 index 00000000..872bd24b --- /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 00000000..9ce75e9a --- /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 9c595937..a3a68298 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) {