Java Server
자바 서버 (Java Server)
자바는 다양한 방식으로 서버를 구현할 수 있는 강력한 언어입니다. 자바 서버는 주로 웹 서버나 애플리케이션 서버를 의미하며, 클라이언트로부터 요청을 받아 처리하고, 그 결과를 다시 클라이언트에게 반환하는 역할을 합니다. 자바 서버 구현은 HTTP 서버부터 소켓 서버, 서블릿을 이용한 웹 애플리케이션 서버까지 다양한 방법으로 가능합니다.
1. 자바에서 서버 구현 방법
자바로 서버를 구현하는 방법은 여러 가지가 있으며, 주로 다음과 같은 방법들이 많이 사용됩니다.
- 소켓 프로그래밍을 이용한 서버 구현
- HTTP 서버를 직접 구현
- *서블릿(Servlet)**을 이용한 웹 애플리케이션 서버
- 스프링(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: 서버에 연결하고, 메시지를 전송합니다.
실행 방법:
- 서버를 먼저 실행한 후, 클라이언트를 실행합니다.
- 클라이언트에서 메시지를 보내면 서버가 메시지를 수신하고 출력합니다.
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!" 응답을 보냅니다.
실행 방법:
- 코드를 실행하면 서버가 포트 8080에서 실행됩니다.
- 브라우저에서
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!" 메시지를 출력합니다.
서블릿 실행 방법:
- Apache Tomcat 서버에 이 서블릿을 배포합니다.
- 브라우저에서
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!" 메시지를 확인할 수 있습니다.
실행 방법:
- Spring Boot 프로젝트를 생성하고, 코드를 작성한 후 실행합니다.
- *
localhost:8080/hello
*로 접속하여 결과를 확인합니다.
요약
자바는 다양한 방법으로 서버를 구현할 수 있는 강력한 언어입니다. 자바 서버는 네트워크 통신을 위한 소켓 프로그래밍, HTTP 기반 서버 구현을 위한 HTTP 서버와 서블릿, Spring Boot와 같은 프레임워크를 통해 쉽게 개발할 수 있습니다.
- 소켓 프로그래밍: 네트워크 통신 서버 구현.
- HTTP 서버:
HttpServer
클래스를 사용한 간단한 HTTP 서버. - 서블릿(Servlet): 웹 애플리케이션 서버 구현.
- *Spring Boot
- *: 빠르고 간편한 서버 개발 프레임워크.
이러한 도구를 통해 자바에서 강력하고 유연한 서버를 쉽게 개발할 수 있습니다.