-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[케이] Step 3: HTTP 웹서버 구현 #3
Open
leekm0310
wants to merge
35
commits into
Next-Squad:leekm0310
Choose a base branch
from
leekm0310:leekm0310
base: leekm0310
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- BufferedReader 생성하고 readLine 메소드 사용해서 한줄씩 읽도록 했다.
- LineParser 클래스의 parseLine 메소드를 생성해 line에서 url을 추출할 수 있도록 했다.
- url에 해당하는 파일을 가져와 byte배열로 변환.
[3.4.3.1] 요구사항1 - index.html 응답하기 완료
- 책에 있는 힌트를 보고 진행했다. 기존에 구현되어 있는 parseQueryString메소드를 사용하니 수월했다.
[3.4.3.2] 요구사항 2: GET 방식으로 회원가입하기 완료
- LineParser 클래스는 따로 필요가 없는 것 같아서 삭제하고 안에 있던 메소드는 RequestHandler로 이동시켰다.
요구사항 3: POST 방식으로 회원가입하기
- 처음에는 유저를 저장한 후에 else 부분을 복붙하니 index.html로 화면이 전환되었으나 주소부분이 바뀌지 않았다. 책의 힌트처럼 http 302 문서를 읽고 구현완료.
요구사항 4: 302 status code 적용
- 반복되는 부분을 response 메소드로 분리함 - 힌트 보고 진행함
요구사항 5: 로그인하기
- 이를 위해 로그인 실패시 'logined=false'를 쿠키값으로 갖도록 수정. - 'logined=true'일 때 /user/list.html로 이동할 수 있도록 기능 구현
- StringBuilder를 사용해서 유저 목록을 테이블로 출력함
요구사항 6 : 사용자 목록 출력
LGTM 이요오.. |
- 헤더에 "Accept: text/css"가 포함되어 있는경우 responseCss 메소드-> responseCss200Header를 응답하게 된다.
- 유저 생성시에 URLdecoder의 decode를 사용해서 한글로 변환후 저장하도록 했다.
요구사항 7: CSS 적용하기
ku-kim
approved these changes
Jul 31, 2022
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM! 👍
byte[] body = "Hello World".getBytes(); | ||
response200Header(dos, body.length); | ||
responseBody(dos, body); | ||
// 3.4.3.1 1단계: 사용자 요청에 대한 처리는 이 곳에 구현하면 된다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
온라인 세션에서도 이야기했었지만
step 3에 맞게 큰 구조 없이 기능에 우선하여 구현한 것 넘 좋네요..
step 5 리팩토링도 기대해요 ㅎㅎ 화이팅!!
- GET일 때 읽어오는 로직 작성 - header 값을 제외하고 다른 값을 잘 가져오고 있음. 로그로 확인했을 때는 잘 들어오나 마지막에 NPE가 터져서 테스트 오류발생. - TODO: POST도 읽어올 수 있도록 로직 작성 및 수정 필요함
- 테스트 통과 - 아직도 HttpRequestTest.request_GET 테스트에서 NPE가 터져서 테스트 오류발생.(HttpRequest의 while문에서 발생.)
- Http_GET.txt 파일에 한 줄 더 추가함. - br.readline()은 캐리지 리턴을 포함해 한 줄을 전부 읽어오는데 마지막줄에서 끝나버리니 null이 발생. 한줄을 추가해서 line이 빈 줄이라는 것을 확인하고 while문을 탈출하면 npe가 발생하지 않는다.
[5장] 리팩토링 1단계: 요청 데이터를 처리하는 로직을 별도의 클래스로 분리한다
- 넥스트스텝에서 제공해주는 HttpResponseTest 작성
- HttpResponse 클래스를 생성하고 테스트코드에서 힌트를 얻어 필요한 메서드들을 생성 - RequestHandler에서 response 관련 분리하여 메서드 생성
- RequestHandler에 있던 response 관련 로직 삭제하고 HttpResponse 사용하도록 수정 - httpResponse의 기존 메서드로는 유저리스트를 보여줄 수 없어 httpResponse에 forwardBody라는 메서드 추가.
- HttpResponse.responseBody에서 마지막에 캐리지리턴을 빼먹어서 해당부분 추가함 - "Content-length"를 "Content-Length"로 수정 - .js 파일 읽을 수 있도록 헤더에 해당 부분 추가 로직 구현
- GET 방식이지만 Parameter를 받지 않는 경우에 대응하기 위해 코드 수정
- RequestHandler에 있던 request 관련 로직 삭제 하고 HttpRequest 사용하도록 수정 - 로그인 여부 체크하기 위해 isLogined 메서드 생성
[5장] 리팩토링 2단계: 응답 데이터를 처리하는 로직을 별도의 클래스로 분리한다
- 웹서버 실행 중에 socket closed 에러가 발생했는데 try안에 in을 받아서였다. 해당 부분 수정하니 에러 해결.
- 들어오는 요청에 따라 알맞은 컨트롤러를 탈 수 있도록 RequestMapping 클래스를 생성함
- 공통된 부분을 추출해 컨트롤러 인터페이스를 작성하고 해당 인터페이스를 구현하는 추상 클래스를 생성
- 유저 생성 컨트롤러, 유저 리스트 컨트롤러, 로그인 컨트롤러 생성
- 앞에서 생성한 컨트롤러를 요청에 따라 탈 수 있도록 RequestHandler 수정
[5장] 리팩토링 3단계: 다형성을 활용해 클라이언트 요청 URL에 대한 분기 처리를 제거한다.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
작업목록
참고사항
요구사항 6
의 사용자 목록은 출력하였으나 한글 깨짐 현상이 있습니다. -> 해결완료(2022/07/25)