Skip to content
 
 

Latest commit

 

History

41 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

웹 애플리케이션 서버

진행 방법

  • 웹 애플리케이션 서버 요구사항을 파악한다.
  • 요구사항에 대한 구현을 완료한 후 자신의 github 아이디에 해당하는 브랜치에 Pull Request(이하 PR)를 통해 코드 리뷰 요청을 한다.
  • 다음 단계를 도전하고 앞의 과정을 반복한다.
  • 코드 리뷰가 완료되면 피드백에 대한 개선 작업을 한다.
  • 다음 단계 PR 보낼 때 이전 단계 피드백이 잘 반영되었는지 점검한다.

온라인 코드 리뷰 과정

새롭게 알게 된 내용

  • 홈페이지를 띄우면 request 알림이 온다는 사실을 알 수 있었다.
  • header 내용에 해당하는 GET /index.html HTTP/1.1은 정해진 HTTP 규격에 따라 html 파일을 전해달라는 뜻임을 알 수 있었다.

1단계 구현 중 학습하게 된 내용 또는 용어 정리

  • inputStream은 네트워크로부터 얻어온 byte단위 숫자이다.
  • inputStreamReader가 이것을 읽고 문자열로 번역하는 작업을 수행한다.
  • BufferedReader가 문자열을 하나씩 꺼내서 읽을 수 있도록 번역한 문자열을 모아놓는 작업을 수행한다.
  • log.debug를 통해 읽어낸 stream을 한줄씩 출력한다. 이때 header에는 필요한 파일을 가져다달라는 문구가 출력된다.
  • 필요한 파일을 가져다주기 위해 토큰을 공백 단위로 분리해내는 작업을 수행한다.
  • 그 후 Files.readAllBytes를 이용하여 .webapp에 있는 파일으로부터 byte를 읽어와 저장한다. 이때 url은 이미 읽어온 요구하는 파일을 바탕으로 반영한다.
  • 이후 실제 바이트 파일을 화면에 출력한다.
  • Paths.get(url).normalized().toString()을 통해 ./나 ../같은 경로 이동 흔적을 제외하고 필요한 경로만 찾아낼 수 있다.

2단계 구현 중 학습하게 된 내용 또는 용어 정리

  • extractPath에서 반환한 String을 ? 기준으로 앞과 뒤를 구분하여 경로와 사용자 정보로 구분한다.
  • 사용자 정보는 & 기준으로 객체 인스턴스로 구분이 가능하다.
  • =을 기준으로 객체의 이름과 값을 구분한다.
  • 받아온 HashMap에서 객체 이름을 기준으로 value 값을 받아와 객체를 생성한다.
  • Paths.normalized()에 ?가 들어가면 오류를 뿜으며 강제 종료된다.
  • 따라서 extractPath에서 정규화를 하는 것이 아닌 ?가 있는지 없는지 판단한 후 ?가 있는 부분을 제거하고 정규화를 진행해야 한다.
  • URLDecoder.decode(value, "UTF-8")를 통해 메시지가 한글이나 특수문자가 와도 해독할 수 있다.

3단계 구현 중 학습하게 된 내용 또는 용어 정리

  • HTTP의 POST 메소드는 GET 메소드와 다르게 링크로 중요한 정보가 노출되는 것이 아닌 response 이후에 따로 정보가 저장된다는 사실을 알 수 있었다.
  • Content-Length에 HTTP body의 크기가 저장되는데 Content-Length으로 문자열이 시작할 경우 해당 정보를 extractLength 메소드를 통해 받아온다.
  • Header의 내용을 readLine()이 읽어오는데 HTTP body는 Header 내용 이후 한줄 띄고 시작하기에 Header 내용을 모두 불러오면 line.isEmpty()에 걸려 Header를 읽는 로직이 끝난다.
  • 이후 readData()를 통해 body 내용을 읽어온다.
  • /user/create일 경우에만 회원가입을 후 리다이렉션을 진행하므로 리다이렉션 전용 응답인 302번을, 그렇지 않으면 200번을 응답으로 보낸다.
  • Location: /index.html으로 redirection 위치를 지정하여 자동으로 이동하게 구현한다.

About

웹 애플리케이션 서버를 구현하는 실습

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages