[java] 자바 소켓 프로그래밍을 통한 웹 서버 개발

이번에는 자바 소켓 프로그래밍을 사용하여 간단한 웹 서버를 개발하는 방법을 알아보겠습니다. 소켓 프로그래밍은 네트워크 통신을 위해 사용되는 기술로, 클라이언트와 서버 간 데이터 송수신을 담당합니다.

소켓 프로그래밍 소개

소켓은 클라이언트와 서버 사이의 통신을 가능하게 하는 양방향 통신 채널입니다. 클라이언트는 서버의 IP 주소와 포트 번호를 사용하여 연결을 시도하고, 서버는 클라이언트의 요청을 받아들여 응답을 전송합니다.

자바에서는 java.net 패키지의 ServerSocketSocket 클래스를 사용하여 소켓 프로그래밍을 구현할 수 있습니다.

웹 서버 개발 절차

  1. 서버 소켓 생성
  2. 클라이언트 연결 대기
  3. 클라이언트 요청 수신
  4. 요청 처리 및 응답 작성
  5. 응답 전송
  6. 연결 종료

이제 위 절차를 코드로 구현해보겠습니다.

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

public class WebServer {
    public static void main(String[] args) {
        try {
            // 1. 서버 소켓 생성
            ServerSocket serverSocket = new ServerSocket(8080);
            System.out.println("웹 서버가 시작되었습니다.");

            while (true) {
                // 2. 클라이언트 연결 대기
                Socket clientSocket = serverSocket.accept();
                System.out.println("클라이언트가 연결되었습니다.");

                // 3. 클라이언트 요청 수신
                BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                String request = in.readLine();
                System.out.println("요청 메시지: " + request);

                // 4. 요청 처리 및 응답 작성
                String response = "HTTP/1.1 200 OK\r\n"
                        + "Content-Type: text/html\r\n\r\n"
                        + "<h1>Hello, World!</h1>";
                System.out.println("응답 메시지: " + response);

                // 5. 응답 전송
                PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
                out.println(response);

                // 6. 연결 종료
                clientSocket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 코드는 8080 포트에서 클라이언트의 요청을 받아들여 “Hello, World!”를 응답하는 간단한 웹 서버를 구현한 예입니다.

참고 자료