✨ 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
'AI' 카테고리의 다른 글
Node.js에서 TCP 소켓을 사용하여 JSON 데이터를 안전하게 수신하는 서버 (0) | 2025.05.15 |
---|---|
TCP 소켓을 통해 JSON 데이터를 완전히 전송 (0) | 2025.05.15 |
동기(Synchronous) vs 비동기(Asynchronous) vs 블로킹(Blocking) vs 논블로킹(Non-blocking) 차이 (0) | 2025.05.10 |
mysql connect_timeout 이 10초일때, jdbc connectTimeout 는 몇초가 적당한가? (0) | 2025.05.07 |
자바 서버 → Snappy 압축 → 리액트 프론트에서 풀기 (0) | 2025.04.28 |
AoA(Angle of Arrival) 스캐너 4대에서 얻은 방위각(Azimuth)과 고도각(Elevation) 정보를 사용하여 태그의 위치를 추정 (0) | 2025.04.24 |
AoA 스캐너 4대와 AoA 태그 (0) | 2025.04.24 |
메모리 이슈 (0) | 2025.04.21 |
댓글