코딩 스쿨 Java

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

Java Server

자바 서버 (Java Server)

자바는 다양한 방식으로 서버를 구현할 수 있는 강력한 언어입니다. 자바 서버는 주로 웹 서버애플리케이션 서버를 의미하며, 클라이언트로부터 요청을 받아 처리하고, 그 결과를 다시 클라이언트에게 반환하는 역할을 합니다. 자바 서버 구현은 HTTP 서버부터 소켓 서버, 서블릿을 이용한 웹 애플리케이션 서버까지 다양한 방법으로 가능합니다.

1. 자바에서 서버 구현 방법

자바로 서버를 구현하는 방법은 여러 가지가 있으며, 주로 다음과 같은 방법들이 많이 사용됩니다.

  1. 소켓 프로그래밍을 이용한 서버 구현
  2. HTTP 서버를 직접 구현
  3. *서블릿(Servlet)**을 이용한 웹 애플리케이션 서버
  4. 스프링(Spring) 프레임워크를 이용한 서버 개발

이제 각 방법을 설명하고 예제를 제공하겠습니다.

2. 소켓 프로그래밍을 이용한 서버 구현

  • *소켓(Socket)**은 네트워크 상에서 데이터를 주고받기 위한 통신의 끝점입니다. 자바는 소켓 프로그래밍을 지원하여 TCP 또는 UDP 기반의 서버를 쉽게 구현할 수 있습니다.

2.1. TCP 소켓 서버 예제

다음은 자바에서 TCP 소켓 서버를 구현하는 간단한 예제입니다. 클라이언트가 서버에 연결하여 메시지를 보내면, 서버가 그 메시지를 출력하는 프로그램입니다.

서버 코드

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

public class TCPServer {
    public static void main(String[] args) {
        try {
            // 포트 번호 8080에서 서버 소켓 생성
            ServerSocket serverSocket = new ServerSocket(8080);
            System.out.println("서버가 시작되었습니다. 포트: 8080");

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

            // 클라이언트로부터 메시지를 받음
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            String message = in.readLine();
            System.out.println("클라이언트 메시지: " + message);

            // 자원 해제
            clientSocket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

클라이언트 코드

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

public class TCPClient {
    public static void main(String[] args) {
        try {
            // 서버에 연결
            Socket socket = new Socket("localhost", 8080);

            // 서버에 메시지 전송
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            out.println("안녕하세요, 서버!");

            // 자원 해제
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

설명:

  • TCPServer: 서버 소켓을 생성하고, 클라이언트의 연결을 대기한 후, 메시지를 받습니다.
  • TCPClient: 서버에 연결하고, 메시지를 전송합니다.

실행 방법:

  1. 서버를 먼저 실행한 후, 클라이언트를 실행합니다.
  2. 클라이언트에서 메시지를 보내면 서버가 메시지를 수신하고 출력합니다.

3. HTTP 서버 구현

자바에서는 HTTP 서버를 간단하게 구현할 수 있습니다. 자바의 com.sun.net.httpserver.HttpServer 클래스를 사용하여 HTTP 서버를 만들 수 있습니다. 이를 통해 웹 서버와 같이 클라이언트의 요청을 받고, 응답을 보내는 작업을 처리할 수 있습니다.

HTTP 서버 예제

import com.sun.net.httpserver.HttpServer;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpExchange;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;

public class SimpleHttpServer {
    public static void main(String[] args) throws IOException {
        // 포트 8080에 HTTP 서버 생성
        HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
        server.createContext("/", new MyHandler());
        server.setExecutor(null); // 기본 실행자 설정
        server.start();
        System.out.println("HTTP 서버가 8080 포트에서 실행 중입니다.");
    }

    // HTTP 요청 처리 핸들러
    static class MyHandler implements HttpHandler {
        @Override
        public void handle(HttpExchange exchange) throws IOException {
            String response = "Hello, World!";
            exchange.sendResponseHeaders(200, response.length());
            OutputStream os = exchange.getResponseBody();
            os.write(response.getBytes());
            os.close();
        }
    }
}

설명:

  • HttpServer: 자바에서 간단한 HTTP 서버를 구현할 수 있도록 지원하는 클래스입니다.
  • HttpHandler: HTTP 요청을 처리하는 핸들러입니다.
  • 서버가 클라이언트의 요청을 받으면, "Hello, World!" 응답을 보냅니다.

실행 방법:

  1. 코드를 실행하면 서버가 포트 8080에서 실행됩니다.
  2. 브라우저에서 http://localhost:8080으로 접속하면 "Hello, World!" 메시지를 볼 수 있습니다.

4. 서블릿을 이용한 웹 서버 구현

  • *서블릿(Servlet)**은 자바 기반의 웹 애플리케이션을 구현하는 데 사용되는 기술입니다. 서블릿 컨테이너에서 실행되며, 주로 Apache Tomcat과 같은 서버에서 서블릿을 실행하여 웹 애플리케이션을 구현합니다.

서블릿 예제

HelloServlet.java

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<h1>Hello, Servlet!</h1>");
    }
}

설명:

  • 서블릿은 HTTP 요청을 처리하는 자바 클래스입니다.
  • doGet() 메서드는 GET 요청을 처리하며, 웹 페이지에 "Hello, Servlet!" 메시지를 출력합니다.

서블릿 실행 방법:

  1. Apache Tomcat 서버에 이 서블릿을 배포합니다.
  2. 브라우저에서 http://localhost:8080/your-app/hello로 접속하여 서블릿이 제대로 작동하는지 확인합니다.

5. 스프링 프레임워크를 이용한 서버 개발

  • *스프링 프레임워크(Spring Framework)**는 자바 기반의 엔터프라이즈 애플리케이션을 쉽게 개발할 수 있도록 돕는 가장 인기 있는 자바 프레임워크 중 하나입니다. 스프링 부트(Spring Boot)는 스프링을 기반으로 한 빠르고 간편한 서버 개발 도구입니다.

스프링 부트로 간단한 서버 만들기

HelloController.java

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot!";
    }
}

Application.java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

설명:

  • 스프링 부트는 최소한의 설정으로 웹 서버를 구현할 수 있도록 해줍니다.
  • *@RestController*와 **@GetMapping*을 사용하여 간단한 HTTP 엔드포인트를 만듭니다.
  • 서버 실행 후, 브라우저에서 http://localhost:8080/hello로 접속하면 "Hello, Spring Boot!" 메시지를 확인할 수 있습니다.

실행 방법:

  1. Spring Boot 프로젝트를 생성하고, 코드를 작성한 후 실행합니다.
  2. *localhost:8080/hello*로 접속하여 결과를 확인합니다.

요약

자바는 다양한 방법으로 서버를 구현할 수 있는 강력한 언어입니다. 자바 서버는 네트워크 통신을 위한 소켓 프로그래밍, HTTP 기반 서버 구현을 위한 HTTP 서버서블릿, Spring Boot와 같은 프레임워크를 통해 쉽게 개발할 수 있습니다.

  • 소켓 프로그래밍: 네트워크 통신 서버 구현.
  • HTTP 서버: HttpServer 클래스를 사용한 간단한 HTTP 서버.
  • 서블릿(Servlet): 웹 애플리케이션 서버 구현.
  • *Spring Boot
  • *: 빠르고 간편한 서버 개발 프레임워크.

이러한 도구를 통해 자바에서 강력하고 유연한 서버를 쉽게 개발할 수 있습니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com