1. 우테코 Tomcat 만들기 미션 [Step1. HTTP 서버 구현하기]를 완성했다.
우테코에서는 레벨4동안 스프링 직접 만들어보기 시리즈를 진행한다고 한다!
그 중 첫번째 미션은 직접 Tomcat 만들기!!
두둥~~ 말로만 듣던 servlet container를 직접 만들어본다!
큰 구조는 다음과 같다. (Http11Processor)
1. InputStream으로 input을 byte로 읽고, InputStreamReader로 byte를 문자로 읽는다. 최종적으로 BufferedReader을 사용한다.
2. BufferedReader로 input을 쫙 읽어서 HttpRequest로 만든다.
3. Handler들을 Map형태로 관리하는 HandlerFinder를 통해 해당 request를 처리할 수 있는 Handler를 찾아온다.
4. 해당 handler에 request를 넘기면, handler가 요청에 따라 작업 후 적절한 HttpResponse를 반환한다.
5. response를 byte로 바꿔서 outputStream에 보낸다.
1단계의 요구사항은 다음과 같았다.
1) GET /index.html 응답하기
resources 디렉토리에서 index.html을 찾아와야하는데, 계속 못 찾아서 삽질을 좀 했다..ㅋㅋ
알고보니 파일 경로가 resources/static/index.html였다! 그래서 getClassLoader().getResource()로 찾을 때 static을 앞에 붙여줘야 했다. 이런~
2) CSS 지원하기
response의 Content-Type을 잘 지정해줘야한다.
Content-Length는 byte기준 길이이다.
3) Query String 파싱하기
2. 우테코 Tomcat 만들기 미션 [Step2. 로그인 구현하기]를 일부 진행했다.
2단계의 요구사항 4가지 중 오늘은 2가지를 완성했다.
1) 로그인 여부에 따라 다른 페이지로 redirect
Location에 redirect할 uri를 적어준다.
HTTP 상태 코드가 300대인 경우, 브라우저와 같은 HTTP 클라이언트는 일반적으로 서버가 응답에 포함시킨 "Location" 헤더의 URI 정보를 자동으로 읽고 해당 URI로 리다이렉트를 수행합니다. 이것이 HTTP 리다이렉션의 일반적인 작동 방식입니다.
2) POST 방식으로 회원가입
예전에 글로 정리했던 내용! (Spring MVC(2) Request Handler)
HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법에는 크게 3가지가 있다.
1. GET - 쿼리 파라미터
- /url?username=hello&age=20
- 메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달
- 예) 검색, 필터, 페이징등에서 많이 사용하는 방식
2. POST - HTML Form
- content-type: application/x-www-form-urlencoded
- 메시지 바디에 쿼리 파리미터 형식으로 전달 username=hello&age=20
- 예) 회원 가입, 상품 주문, HTML Form 사용
3. HTTP message body에 데이터를 직접 담아서 요청
- HTTP API에서 주로 사용, JSON, XML, TEXT
- 데이터 형식은 주로 JSON 사용
- POST, PUT, PATCH
HTML Form을
- Get으로 전송할 경우, URL뒤에 쿼리 파라미터 형식으로 전달된다.
- Post으로 전송할 경우, HTTP Message Body에 쿼리 파라미터 형식으로 전달된다.
감정회고
간만에 미션..! 매우 설레는 마음으로 시작했는데 생각보다 빡세서 허덕였다..😵
초반에 전체적인 틀(ex. HttpRequest, HandlerFinder, HttpResponse) 잡고 만드는 과정이 오래 걸린 것 같다.
그래도 어느 정도 틀이 잡혀서 그런가 뒷부분으로 갈수록 속도가 좀 붙는듯?!
내일 2-3,2-4 마무리해서 후딱 PR날려야겠다. 화이팅~~