[java] 자바로 압축된 데이터를 네트워크로 전송하는 방법

애플리케이션에서 데이터를 전송할 때, 데이터를 압축하여 전송하면 대역폭을 절약하고 전송 시간을 단축할 수 있습니다. 자바에서는 java.util.zip 패키지를 사용하여 데이터를 압축하고, java.net 패키지를 사용하여 압축된 데이터를 네트워크로 전송할 수 있습니다. 이제 자세한 방법을 살펴보겠습니다.

1. 데이터 압축하기

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;

public class DataCompressor {
    public static byte[] compressData(byte[] data) throws IOException {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        Deflater deflater = new Deflater();
        DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(outputStream, deflater);
        deflaterOutputStream.write(data);
        deflaterOutputStream.close();
        return outputStream.toByteArray();
    }
}

위의 코드는 compressData 메서드를 사용하여 데이터를 압축하는 예제입니다. Deflater 클래스를 사용하여 데이터를 압축하고, DeflaterOutputStream 클래스를 사용하여 압축 결과를 출력 스트림에 쓸 수 있습니다. 압축된 데이터는 outputStream.toByteArray()를 통해 byte 배열로 얻을 수 있습니다.

2. 압축된 데이터 전송하기

import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;

public class DataSender {
    public static void sendData(byte[] compressedData, String host, int port) throws IOException {
        Socket socket = new Socket(host, port);
        OutputStream outputStream = socket.getOutputStream();
        DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
        dataOutputStream.write(compressedData);
        dataOutputStream.close();
        socket.close();
    }
}

위의 코드는 sendData 메서드를 사용하여 압축된 데이터를 네트워크로 전송하는 예제입니다. SocketDataOutputStream 클래스를 사용하여 소켓 연결을 생성하고, write 메서드를 통해 압축된 데이터를 전송합니다.

사용 예시

public class Main {
    public static void main(String[] args) {
        try {
            byte[] data = "Hello, world!".getBytes();
            byte[] compressedData = DataCompressor.compressData(data);
            DataSender.sendData(compressedData, "127.0.0.1", 8080);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 코드는 데이터를 압축하고, 압축된 데이터를 지정한 호스트와 포트로 전송하는 예시입니다. 127.0.0.1은 로컬호스트, 8080은 포트 번호로 변경하여 실제 사용하시면 됩니다.

자바를 사용하여 데이터를 압축하고 네트워크로 전송하는 방법을 알아봤습니다. 이는 대규모 데이터를 전송해야하는 경우나 네트워크 대역폭이 제한적인 경우 유용한 기술입니다. 추가적인 기능이나 보안을 위해 더 많은 사항을 고려해야 할 수도 있으니 참고하시기 바랍니다.

참고 자료: