text/Java
http API server (w/o spring)
hoonzii
2024. 9. 28. 11:25
반응형
지난번에 이어 과제테스트에 대한 짤막한 구현을 작성해보고자 한다.
저번 게시글에서는 springboot로 간단하게 api를 구현했는데
이번엔 좀 당황스러운 경우를 만나 해당 케이스에 대해 적어본다….
요즘 회사들중 면접 시 과제테스트를 실시하는 회사들에 대비해서 P사에서
모의로 테스트 볼수 있게 만들어 놨다.
vscode server를 통해 과제 내용을 구현하게 되는데
과제테스트를 봐본적 없는 나로서는 해당 환경이 처음이었다.
intellij 혹은 eclipse가 없고, 게다가 spring 환경을 처음부터 구성해야하는게 당황스러웠다.
모의테스트였지만 30분의 시간제한이 있었고
우왕좌왕 구성하느라 대부분의 시간을 써버리고 말았다. 물론 과제사항에 대해 구현하지 못했다.
그래서 이럴땐 어떻게 해야 하나 찾아보면서 작성해 본다.
아주 간단한 http api 서버를 구성하려면 어떻게 해야 할까?
java의 HttpServer를 사용하면 된다.
import java.net.InetSocketAddress;
import com.sun.net.httpserver.HttpServer;
public static void main(String[] args) {
int port = 5678;
InetSocketAddress address = new InetSocketAddress(port);
HttpServer httpServer = HttpServer.create(address, 0);
httpServer.start();
}
위와 같이 구성시 실행하면 서버가 뜬다. 대신 요청 시 처리할 handler가 없기에 404가 뜬다.
GET 요청은 아래와 같이 간단히 만들 수 있다.
// customHandler를 구현하는 경우
httpServer.createContext("/", customHandler);
//or
//내부에 바로 구성하려면
httpServer.createContext("/", (exchange) -> {
// HttpExchange 객체를 받는 람다를 구성
//...
});
HttpHandler를 상속하는 클래스를 구현해서 HttpExchange 값을 받아 처리하게끔 구현하면 된다.
(키워드만 알면 이렇게 쉽게 구현할 수 있는데…spring만 아는 바보…)
“/” 경로로 요청하면 단순하게 “Hello”를 보내주는 api를 구성해 보면 아래와 같다.
httpServer.createContext("/", (exchange) -> {
String sendData = "Hello";
byte[] bytes = sendData.getBytes();
exchange.sendResponseHeaders(200, bytes.length);
OutputStream outputStream = exchange.getResponseBody();
outputStream.write(bytes);
outputStream.flush();
});
전체 코드는 아래
참고 링크
반응형