[java] 자바 웹 서버와 클라이언트 구현하기

이번에는 자바를 사용하여 간단한 웹 서버와 클라이언트를 구현하는 방법에 대해 알아보겠습니다.

웹 서버 구현하기

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class SimpleWebServer {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8080);
            System.out.println("웹 서버 시작. 포트: 8080");

            while (true) {
                Socket clientSocket = serverSocket.accept();

                BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

                String request;
                while ((request = in.readLine()) != null) {
                    if (request.isEmpty()) {
                        break;
                    }
                    System.out.println("클라이언트 요청: " + request);
                }

                String response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>안녕, 웹!</h1>";
                out.println(response);

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

위의 코드는 8080 포트로 들어오는 클라이언트 요청을 받아들이고, 간단한 “안녕, 웹!” 메시지를 반환하는 웹 서버의 예시입니다.

웹 클라이언트 구현하기

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

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

            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            out.println("GET / HTTP/1.1\r\nHost: localhost:8080\r\n\r\n");

            String response;
            while ((response = in.readLine()) != null) {
                System.out.println(response);
            }

            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 코드는 로컬 8080 포트로 HTTP GET 요청을 보내고, 받은 응답을 콘솔에 출력하는 간단한 웹 클라이언트의 예시입니다.

두 예시 코드를 실행하여 간단한 웹 서버와 클라이언트를 구현하고 상호작용하는 방법을 시도해보세요!


참고 자료: