[java] Maven을 사용하여 소켓 프로그래밍 구현하기

이번 포스트에서는 Maven을 사용하여 자바로 소켓 프로그래밍을 구현하는 방법에 대해 알아보겠습니다. 소켓 프로그래밍은 네트워크 통신을 위해 소켓을 사용하는 방식으로, 클라이언트와 서버간의 데이터 교환을 가능하게 해줍니다. Maven은 소프트웨어 프로젝트의 의존성 관리 및 빌드 도구로 많이 사용되며, 소켓 프로그래밍에도 쉽게 적용할 수 있습니다.

1. Maven 프로젝트 생성

우선 Maven을 사용하기 위해 Maven 프로젝트를 생성해야합니다. 아래와 같이 터미널에서 Maven을 설치하고 프로젝트를 생성합니다.

$ mvn archetype:generate -DgroupId=com.example -DartifactId=socket-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

위의 명령어를 실행하면 socket-app이라는 이름의 Maven 프로젝트가 생성됩니다.

2. 소켓 프로그래밍 구현

이제 Maven 프로젝트 내에서 소켓 프로그래밍을 구현할 차례입니다. socket-app 폴더로 이동한 후, src/main/java/com/example 폴더 내에 SocketClient.javaSocketServer.java 파일을 생성합니다.

SocketClient.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class SocketClient {
    public static void main(String[] args) {
        try {
            // 클라이언트 소켓 생성
            Socket socket = new Socket("localhost", 8080);

            // 서버로부터 데이터를 읽어들일 Reader 생성
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            // 서버로 데이터를 전송할 Writer 생성
            PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);

            // 서버로 메시지 전송
            writer.println("Hello, Server!");

            // 서버로부터 받은 응답 출력
            String response = reader.readLine();
            System.out.println("Server response: " + response);

            // 리소스 정리
            reader.close();
            writer.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

SocketServer.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer {
    public static void main(String[] args) {
        try {
            // 서버 소켓 생성
            ServerSocket serverSocket = new ServerSocket(8080);

            // 클라이언트 접속 대기
            Socket socket = serverSocket.accept();

            // 클라이언트로부터 데이터를 읽어들일 Reader 생성
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            // 클라이언트로 데이터를 전송할 Writer 생성
            PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);

            // 클라이언트로부터 메시지 읽기
            String message = reader.readLine();
            System.out.println("Client message: " + message);

            // 클라이언트에게 응답 전송
            writer.println("Hello, Client!");

            // 리소스 정리
            reader.close();
            writer.close();
            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 코드는 간단한 예제로, 클라이언트는 서버에 “Hello, Server!”라는 메시지를 전송하고, 서버는 이를 받아 “Hello, Client!”라는 응답을 보냅니다.

3. 빌드 및 실행

이제 Maven 프로젝트를 빌드하고 소켓 프로그램을 실행해보겠습니다. 터미널에서 아래 명령어를 실행합니다.

$ mvn clean package

위의 명령어를 실행하면 Maven은 프로젝트를 빌드하여 target 폴더에 socket-app-1.0-SNAPSHOT.jar 파일을 생성합니다. 이제 소켓 클라이언트와 서버를 각각 다른 터미널에서 실행해보겠습니다.

터미널 1:

$ java -cp target/socket-app-1.0-SNAPSHOT.jar com.example.SocketServer

터미널 2:

$ java -cp target/socket-app-1.0-SNAPSHOT.jar com.example.SocketClient

터미널 2에서 실행된 클라이언트가 서버로 메시지를 전송하고, 서버에서 해당 메시지에 대한 응답을 보여줄 것입니다.

결론

이번 포스트에서는 Maven을 사용하여 소켓 프로그래밍을 구현하는 방법에 대해 알아보았습니다. Maven을 활용하면 의존성 관리와 빌드 과정을 효율적으로 수행할 수 있습니다. 소켓 프로그래밍은 네트워크 통신을 위해 필수적인 기술이므로, Maven과 함께 응용하여 다양한 네트워크 프로젝트를 구현해보세요.