[java] 자바 소켓 프로그래밍을 통한 요청-응답 서버 개발

이번 블로그에서는 자바 소켓 프로그래밍을 사용하여 요청-응답 서버를 개발하는 방법을 알아보겠습니다. 소켓 프로그래밍은 클라이언트와 서버 사이에 통신을 가능하게 하는 기술로, 네트워크 애플리케이션을 개발하는 데 매우 중요합니다.

개발 환경 설정

먼저, 자바 소켓 프로그래밍을 위해 개발 환경을 설정해야 합니다. 아래의 단계를 따라 진행해보세요.

  1. JDK 설치: Oracle 사이트에서 JDK(Java Development Kit)를 다운로드하여 설치합니다.
  2. IDE 설치: 자바 개발에 편리한 IDE(Integrated Development Environment)를 설치합니다. 예를 들어, Eclipse, IntelliJ IDEA, 혹은 NetBeans 등을 사용할 수 있습니다.
  3. 프로젝트 생성: IDE에서 새로운 자바 프로젝트를 생성합니다.

요청-응답 서버 개발하기

이제, 소켓 프로그래밍을 사용하여 요청-응답 서버를 개발해보겠습니다.

  1. 서버 소켓 생성: 서버 소켓을 생성하고 특정 포트에 바인딩합니다.
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) {
        try {
            // 8080 포트에 서버 소켓 생성
            ServerSocket serverSocket = new ServerSocket(8080);
            
            while (true) {
                // 클라이언트의 요청 대기
                Socket clientSocket = serverSocket.accept();
                
                // 클라이언트 요청을 처리하는 쓰레드 생성 및 시작
                RequestHandler requestHandler = new RequestHandler(clientSocket);
                requestHandler.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  1. 요청 처리하기: 클라이언트의 요청을 처리하는 별도의 스레드를 생성하여 요청을 응답합니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class RequestHandler extends Thread {
    private Socket clientSocket;

    public RequestHandler(Socket clientSocket) {
        this.clientSocket = clientSocket;
    }

    @Override
    public void run() {
        try {
            // 클라이언트로부터의 입력 스트림
            BufferedReader input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            // 클라이언트로의 출력 스트림
            PrintWriter output = new PrintWriter(clientSocket.getOutputStream(), true);
            
            String request = input.readLine();

            // 요청에 따른 응답 처리
            String response = processRequest(request);
            
            // 클라이언트에게 응답 전송
            output.println(response);
            
            // 리소스 반환
            input.close();
            output.close();
            clientSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private String processRequest(String request) {
        // 요청에 따라 적절한 작업을 수행하고 결과를 반환하는 로직 구현
        return "Hello, client!";
    }
}

위의 예시 코드에서 Server 클래스는 서버 소켓을 생성하고 클라이언트 요청을 처리하는 것을 담당합니다. RequestHandler 클래스는 클라이언트의 요청을 받아 처리하고 응답을 반환하는 작업을 수행합니다.

서버 실행 및 테스트

서버를 실행하여 정상적으로 동작하는지 테스트해보겠습니다.

  1. IDE에서 Server 클래스를 실행합니다.
  2. 클라이언트 애플리케이션(브라우저, REST 클라이언트 등)을 사용하여 http://localhost:8080으로 요청을 보냅니다.
  3. 서버가 클라이언트의 요청을 처리하고 Hello, client!라는 응답을 받아오면 성공적으로 동작한 것입니다.

마치며

자바 소켓 프로그래밍을 통해 요청-응답 서버를 개발하는 방법을 알아보았습니다. 이를 통해 네트워크 애플리케이션을 개발하는 데 도움이 되었기를 바랍니다.

참고자료: