자바로 was 만들어보기-1

1 minute read

이번 포스팅부터 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로 열렸음을 확인할 수 있다.

connect

  • 하지만 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으로 접속하여 결과를 확인해 보자

실행 결과

connect

위와 같이 localhost:8080으로 접속하였을 때 요청을 인식하고 hello를 출력하는 것을 확인할 수 있었다. 또한 서버의 응답이 없기 때문에 브라우저가 계속해서 로딩이 돌고 있는것을 확인할 수 있다.

이를 해결하기 위해 다음시간에는 response 응답을 받아 처리하는 과정을 설명하겠다.