본문 바로가기

전체 글

(119)
[Java] WAS 구현 - Request line 읽기시, 예상치 못한 EOF 반환값 이슈 HTTP/1.1 Request line 읽기시, 예상치못한 EOF 반환값 발생1. 발생한 문제의 경로 파악SocketInputStream이 주입된 BufferedReader의 readLine() 메서드로 HTTP/.1.1 요청 메세지의 첫줄인 request line을 읽었을때 null값이 발생했다.public HttpRequest(InputStream in) { try { BufferedReader br = new BufferedReader(new InputStreamReader(in)); String line = br.readLine(); if (line == null) { throw new IllegalStateException("Requ..
[Java] Stack concept and solving problem using the stack StackWhat is Stack?A stack data structure is much like an actual stack of plates. The last plate you put on top of plates. That's going to be the first one you removed.So the stack called LIFO(Last In First Out) data structure. So the stack called LIFO(Last In First Out) data structure. The stack is linear data structures in that add element then another element sequentially. It has flexible siz..
[Java] 6. HTTP 웹 서버 구현 - 중간 회고 다음 글은 1. HTTP 웹 서버 구현 - 클라이언트 요청과 처리부터 5. HTTP 웹서버 구현 - HTTP API 처리까지, '웹서버에 대해 잘 모르는 상태에서 HTTP 웹서버를 어떻게 개발했는지'와 '좋은 코드를 작성하기 위한 고민하고개선했는지' 회고를 해볼려고한다.개발해본적 없는 프로그램의 구현과 학습 과정1. 얄팍하게 파묻쳐 있는 개념의 인지나는 웹서버에 대해 잘 모르는 상태에서 구현함으로써, 시작부터 어려움이 꾀나 있었다. Spring 생태계도 김영한님의 스프링-입문-스프링부트 강의만 공부한 상태였다. 그래서 1. HTTP 웹 서버 구현 - 클라이언트 요청과 처리의 내용에서 볼수 있듯이, 최대한 간단하게 구현하고자 클라이언트 요청을 받고 "Hello Client!" 를 응답하는 기능부터 구현하..
[Java] 5. HTTP 웹서버 구현 - HTTP API 처리 3. HTTP 웹 서버 구현 - HTTP 요청 데이터 처리과 4. HTTP 웹서버 구현 - HTTP 응답 데이터 처리에서 HTTP의 요청 데이터를 처리하는 HttpRequest와 HTTP 응답 데이터를 처리하는 HttpResponse를 구현하였다.  이제 위의 그림에서 요청에 부합하는 HTTP API 처리 로직을 구현해야한다. 2. HTTP 웹서버 구현 - 요청에 대한 응답 처리와 책임 분리의 내용을 상기 시켜보면, 클라이언트의 요청에 부합하는 HTTP API를 처리하는 책임을 RequestHandler 클래스가 지게될것은 분명했었다. 따라서 요청에 부합하는 HTTP API를 처리하는 책임을 분리시킬필요가 있다.HTTP API란?HTTP API()는 Application 계층간의 프로그램에서 HTTP ..
[Java] 4. HTTP 웹서버 구현 - HTTP 응답 데이터 처리 2. HTTP 웹서버 구현 - 요청에 대한 응답 처리와 책임 분리에서 클라이언트의 요청 처리하는 객체의 책임을 분리를 다음과 같이 하였다. HTTP 요청 데이터 처리는 3. HTTP 웹 서버 구현 - HTTP 요청 데이터 처리에서 작성하였고, 다음으로 HTTP 응답 데이터를 처리를 담당하는 HttpResponse 객체를 구현할려고한다.HTTP 응답 데이터 생성HTTP 응답 메세지의 데이터를 어떻게 만들것인가?HTTP 응답 메세지는 다음과 같은 포맷이다.  HTTP 응답 메세지는 크게 Status Line, Response Headers, Response Message Body 구조로 분리할수 있으며, 각 구조의 여러 요소들이 존재한다. 그러므로 다음 3가지 구조를 객체로 다루어서 HTTP 응답 데이터를 ..
[Java] 3. HTTP 웹 서버 구현 - HTTP 요청 데이터 처리 2. HTTP 웹서버 구현 - 요청에 대한 응답 처리와 책임 분리에서 클라이언트의 요청 처리하는 객체의 여러 책임에 대한 분리를 다음과 같이 하였다. 이번에는 그중에서 HTTP 요청 데이터를 처리를 담당하는 HttpRequest 객체를 작성할려고한다.  아래의 코드들은 지속적인 리펙토링과 테스트를 통해서 구현된것이다. 모든 과정을 적기에는 글의 내용이 너무나 길어져, 지금까지 가장 잘 정리된 코드를 기재하였다.HTTP 요청 데이터 파싱HTTP 요청 메세지에서 데이터를 어떻게 추출할것인가?HTTP 요청 메세지는 다음과 같은 포맷이다.  HTTP 요청 메세지는 크게 Request Line, Request Headers, Request Message Body 구조로 분리할수 있으며, 각 구조의 여러 요소들이 ..
[Java] 2. HTTP 웹서버 구현 - 요청에 대한 응답 처리와 책임 분리 1. HTTP 웹 서버 구현 - 클라이언트 요청과 처리에서 아주 간단히 클라이언트의 요청이 왔을때, 어떠한 요청인지 해석하지 않고 응답만 주도록 구현해보았다. 이번에는 HTTP 요청을 읽어서 해석하여 응답을 주도록 구현해볼려고한다.클라이언트의 간단한 GET 요청 처리 구현이전에 작성한 클라이언트의 요청을 처리하는 역할을 하는 RequestHandler 클래스에다가, 이어서index.html 리소스에 대한 GET 요청을 수행하도록 구현하였더니 다음과 같은 코드가 작성되었다. 한눈에 봐도 좋지 않은 코드라는 생각이 든다.import org.hello_webserver.webserver;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io..
[Java] 1. HTTP 웹 서버 구현 - 클라이언트 요청 처리 난 이전에 잠시나마 병특으로 시스템 엔진니어로 일하면서 Apache, Nginx, Tomcat를 설치하곤 했다. 이때는 설치 위주의 업무이기 때문에 소스코드을 들여다 볼일이 없었다. 그렇기에 소프트웨어 엔진니어 관점이 아니며 동작원리를 모른채로 물에 붕뜬 느낌이 많이 들었다. 소스코드 수준에서 알아야 비로써 이해가 되기때문에 직접 웹서버를 구현해볼려고한다. HTTP를 지원하는 간단한 웹서버를 단계적으로 발전시켜나갈 생각이다. 이 글에서는 HTTP 웹서버 구현 중 클라이언트의 요청을 처리하는 기능만 구현해볼것이다. HTTP 웹 서버 구현 사항 및 주요 기술HTTP 웹 서버 구현할 사항Java로 HTTP 웹서버 구현클라이언트 요청에 대해 "Hello Client!" 를 응답웹서버 동작에 대한 간단 로깅HTT..