이번 포스트에서는 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.java
와 SocketServer.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과 함께 응용하여 다양한 네트워크 프로젝트를 구현해보세요.