Skip to content
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

[카프카] 3단계 - HTTP 웹 서버 구현 미션 제출합니다. #211

Open
wants to merge 48 commits into
base: include42
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
1b171c1
feat: RequestUtils 구현
include42 Sep 9, 2020
38cfed3
feat: index.html로 연결되도록 구현
include42 Sep 9, 2020
4b53bba
feat: 잘못된 파일 경로 전달 시 예외 발생 구현
include42 Sep 10, 2020
222d346
feat: RequestUtils의 로직 수정 및 css 로딩 이슈 해결
include42 Sep 10, 2020
5981f28
feat: HttpRequest 클래스 구현, 기존 로직 일부 대체
include42 Sep 10, 2020
39ceaca
test: HttpRequest에 대한 테스트 코드 보강
include42 Sep 10, 2020
b482e0c
docs: README.md 작성
include42 Sep 14, 2020
32123e9
feat: HttpRequest의 요청 타겟을 별도 클래스로 분리
include42 Sep 14, 2020
5e41cd5
feat: 회원가입 로직 구현
include42 Sep 14, 2020
5008551
feat: RequestUtils 삭제, RequestPath에 대한 테스트 구현
include42 Sep 15, 2020
89a17cd
feat: Parameters에 대한 연산을 ParameterMapper에 담고, 이를 상속하여 RequestPath를 구현…
include42 Sep 15, 2020
0248195
feat: ParameterMapper에 대한 테스트 코드 구현, RequestBody 구현
include42 Sep 15, 2020
7e27832
feat: URI 처리를 위한 URIUtils 구현, TEST 작성
include42 Sep 15, 2020
c09d181
feat: 회원가입을 POST로 변경, body가 없는 경우 대응
include42 Sep 15, 2020
3d60b03
feat: 회원가입 완료시 302를 response로 반환, index로 리다이렉트 구현
include42 Sep 16, 2020
5388102
refactor: HttpRequest의 헤더 생성 로직 수정
include42 Sep 16, 2020
6711ba4
docs: README.md 작성, 현재 진행해야 할 사항 todo로 정리
include42 Sep 17, 2020
9ed7db3
feat: 파일의 경로를 정리해서 구하기 위해 FileType Enum 클래스 구현
include42 Sep 17, 2020
bca224c
style: 코드 전체의 인덴트와 import 정리, 불필요한 log 코드 삭제
include42 Sep 17, 2020
39a4824
feat: HTTP 요청의 Method를 Enum으로 개선
include42 Sep 28, 2020
486364f
feat: HTTP 요청의 최상단을 RequestLine으로 클래스 분리
include42 Oct 3, 2020
a58dea1
feat: lombok을 통해 User에 Builder 패턴 추가, RequestHandler의 코드 리팩토링
include42 Oct 3, 2020
4459da9
Merge branch 'include42' into level2
include42 Oct 3, 2020
223877b
test: RequestLine에 대한 테스트 코드 추가
include42 Oct 3, 2020
9f602de
refactor: 테스트 패키지 변경 및 필드 이름 변경
include42 Oct 3, 2020
e230c1f
feat: HttpRequest의 header 부분을 RequestHeader 클래스로 분리
include42 Oct 11, 2020
acc5580
feat: RequestHeader를 HttpHeader로 변경하여, 추후 Response에서도 사용하도록 구현
include42 Oct 12, 2020
f4aef8b
refactor: HttpRequest가 생성 시 parameter로 InputStream을 받도록 구조 변경
include42 Oct 12, 2020
f27ed0a
feat: HttpResponse 및 세부 클래스 구현
include42 Oct 12, 2020
cc6f7ad
feat: Controller 및 AbstractController 구현
include42 Oct 12, 2020
a543d3c
feat: CreateUserController / ResourceController 구현
include42 Oct 12, 2020
971c6e6
refactor: HttpResponse에서 주소 처리를 하도록 로직 수정
include42 Oct 12, 2020
c698f91
feat: ControllerMapper 구현 및 RequestHandler 리팩토링
include42 Oct 12, 2020
15c7a9a
refactor: Controller 패키지 위치 변경
include42 Oct 13, 2020
b789efa
feat: 쓰레드풀 적용
include42 Oct 13, 2020
37ed78e
feat: Request에 대한 테스트 코드 개편, HttpRequest 리팩토링
include42 Oct 13, 2020
1aba1fb
feat: HttpResponse에 대한 테스트 코드 작성, 미사용 메서드 삭제
include42 Oct 13, 2020
202a0b1
test: Controller 상속 클래스 및 ControllerMapper에 대한 테스트 코드 구현
include42 Oct 13, 2020
fe63d91
refactor: 피드백에 따른 코드 리팩토링
include42 Oct 20, 2020
1d61547
refactor: HttpResponse의 write 로직 구성 변경
include42 Oct 20, 2020
a334a8e
Merge remote-tracking branch 'base/include42' into level3
include42 Oct 28, 2020
501f032
docs: README에 누락된 2단계 요구사항 및 3단계 요구사항 추가
include42 Nov 20, 2020
74ff35c
feat: 로그인 기능 구현 완료
include42 Nov 20, 2020
9b80920
feat: HandleBars Template을 통해 리스트를 출력할 수 있도록 구현
include42 Nov 20, 2020
9792296
feat: 로그인 상태에서 '/user/list' GET 요청 시 사용자 정보 조회하는 기능 구현
include42 Nov 20, 2020
6d521ae
feat: 세션 관리를 위한 인터페이스와 구현 클래스, 저장소 추가
include42 Nov 23, 2020
cf11c79
feat: 세션을 통해 로그인 처리를 수행하도록 로직 및 테스트 코드 추가
include42 Nov 23, 2020
632b851
docs: 3단계 수행내역 README에 반영
include42 Nov 23, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
feat: Controller 및 AbstractController 구현
- Controller interface 구현. service 로직만 구현하였음
- AbstractController 구현. GET,POST 로직이 기본 구현되어 있으며, 이 로직을 호출할 경우 예외를 발생시키고 400 BAD REQUEST를 response에 담아 보낸다. 이 클래스를 상속한 다른 클래스가 구현한 로직이 아니라면 예외를 발생시키는 것.
include42 committed Oct 12, 2020
commit cc6f7ada5126554cff15ec1900f1235e1520d051
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package exception;

public class RequestMethodNotSupportedException extends RuntimeException {
private static final String METHOD_NOT_SUPPORTED_MESSAGE = " 요청을 지원하지 않습니다.";

public RequestMethodNotSupportedException(String message) {
super(message + METHOD_NOT_SUPPORTED_MESSAGE);
}
}
4 changes: 4 additions & 0 deletions src/main/java/web/request/HttpRequest.java
Original file line number Diff line number Diff line change
@@ -85,4 +85,8 @@ public String getAcceptType() {
public String getRequestHeaderByKey(String key) {
return httpHeader.getHeaderByKey(key);
}

public String getRequestBodyByKey(String key) {
return requestBody.getParameterByKey(key);
}
}
8 changes: 8 additions & 0 deletions src/main/java/web/response/HttpResponse.java
Original file line number Diff line number Diff line change
@@ -12,6 +12,7 @@
import java.util.Objects;

public class HttpResponse {
public static final String BAD_REQUEST_ERROR_MESSAGE = "errorMessage : ";
private static final Logger logger = LoggerFactory.getLogger(HttpResponse.class);
private static final String HTTP_VERSION = "HTTP/1.1";

@@ -42,6 +43,13 @@ public void found(String location) {
write();
}

public void badRequest(String message) {
responseLine = new ResponseLine(Status.BAD_REQUEST, HTTP_VERSION);
String errorMessage = BAD_REQUEST_ERROR_MESSAGE + message;
responseBody = new ResponseBody(errorMessage.getBytes());
write();
}

private void write() {
try {
responseLine.write(dataOutputStream);
3 changes: 2 additions & 1 deletion src/main/java/web/response/Status.java
Original file line number Diff line number Diff line change
@@ -2,7 +2,8 @@

public enum Status {
OK(200, "OK"),
FOUND(302, "FOUND");
FOUND(302, "FOUND"),
BAD_REQUEST(400, "BAD REQUEST");

private final int code;
private final String name;
32 changes: 32 additions & 0 deletions src/main/java/webserver/controller/AbstractController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package webserver.controller;

import exception.RequestMethodNotSupportedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import web.request.HttpRequest;
import web.request.MethodType;
import web.response.HttpResponse;

public abstract class AbstractController implements Controller {
protected static final Logger logger = LoggerFactory.getLogger(Controller.class);

@Override
public void service(HttpRequest request, HttpResponse response) {
MethodType method = request.getMethod();
if (method.isGet()) {
doGet(request, response);
} else if (method.isPost()) {
doPost(request, response);
}
}

protected void doPost(HttpRequest request, HttpResponse response) {
response.badRequest("지원하지 않는 POST 요청입니다.");
throw new RequestMethodNotSupportedException("POST");
}

protected void doGet(HttpRequest request, HttpResponse response) {
response.badRequest("지원하지 않는 GET 요청입니다.");
throw new RequestMethodNotSupportedException("GET");
}
}
8 changes: 8 additions & 0 deletions src/main/java/webserver/controller/Controller.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package webserver.controller;

import web.request.HttpRequest;
import web.response.HttpResponse;

public interface Controller {
void service(HttpRequest request, HttpResponse response);
}