[java] 자바 소켓 프로그래밍을 통한 요청-응답 서버 개발
이번 블로그에서는 자바 소켓 프로그래밍을 사용하여 요청-응답 서버를 개발하는 방법을 알아보겠습니다. 소켓 프로그래밍은 클라이언트와 서버 사이에 통신을 가능하게 하는 기술로, 네트워크 애플리케이션을 개발하는 데 매우 중요합니다.
개발 환경 설정
먼저, 자바 소켓 프로그래밍을 위해 개발 환경을 설정해야 합니다. 아래의 단계를 따라 진행해보세요.
- JDK 설치: Oracle 사이트에서 JDK(Java Development Kit)를 다운로드하여 설치합니다.
- IDE 설치: 자바 개발에 편리한 IDE(Integrated Development Environment)를 설치합니다. 예를 들어, Eclipse, IntelliJ IDEA, 혹은 NetBeans 등을 사용할 수 있습니다.
- 프로젝트 생성: IDE에서 새로운 자바 프로젝트를 생성합니다.
요청-응답 서버 개발하기
이제, 소켓 프로그래밍을 사용하여 요청-응답 서버를 개발해보겠습니다.
- 서버 소켓 생성: 서버 소켓을 생성하고 특정 포트에 바인딩합니다.
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();
}
}
}
- 요청 처리하기: 클라이언트의 요청을 처리하는 별도의 스레드를 생성하여 요청을 응답합니다.
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
클래스는 클라이언트의 요청을 받아 처리하고 응답을 반환하는 작업을 수행합니다.
서버 실행 및 테스트
서버를 실행하여 정상적으로 동작하는지 테스트해보겠습니다.
- IDE에서
Server
클래스를 실행합니다. - 클라이언트 애플리케이션(브라우저, REST 클라이언트 등)을 사용하여
http://localhost:8080
으로 요청을 보냅니다. - 서버가 클라이언트의 요청을 처리하고
Hello, client!
라는 응답을 받아오면 성공적으로 동작한 것입니다.
마치며
자바 소켓 프로그래밍을 통해 요청-응답 서버를 개발하는 방법을 알아보았습니다. 이를 통해 네트워크 애플리케이션을 개발하는 데 도움이 되었기를 바랍니다.
참고자료: