[java] 자바 소켓 프로그래밍을 통한 채팅 봇 개발

이번에는 자바 소켓 프로그래밍을 활용하여 채팅 봇을 개발하는 방법에 대해 알아보겠습니다. 채팅 봇은 사용자와 실시간으로 대화할 수 있는 프로그램으로, 소켓 프로그래밍을 이용하면 클라이언트와 서버 간의 통신을 간편하게 구현할 수 있습니다.

1. 서버 구현

먼저, 서버를 구현해야 합니다. 이 서버는 클라이언트의 연결을 받아들이고 메시지를 주고받는 역할을 합니다. 아래는 간단한 서버 구현 예제입니다.

import java.io.*;
import java.net.*;

public class ChatServer {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(5000);
            System.out.println("서버가 시작되었습니다.");

            while (true) {
                Socket clientSocket = serverSocket.accept();
                System.out.println("클라이언트가 접속했습니다.");

                BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                PrintWriter writer = new PrintWriter(clientSocket.getOutputStream(), true);

                String message;
                while ((message = reader.readLine()) != null) {
                    System.out.println("수신한 메시지: " + message);
                    writer.println("Echo: " + message);
                }

                writer.close();
                reader.close();
                clientSocket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 예제에서는 5000번 포트를 사용하여 ServerSocket을 생성하고 클라이언트의 접속을 기다립니다. 클라이언트가 접속하면 클라이언트의 입력을 받아서 다시 그대로 클라이언트에게 돌려주는 간단한 에코 서버를 구현했습니다.

2. 클라이언트 구현

이제 클라이언트를 구현해야 합니다. 클라이언트는 서버에 연결되어 서버로 메시지를 전송하고, 서버로부터 받은 메시지를 출력하는 역할을 합니다. 아래는 간단한 클라이언트 구현 예제입니다.

import java.io.*;
import java.net.*;

public class ChatClient {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 5000);

            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

            BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));

            while (true) {
                System.out.print("메시지 입력: ");
                String message = consoleReader.readLine();
                writer.write(message + "\n");
                writer.flush();

                String response = reader.readLine();
                System.out.println("서버에서 받은 메시지: " + response);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 예제에서는 “localhost”에 5000번 포트로 소켓을 생성하고, 사용자로부터 메시지를 입력 받아 서버로 전송합니다. 서버로부터 받은 응답을 출력합니다. 이 과정을 반복하여 실시간으로 채팅을 할 수 있습니다.

3. 실행

서버와 클라이언트 모두 컴파일 후 실행하면 채팅 봇이 동작합니다. 서버를 먼저 실행하고 클라이언트를 실행하면 클라이언트가 서버에 접속하여 대화가 시작됩니다. 클라이언트가 텍스트를 입력하면 서버에서는 해당 텍스트를 그대로 반환하여 클라이언트에게 다시 출력됩니다.

결론

본 포스트에서는 자바 소켓 프로그래밍을 통해 채팅 봇을 개발하는 방법에 대해 알아보았습니다. 소켓 프로그래밍을 이용하면 실시간으로 데이터를 주고받을 수 있어 채팅 봇과 같은 프로그램을 구현하는데 적합합니다.