오늘 한일

- 레벨 4 : HTTP 웹 서버 구현 pr 보냄


오늘 느낀점

  • 구현을 하면서 try-catch 문에서

    try (InputStream in = connection.getInputStream(); OutputStream out = connection.getOutputStream())  
    

    위와 같이 try에 파라미터로 넣으면 뭐가 다르길래 그러나 궁금했었다. 그러다 오늘 작업하면서 한번 찾아봤다. 보니까 자바7에서 추가된 “자동 리소스 닫기”라고 한다.(The try-with-resources Statement)
    이전 같으면 꼭 닫아줘야 할 리소스가 있는 경우 finally에 close() 메소드를 작성하여 항상 닫게 구현을 했다면 이제는 try()에 파라미터로 넣어주면 close()를 호출 하지 않아도 자동으로 닫아 준다. 단 해당 리소스 객체가 java.lang.AutoCloseable 인터페이스를 구현하고 있어야 한다. 이전에도 봤던지 배웠던거 같은데..만약 맞다면 사용가능한 경우엔 finally보다 유용할것 같으니 이번엔 안 까먹도록 하자.

  • pr을 보내고 codacy Issues를 해결하는 중이다. 그런데 codacy 결과가 나오는게 너무 느린거 같다. 좀 굵직한 실수(혹은 잘못)을 고칠때는 스스로 조심해야겠다는 생각이 들어서 안그런데, 조금은 이해가 안가는 경우(괜찮을것 같은데 Issues 처리된 변수이름과 공백)가 두세번 통과 못하면 신경쓰인다.

  • 새벽 두시전엔 의식적으로 눕는 버릇을 들이도록 해야겠다.


내일 할일

  • codacy 통과

  • pr 보낸것에 대한 피드백

오늘 한일

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

  • 다시 실습 하는 과정에서 POST방식의 body를 받아오는 부분까지 다시 완성

오늘 느낀점

  • header부분은 문자열로 처리가 가능한데 어제 다 해봤으니 안보고 하다가 기초적인 실수를 했다. body부분도 아무생각 없이 문자열 형태라고 생각하고 작업하다가 지나치게 시간을 많이 잡아 먹었다. 거기다 오늘 아침에 친구한테 연락와서 저녁에 약속이 생겨 일찍 가야된다는 생각이 드니까 집중이 안되서 오늘은 작업을 거의 못했다.

  • 사실 지금 작업하고 있는걸 아래 코드가 처리되는 과정처럼(일단 내가 느끼기에) 되게 할려고,

    @GetMapping("/user/create")
    public String createUser(String id, String password, String name, String email){
      User user = new User(id, password, name, email);
      return "redirect:/index.html";
    }
    
    1. post인지 get인지 파악

    2. url 파악

    3. 파라미터 받기

    4. 로직 처리

    5. 리스폰스 전송

    이런식으로 하려고 하고 있는데 조금 욕심인거 같기도 하고 그게 현재 제공된 조건에선 안좋게 짜고 있는건가 같아서 고민이 된다. 가장 큰 이유는 너무 지저분하게 짜지는거 같아서 그런거 같다. 그냥 url을 먼저 파악하고 해당 url에 따라 어떻게 처리할지야 정해져있으니 그렇게 처리하게 구현할까 싶다.

  • 오늘 뭔가 많은 일이 있었다. 지진, 수능 연기, 그리고 박사과정까지 진행중인 친구가 결국 취업문제로 공무원 공부를 시작하게 되었다. 친구도 대학원 진학 전엔 해당 분야의 전망때문에 고민이 많았지만 그쪽 공부욕심에 들어갔던건데..현재 좋아하는 분야를 공부하고 있는 입장이라 더 여러가지 생각이 들게 되는것 같다. 인생에서 어느정도 중요한걸 선택할때 결과가 어떻게 될지는 정말 모르는거 같다. 그래서 무언갈 선택 할때 이걸 안하면 두고두고 “그때 그랬어야했는데…” 하고 미련이 남을 것 같은 걸 선택 한다. 사람은 보통 안해본걸 가장 후회하니까 말이다. 그래서 작년에 컴퓨터 공부를 시작한 것, 상반기에 취직한 회사를 안간 것을 후회해본 적은 없는것 같다. 하긴 친구도 앞으로를 걱정하지 그때 자신이 대학원 간걸 후회하고 있진 않았다. 나나 친구나 앞으로 무얼 할지 정했으니 지금은 노력을 할때인거 같다.

  • 아 그리고 아까 브라이언이 문지기를 사용할때 뿌듯하지 않냐고 했는데 현재로선 의외로 아무 생각이 없는거 같다. 제작할땐 재밌었고, 부착한 후 3~4일까진 나름 뿌듯했는데 그 이후론 무덤덤해진거 같다. 자사 서비스를 개발하는 곳을 가고 싶었던 이유가 내가 만들걸 남들이 쓰는걸 보면 뿌듯하고 재밌을거 같아서였는데 문득 나중에 과연 내가 어떨지 궁금해 졌다.(그래서 큰회사를 가보고 싶은 욕심엔 돈도 돈이지만 더 많은 사람들이 해당 회사의 서비스를 이용한다는 점에서 메리트가 있었다) 경험이 없는 것들은 알수가 없는거 같다. 그러니 그런건 차후에 알아서 알게 될테니 고민은 안한다. 아니면 문지기가 현재는 내손을 떠나서 그런가 싶기도 하다. 사실 욕심같아서는 라즈베리파이 한개 더 달아서 간단한 얼굴인식도 추가해 보고 싶긴 하다.


내일 할일

  • HTTP 웹 서버 구현 재실습

오늘 한일

- 레벨 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 웹 서버 구현 재실습

오늘 한일

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

  • 요구사항 1 : 요청 URL에 따른 페이지 제공
  • 요구사항 2 : GET 메소드에 따른 URL 파싱 및 데이터 저장(회원 가입, 유저 저장)
  • 요구사항 3 : GET 메소드에서 POST로 변경
  • 요구사항 4 : 회원 가입 이후 302 code를 이용하여 redirect형태로 index.html 이동
  • 새로 알게된 내용

    Favicon

    파비콘은 웹페이지에 접속했을때, 상단 탭에 보여지는 아이콘을 일컫는다. 이 아이콘은 즐겨찾기에 웹페이지를 등록할때도 사용된다. 웹사이트를 대표하는 로고(logo)의 개념과 비슷하며, 사이트의 성격을 드러내기도 한다. (출처)


오늘 느낀점

  • 이전에 HTTP에 대해서 간단히 공부하면서 Request, Response Header에 어떠한 것들이 포함되는지는 알고 있었지만 이번에 직접 해당 Header 정보를 가지고 데이터 처리를 한 덕에 이전까지는 어줍잖은 키워드들만 머리에 가지고 있었다면, 어떠한 요소들로 구성되어 있으며 어떻게 활용하는지 와닿게 되었다.

  • 조금은 남들과 다른게 무언갈 만들어가는 것보단 내가 사용하는 것이 어떤 원리로 돌아가는지 공부하는게 재밌는거 같다.”아! 이렇게 되는거였구나” 같은 재미가 있다.(단, 내가 이해가 간다는 전제조건과 해당 원리에 호기심이 가는건 제멋대로지만..)이전 스프링부트에서 @GetMapping(“/~”), @PostMapping(“/~”) 및 파라미터를 받는 것들이 애노테이션을 사용하는 등 좀 다른 방식이긴 하겠지만 HTTP를 이런식으로 사용한다는 방식에선 같을거 같은데 Get, Post로 매핑 및 파라미터의 이름을 input박스의 name과 맞추던, 당연히 아무 생각 없이 사용하던 것들이 추가적인 작업이 있겠지만 이런식으로 돌아간 다는 점에서 신기하고 재밌는거 같다. 덤으로 로우한걸 좋아한다기 보단 관심이 가는 것의 원리를 공부하는게 재밌는거 같다.(그래서 그게 그거인 경우도 있지만) 솔직히 요즘 흥미가 떨어졌는데 다시 붙는다.

  • 파비콘! 이전까지 브라우저 탭에 뜨는 아이콘들을 단순히 로고쯤으로 생각했고 그냥 해당 사이트를 나타내는 이미지라고만 생각 했는데 오늘 HTTP를 구현하다가 자꾸 request가 두번씩 오길래 뭔가 싶어서 읽어보다보니까 “GET /favicon.ico HTTP/1.1”을 보게 되었다. 그덕에 이전까지 로고라고 생각했던게 뭔지 알게 되었고 어떻게 불려오는지 알게 되었다. 나중에 마음에 드는 이미지가 있으면 해당 이미지로 바꿔봐야겠다.

  • 좀 더 작업하고 싶었는데 4~5시쯤부터 마우스 상태가 안좋더니 8시부터 건전지가 다 달아서 작동이 안됐다. 터치패드로 해도 되긴한데 맥북의 터치를 경험하고 나니 도저히 할맛이 안났다. 자꾸 오클릭도 일어나고 급 작업의 흥이 깨져서 관뒀는데 아쉽다.

  • 프레임워크와 라이브러리의 차이점이 뭔지 체감이 크게 안됐는데(글로 봐도 크게 와닿지 않았다) 오늘 느낀것 중 하나가 라이브러리는 단순히 함수(C라면)들을 제공해주는데 프레임워크는 단순히 함수들을 제공해주는게 아니라 많은걸 미리 만들어서 제공해주는 거 같다. 아직은 말로 표현할 정도는 아닌거 같다. 굳이 따지면 오늘 내가 하고 있는게 라이브러리들을 사용하는거고 이를 이용하여 어느정도 자동화(?)를 이루게 하면 프레임워크가 될것 같은 느낌이랄까?? 그러고보니 지금 내가 하고 있는 작업들이 나만의 라이브러리를 만드는 거였던가 프레임워크를 만드는 거였던가?? 물어봐야겠다.


내일 할일

  • HTTP 웹 서버 구현 실습 pr을 보내도록 하자

11일 토요일

- 친구가 진행한 커피 강의

  • 여러 종류의 커피를 놓고 마시면 차이는 알겠고 내 선호도가 있긴한데 역시나 커피 자체는 잘 모르겠다.

  • 그리고 저녁에 놀았다. 카페에서 제공된 커피도 그렇고 오랜만에 하루종일 많이 먹은거 같다.


12일 일요일

- 휴식

  • 한주 내내 잠을 4~7시간 잤었는데 뭔가 피곤함이 쌓여 있었던거 같다. 낮엔 잠을 잘 안자는 편인데 저번주도 그렇고 이주 연속 하루종일 뻗어 있었더니 신경이 쓰인다. 그래도 걱정을 해봤자 도움은 안되니 푹 쉰만큼 다시 힘내자!

내일 할일

  • 레벨 4 시작(아마도)