자바로 was 만들어보기-1
이번 포스팅부터 2주간 교육에서 진행하였던 was를 처음부터 다시 만들어 보려고 한다. 이번 포스팅에는 서버를 띄우고 접속까지 구현을 해보려고 한다.
프로젝트 생성 및 설정
- gradle기반 java프로젝트를 생성해주면 된다.
dependencies(build.gradle)
dependencies {
//로깅을 위한 의존성
implementation 'ch.qos.logback:logback-classic:1.2.3'
//테스트를 위한 의존성
testImplementation 'org.junit.jupiter:junit-jupiter:5.5.1'
testImplementation 'org.assertj:assertj-core:3.12.2'
}
WebServer 생성
- 우선 Socket을 통한 웹서버를 실행시켜보려고 한다.
다음과 같이 WebServer클래스를 생성하였다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.ServerSocket;
public class WebServer {
private static final Logger logger = LoggerFactory.getLogger(WebServer.class);
private static final int DEFAULT_PORT = 8080;
public static void main(String args[]) throws Exception {
int port = DEFAULT_PORT;
// 서버소켓을 생성한다. 웹서버는 기본적으로 8080번 포트를 사용한다.
try (ServerSocket listenSocket = new ServerSocket(port)) {
logger.info("Web Application Server started {} port.", port);
}
}
}
이후 실행을 하면 다음과 같이 서버가 8080로 열렸음을 확인할 수 있다.
- 하지만 8080포트로 open 후 바로 종료되었다. 이를 위해 ServerSocket.accept()를 통해 접속 요청이 올때까지 대기하는 로직을 추가한다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class WebServer {
private static final Logger logger = LoggerFactory.getLogger(WebServer.class);
private static final int DEFAULT_PORT = 8080;
public static void main(String args[]) throws Exception {
int port = DEFAULT_PORT;
// 서버소켓을 생성한다. 웹서버는 기본적으로 8080번 포트를 사용한다.
try (ServerSocket listenSocket = new ServerSocket(port)) {
logger.info("Web Application Server started {} port.", port);
// listenSocket.accept()를 통해클라이언트가 연결될때까지 대기한다.
Socket connection;
while ((connection = listenSocket.accept()) != null) {
//연결이 되었으면 hello라는 로그를 찍는다
logger.debug("hello");
}
}
}
}
이렇게 하면 서버가 꺼지지 않고 요청이 올때까지 기다리게 된다
while()을 사용한 이유
while문을 사용하지 않으면 요청이 올때까지 기다리다가 한 번 요청이 오게되면 종료
가 되기 때문에 이를 방지하기 위해 반복문을 사용하였다.
- 이제 서버를 실행시키고 localhost:8080으로 접속하여 결과를 확인해 보자
실행 결과
위와 같이 localhost:8080으로 접속하였을 때 요청을 인식하고 hello를 출력하는 것을 확인할 수 있었다. 또한 서버의 응답이 없기 때문에 브라우저가 계속해서 로딩이 돌고 있는것을 확인할 수 있다.
이를 해결하기 위해 다음시간에는 response 응답을 받아 처리하는 과정을 설명하겠다.