171114-TIL

Reading time ~1 minute

오늘 한일

- 레벨 4 : HTTP 웹 서버 구현 실습

  • 요구사항 5 : 로그인 성공시 index.html로 실패시 login_failed.html로 이동, 로그인 결과에 따른 cookie에 logined=false/true 추가

  • 요구사항 6 : 로그인 상태일 경우에만 유저 목록을 페이지를 보여준다. 유저 목록을 StringBuilder를 이용하여 동적으로 html을 생성한 후 응답 한다.

  • 요구사항 7 : stylesheet 지원 하게 구현


오늘 느낀점

  • 일단 구현이 완료 되었다. 그런데 요구사항 4쯤 부터 찝찝했던 부분이 reponse 헤더 및 바디를 작성하고 dos.flush();를 하는 부분이였다. 뭔가 메소드로 빼서 작업할 수 있을거 같은데 302인 경우 200인 경우 if를 이용해서 처리했다. 그렇게 작업하다보니 선뜻 바꾸기 쉽지 않아졌는데 이번 요구사항들이 그렇게 어려운 작업이 아닌거 같아서 그냥 처음부터 다시 작업해 봐야겠다. 이번에도 구조를 고민하다 시간이 늘어질수도 있을거 같은데 기존 작업한것과 같은 구조가 나온다하더라도 조금이라도 개선해서 저녁엔 pr을 날리도록 해야겠다.

  • 오늘 작업에서 가장 재밌었던 부분 + 어떤식으로 처리할까 고민했던(아쉽게도 지저분해지는건 별수 없지만 그걸 떠나서도 처리가 깔끔하진 못했다) 부분이 요구사항 6의 StringBuilder를 사용한 동적인 html을 생성하는 부분이였다. 이유중 하나는 동적인 화면을 작성해본 첫 작업이 다른 사람들의 일반적인 js나 jsp, 서블릿이 아니라 화이트과정때 사용했던 handlebars였다. 특히나 그땐 이게 js로 만들어진건지도 몰랐으니 자바와 연동되서 작동하는 느낌이라 이번 작업이 뭔가 그때 기억이 나서 신기하고 재밌었던거 같다. js처럼 직접적으로 DOM조작이 쉽지 않아서 힘들겠지만 이전 핸들바에서처럼 html에 작성한다음 해당 키워드들을 이용해서 자바로 처리가 가능할 것 같다. 근데 DOM조작때문에 js를 사용하는것에 비해 엄청나게 비효율적인것 같다. 그래도 템플릿엔진들이 어떻게 돌아가는지 대략적으론 알게 된거 같아 재밌었다.
    (자바로 어떻게 구현할지 생각한 것들을 코드들을 쓰면서 좀 적어봤는데 해당 지킬의 마크다운 문법이 아톰에디터에서 보여주는 것보다 뭔가 더 엄격해서 블로그상에 제대로 표시가 안됐다. 그래서 구현 아이디어 부분을 그냥 다 지워 버렸는데 구현한다면 한마디로 노가다 작업이 예상된다)

  • 이번 과제를 구현하면서 ServletRequest 보관소와 비슷한 느낌으로 RequestHandler 클래스에 run()메소드의 지역변수로 Map을 하나 만들어서 header의 정보들을 및 response 헤더에 추가해야 할 내용들을 저장할 용도로 사용했다. 사실 클래스 필드로 둬도 될거 같은데 이걸 사용하는게 뭔가 편법인거 같은데다가 해당 클래스의 아무 메소드에서나 다 접근이 가능하다는게 찝찝해서 지역변수로 뒀다. 근데 run()이 어차피 해당 클래스의 생명주기와 같다보니 전역으로 둔것과 차이도 없는데다가 매개변수들이 너무 지저분해지는 것 같아서 어떻게 사용할지 혹은 사용을 하지 말아야할지 고민좀 해봐야겠다.

  • 이 블로그가 거의 TIL작성만 이루어지고 있는데 자료정리도 해야지 하면서 쉽지 않은거 같다. 그런면에서 CU나 다른 사람들이 참 대단한거 같다. 이번 주말엔 조금이라도 무언갈 올려봐야겠다.


내일 할일

  • HTTP 웹 서버 구현 재실습