From 8d228255e9212100af8765d0dfde7c15ca723415 Mon Sep 17 00:00:00 2001 From: donghyeon-ka Date: Fri, 21 Aug 2026 18:10:35 +0900 Subject: [PATCH] style: apply the formatter to the image dimension reader Spotless normalization only; no behaviour change. --- .../studio/service/ImageDimensions.java | 27 +++++++++---------- .../service/UploadStudioAssetUseCase.java | 3 +-- .../studio/service/ImageDimensionsTest.java | 10 +++---- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/application-core/src/main/java/dev/caskeleton/application/techlog/studio/service/ImageDimensions.java b/src/application-core/src/main/java/dev/caskeleton/application/techlog/studio/service/ImageDimensions.java index 3ad3551..116ecae 100644 --- a/src/application-core/src/main/java/dev/caskeleton/application/techlog/studio/service/ImageDimensions.java +++ b/src/application-core/src/main/java/dev/caskeleton/application/techlog/studio/service/ImageDimensions.java @@ -5,15 +5,13 @@ import java.util.Optional; /** * 업로드한 그림의 픽셀 크기를 헤더에서 읽는다. * - *

업로드가 이 값을 기록하지 않아 모든 그림이 화면에서 사라졌다. 렌더러는 치수를 모르면 자리를 - * 잡을 수 없고, 그때 쓰던 대체값 1×1 이 {@code loading="lazy"} 와 만나 브라우저가 영영 가져오지 - * 않는 상자가 됐다. 화면 쪽은 모르는 치수를 정직하게 비우도록 고쳤고, 이쪽은 애초에 알 수 있는 - * 값을 기록한다. + *

업로드가 이 값을 기록하지 않아 모든 그림이 화면에서 사라졌다. 렌더러는 치수를 모르면 자리를 잡을 수 없고, 그때 쓰던 대체값 1×1 이 {@code + * loading="lazy"} 와 만나 브라우저가 영영 가져오지 않는 상자가 됐다. 화면 쪽은 모르는 치수를 정직하게 비우도록 고쳤고, 이쪽은 애초에 알 수 있는 값을 + * 기록한다. * - *

디코딩하지 않고 헤더만 읽는다. {@code ImageIO} 는 {@code java.desktop} 모듈을 끌어오고 - * 런타임 이미지가 그것을 담고 있으리라는 보장이 없다 — 없는 배포에서 업로드가 통째로 실패하는 - * 것보다, 아는 형식의 헤더 몇 바이트를 직접 읽는 편이 낫다. 모르는 형식은 비운다: 크기를 모르는 - * 것과 크기가 0 인 것은 다르고, 화면은 그 둘을 구분한다. + *

디코딩하지 않고 헤더만 읽는다. {@code ImageIO} 는 {@code java.desktop} 모듈을 끌어오고 런타임 이미지가 그것을 담고 있으리라는 보장이 없다 + * — 없는 배포에서 업로드가 통째로 실패하는 것보다, 아는 형식의 헤더 몇 바이트를 직접 읽는 편이 낫다. 모르는 형식은 비운다: 크기를 모르는 것과 크기가 0 인 것은 + * 다르고, 화면은 그 둘을 구분한다. */ public final class ImageDimensions { @@ -52,10 +50,7 @@ public final class ImageDimensions { return size((c[6] & 0xFF) | ((c[7] & 0xFF) << 8), (c[8] & 0xFF) | ((c[9] & 0xFF) << 8)); } - /** - * SOF 마커까지 세그먼트를 건너뛴다. 어느 SOF 인지는 상관없다 — 어떤 것이든 그 안의 높이·폭이 - * 그림의 크기다. - */ + /** SOF 마커까지 세그먼트를 건너뛴다. 어느 SOF 인지는 상관없다 — 어떤 것이든 그 안의 높이·폭이 그림의 크기다. */ private static Optional jpeg(byte[] c) { int i = 2; while (i + 9 < c.length) { @@ -66,7 +61,8 @@ public final class ImageDimensions { int marker = c[i + 1] & 0xFF; // SOF0..SOF15, 단 DHT(C4)·JPG(C8)·DAC(CC) 는 SOF 가 아니다. if (marker >= 0xC0 && marker <= 0xCF && marker != 0xC4 && marker != 0xC8 && marker != 0xCC) { - return size((c[i + 7] & 0xFF) << 8 | (c[i + 8] & 0xFF), (c[i + 5] & 0xFF) << 8 | (c[i + 6] & 0xFF)); + return size( + (c[i + 7] & 0xFF) << 8 | (c[i + 8] & 0xFF), (c[i + 5] & 0xFF) << 8 | (c[i + 6] & 0xFF)); } int length = (c[i + 2] & 0xFF) << 8 | (c[i + 3] & 0xFF); if (length < 2) { @@ -78,7 +74,10 @@ public final class ImageDimensions { } private static int int32(byte[] c, int at) { - return ((c[at] & 0xFF) << 24) | ((c[at + 1] & 0xFF) << 16) | ((c[at + 2] & 0xFF) << 8) | (c[at + 3] & 0xFF); + return ((c[at] & 0xFF) << 24) + | ((c[at + 1] & 0xFF) << 16) + | ((c[at + 2] & 0xFF) << 8) + | (c[at + 3] & 0xFF); } private static Optional size(int width, int height) { diff --git a/src/application-core/src/main/java/dev/caskeleton/application/techlog/studio/service/UploadStudioAssetUseCase.java b/src/application-core/src/main/java/dev/caskeleton/application/techlog/studio/service/UploadStudioAssetUseCase.java index bc258d2..243cbdb 100644 --- a/src/application-core/src/main/java/dev/caskeleton/application/techlog/studio/service/UploadStudioAssetUseCase.java +++ b/src/application-core/src/main/java/dev/caskeleton/application/techlog/studio/service/UploadStudioAssetUseCase.java @@ -84,8 +84,7 @@ public class UploadStudioAssetUseCase implements CommandUseCase dimensions = - ImageDimensions.of(mediaType, content); + java.util.Optional dimensions = ImageDimensions.of(mediaType, content); UUID assetId = idGenerator.get(); String assetKey = assetKeyFor(input.originalFilename(), assetId); diff --git a/src/application-core/src/test/java/dev/caskeleton/application/techlog/studio/service/ImageDimensionsTest.java b/src/application-core/src/test/java/dev/caskeleton/application/techlog/studio/service/ImageDimensionsTest.java index c2c77b8..7485b8e 100644 --- a/src/application-core/src/test/java/dev/caskeleton/application/techlog/studio/service/ImageDimensionsTest.java +++ b/src/application-core/src/test/java/dev/caskeleton/application/techlog/studio/service/ImageDimensionsTest.java @@ -5,10 +5,7 @@ import static org.assertj.core.api.Assertions.assertThat; import java.util.Optional; import org.junit.jupiter.api.Test; -/** - * 헤더 오프셋은 눈으로 맞는지 알 수 없다. 업로드가 치수를 기록하지 않아 모든 그림이 화면에서 - * 사라진 적이 있으므로, 이 값을 읽는 코드는 실제 바이트로 확인한다. - */ +/** 헤더 오프셋은 눈으로 맞는지 알 수 없다. 업로드가 치수를 기록하지 않아 모든 그림이 화면에서 사라진 적이 있으므로, 이 값을 읽는 코드는 실제 바이트로 확인한다. */ class ImageDimensionsTest { private static byte[] png(int width, int height) { @@ -90,7 +87,10 @@ class ImageDimensionsTest { void answersEmptyForFormatsItDoesNotRead() { // 모르는 것과 0 은 다르다. 화면이 그 둘을 구분하므로 여기서 섞으면 안 된다. assertThat(ImageDimensions.of("image/webp", new byte[64])).isEqualTo(Optional.empty()); - assertThat(ImageDimensions.of("image/svg+xml", "".getBytes(java.nio.charset.StandardCharsets.UTF_8))).isEqualTo(Optional.empty()); + assertThat( + ImageDimensions.of( + "image/svg+xml", "".getBytes(java.nio.charset.StandardCharsets.UTF_8))) + .isEqualTo(Optional.empty()); } @Test