본문 바로가기
AI

Snappy 압축 라이브러리

by david100gom 2025. 4. 28.

 

✨ 1. Maven 의존성 추가

<dependency>
    <groupId>org.xerial.snappy</groupId>
    <artifactId>snappy-java</artifactId>
    <version>1.1.10.1</version> <!-- 최신 버전 추천 -->
</dependency>

Gradle이면:

implementation 'org.xerial.snappy:snappy-java:1.1.10.1'

✨ 2. 기본 사용법 (문자열 압축 & 해제)

import org.xerial.snappy.Snappy;

public class SnappyExample {
    public static void main(String[] args) throws Exception {
        String originalText = "Hello, this is a long text that needs compression!";

        // 압축
        byte[] compressed = Snappy.compress(originalText.getBytes("UTF-8"));

        // 압축 해제
        byte[] uncompressed = Snappy.uncompress(compressed);

        String resultText = new String(uncompressed, "UTF-8");

        System.out.println("원본: " + originalText);
        System.out.println("복원: " + resultText);
    }
}

✔️ 포인트:

  • compress(byte[]), uncompress(byte[]) 메서드로 간단하게 압축/해제를 할 수 있습니다.
  • 일반적으로 String → byte[] 변환 후 압축, 해제 후 byte[] → String 변환 흐름을 사용합니다.

✨ 3. 자바 웹서비스에서 활용 예시

예를 들어, Spring Boot REST API에서 요청/응답을 Snappy로 압축하고 싶으면:

@RestController
@RequestMapping("/snappy")
public class SnappyController {

    @PostMapping("/compress")
    public ResponseEntity<byte[]> compressText(@RequestBody String text) throws Exception {
        byte[] compressed = Snappy.compress(text.getBytes(StandardCharsets.UTF_8));
        return ResponseEntity.ok()
                .header(HttpHeaders.CONTENT_ENCODING, "snappy")
                .body(compressed);
    }

    @PostMapping("/decompress")
    public ResponseEntity<String> decompressData(@RequestBody byte[] compressedData) throws Exception {
        byte[] uncompressed = Snappy.uncompress(compressedData);
        String text = new String(uncompressed, StandardCharsets.UTF_8);
        return ResponseEntity.ok(text);
    }
}
  • /snappy/compress : 텍스트를 압축해서 byte[] 반환
  • /snappy/decompress : 압축된 **byte[]**를 복원해 텍스트 반환

참고: HTTP 자체는 기본적으로 gzip 압축을 지원하지만, 직접 Snappy를 활용할 때는 이렇게 Content-Encoding: snappy 같은 커스텀 헤더를 사용할 수 있어요.


✨ 4. Kafka 사용 시 Snappy 설정

만약 Kafka Producer/Consumer 안에서 Snappy를 쓰고 싶다면:

# producer 설정
compression.type=snappy

자바 코드로는:

props.put("compression.type", "snappy");

Kafka 클라이언트는 내부적으로 snappy-java를 사용할 준비가 되어 있어야 합니다.


📌 추가 팁

  • Snappy는 압축률은 낮지만 속도는 매우 빠릅니다. (gzip 대비 3~5배 빠름)
  • 대량의 데이터 처리가 필요한 웹서비스, 스트리밍 서비스, 로그 전송에 적합합니다.
  • 스레드 안전합니다. (여러 스레드에서 동시에 사용해도 문제 없음)

필요하면 "Spring Filter나 Interceptor 레벨에서 Snappy 자동 압축/해제하는 방법"도 추가로 알려드릴게요 🔥
혹시 웹서비스 어디에 Snappy를 적용하려는지 살짝 알려주실 수 있나요? (ex: API 응답, Kafka 메시지, 파일 저장 등)

728x90

댓글