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

[로운] 4단계 - HTTP 웹 서버 구현 미션 제출합니다. #200

Open
wants to merge 3 commits into
base: lowoon
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
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
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,4 @@ bin/
.idea
*.iws
*.iml
*.ipr
*.ipr
42 changes: 19 additions & 23 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,28 +1,24 @@
plugins {
id 'java'
id 'idea'
id 'eclipse'
}
subprojects {
version = '1.0.0'

version = '1.0.0'
sourceCompatibility = 1.8
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'eclipse'

repositories {
mavenCentral()
}
repositories {
mavenCentral()
}

dependencies {
implementation 'com.google.guava:guava:29.0-jre'
implementation 'ch.qos.logback:logback-classic:1.2.3'
implementation 'com.github.jknack:handlebars:4.2.0'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.0'
implementation 'org.springframework:spring-core:5.2.6.RELEASE'
implementation 'org.mockito:mockito-core:3.5.15'
implementation 'org.mockito:mockito-junit-jupiter:3.5.15'
testImplementation 'org.junit.jupiter:junit-jupiter:5.6.2'
testImplementation 'org.assertj:assertj-core:3.16.1'
}
dependencies {
implementation 'com.google.guava:guava:29.0-jre'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.0'
implementation 'org.mockito:mockito-core:3.5.15'
implementation 'org.mockito:mockito-junit-jupiter:3.5.15'
testImplementation 'org.junit.jupiter:junit-jupiter:5.6.2'
testImplementation 'org.assertj:assertj-core:3.16.1'
}

test {
useJUnitPlatform()
test {
useJUnitPlatform()
}
}
22 changes: 22 additions & 0 deletions module-api/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
.DS_Store
.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar
/out/
/target/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
bin/

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

8 changes: 8 additions & 0 deletions module-api/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
dependencies {
implementation project(':module-core')
implementation project(':module-common')

implementation 'org.springframework:spring-core:5.2.6.RELEASE'
implementation 'com.github.jknack:handlebars:4.2.0'

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

gradle.properties를 활용해보면 좋을 것 같아요.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

제가 찾은 방법은 버전관리를 gradle.properties로 하는 것이었는데 혹시 다르게 활용할 수 있는 부분들이 있을까요?

implementation 'ch.qos.logback:logback-classic:1.2.3'
}
8 changes: 8 additions & 0 deletions module-api/module-api.iml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="CheckStyle-IDEA-Module">
<option name="configuration">
<map />
</option>
</component>
</module>
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.io.IOException;
import java.net.URISyntaxException;
import java.util.Objects;

import utils.Extension;
import utils.FileIoUtils;
Expand All @@ -16,26 +17,23 @@ public class FileController extends AbstractController {
public void doGet(HttpRequest httpRequest, HttpResponse httpResponse) throws IOException, URISyntaxException {
String path = httpRequest.getPath();
byte[] body = FileIoUtils.findStaticFile(path);
if (body != null) {
if (Objects.nonNull(body)) {
httpResponse.setHttpStatus(HttpStatus.OK);
addContentType(httpResponse, path);
httpResponse.addHeader(HttpHeader.CONTENT_LENGTH, String.valueOf(body.length));
httpResponse.forward(body);
}
if (body == null) {
if (Objects.isNull(body)) {
httpResponse.setHttpStatus(HttpStatus.NOT_FOUND);
httpResponse.error();
}
}

private void addContentType(HttpResponse httpResponse, String path) {
String extension = RequestUtils.extractExtension(path);
if (Extension.isJS(extension)) {
httpResponse.addHeader(HttpHeader.CONTENT_TYPE, "application/javascript;charset=utf-8");
}
if (Extension.isCSS(extension) || Extension.isHTML(extension)) {
httpResponse.addHeader(HttpHeader.CONTENT_TYPE,
String.format("text/%s;charset=utf-8", RequestUtils.extractExtension(path)));
String contentType = Extension.getContentType(extension);
if (Objects.nonNull(contentType)) {
httpResponse.addHeader(HttpHeader.CONTENT_TYPE, contentType);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
package domain.user.web;
package controller.user;

import java.io.IOException;
import java.util.Objects;

import controller.AbstractController;
import domain.user.model.User;
import domain.user.service.UserService;
import session.model.HttpSession;
import session.service.SessionService;
import service.user.UserService;
import session.HttpSession;
import user.User;
import webserver.HttpCookie;
import webserver.HttpRequest;
import webserver.HttpResponse;
import webserver.HttpStatus;

public class LoginController extends AbstractController {
private final UserService userService;
private final SessionService sessionService;

public LoginController(UserService userService, SessionService sessionService) {
public LoginController(UserService userService) {
this.userService = userService;
this.sessionService = sessionService;
}

@Override
Expand All @@ -28,27 +26,23 @@ public void doPost(HttpRequest httpRequest, HttpResponse httpResponse) throws IO
httpResponse.error();
return;
}
HttpSession httpSession = new HttpSession();
setHttpResponse(httpRequest, httpResponse, httpSession);
sessionService.addSession(httpSession);
setHttpResponse(httpRequest, httpResponse);
}

private void setHttpResponse(HttpRequest httpRequest, HttpResponse httpResponse, HttpSession httpSession) throws
private void setHttpResponse(HttpRequest httpRequest, HttpResponse httpResponse) throws
IOException {
User user = userService.findByUserId(httpRequest.getParameter(User.USER_ID));
HttpCookie httpCookie = new HttpCookie();
if (user == null) {
httpResponse.setHttpStatus(HttpStatus.FOUND);
HttpSession httpSession = httpRequest.getHttpSession();
httpResponse.setHttpStatus(HttpStatus.FOUND);
httpCookie.add(String.format("SESSIONID=%s; Path=/", httpSession.getId()));
httpCookie.apply(httpResponse);
if (Objects.isNull(user)) {
httpSession.setAttribute("logined", false);
httpCookie.add(String.format("SESSIONID=%s; Path=/", httpSession.getId()));
httpCookie.apply(httpResponse);
httpResponse.sendRedirect("/user/login_failed.html");
}
if (user != null) {
httpResponse.setHttpStatus(HttpStatus.FOUND);
if (Objects.nonNull(user)) {
httpSession.setAttribute("logined", true);
httpCookie.add(String.format("SESSIONID=%s; Path=/", httpSession.getId()));
httpCookie.apply(httpResponse);
httpResponse.sendRedirect("/index.html");
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package domain.user.web;
package controller.user;

import java.io.IOException;

import controller.AbstractController;
import domain.user.model.User;
import domain.user.service.UserService;
import session.model.HttpSession;
import session.service.SessionService;
import service.session.SessionService;
import service.user.UserService;
import session.HttpSession;
import user.User;
import webserver.HttpCookie;
import webserver.HttpRequest;
import webserver.HttpResponse;
Expand All @@ -33,7 +33,7 @@ public void doPost(HttpRequest httpRequest, HttpResponse httpResponse) throws IO
userService.addUser(user);
HttpSession httpSession = new HttpSession();
httpSession.setAttribute("logined", true);
sessionService.addSession(httpSession);
sessionService.add(httpSession);
HttpCookie httpCookie = new HttpCookie();
httpCookie.add(String.format("SESSIONID=%s; Path=/", httpSession.getId()));
httpCookie.apply(httpResponse);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package domain.user.web;
package controller.user;

import java.io.IOException;
import java.util.List;

import com.fasterxml.jackson.databind.ObjectMapper;

import controller.AbstractController;
import domain.user.model.User;
import domain.user.service.UserService;
import session.service.SessionService;
import service.session.SessionService;
import service.user.UserService;
import user.User;
import webserver.HttpHeader;
import webserver.HttpRequest;
import webserver.HttpResponse;
Expand All @@ -27,8 +27,7 @@ public UserListController(UserService userService, SessionService sessionService

@Override
public void doGet(HttpRequest httpRequest, HttpResponse httpResponse) throws IOException {
if (httpRequest.getSessionId() == null ||
!(boolean)sessionService.findById(httpRequest.getSessionId()).getAttribute("logined")) {
if (httpRequest.notAuthorized()) {
httpResponse.setHttpStatus(HttpStatus.UNAUTHORIZED);
httpResponse.sendRedirect("/user/login.html");
return;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package domain.user.web;
package controller.user;

import java.io.IOException;
import java.util.Objects;

import com.fasterxml.jackson.databind.ObjectMapper;

import controller.AbstractController;
import domain.user.model.User;
import domain.user.service.UserService;
import service.user.UserService;
import user.User;
import webserver.HttpHeader;
import webserver.HttpRequest;
import webserver.HttpResponse;
Expand All @@ -24,7 +25,7 @@ public UserReadController(UserService userService, ObjectMapper objectMapper) {
@Override
public void doGet(HttpRequest httpRequest, HttpResponse httpResponse) throws IOException {
User user = userService.findByUserId(httpRequest.getParameter(User.USER_ID));
if (user == null) {
if (Objects.isNull(user)) {
validateParameter(httpRequest, httpResponse);
httpResponse.error();
return;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package session.service;
package service.session;

import session.db.SessionRepository;
import session.model.HttpSession;
import session.HttpSession;
import session.SessionRepository;

public class SessionService {
private static SessionService instance = new SessionService();
Expand All @@ -13,11 +13,15 @@ public static SessionService getInstance() {
return instance;
}

public void addSession(HttpSession httpSession) {
public void add(HttpSession httpSession) {
SessionRepository.addSession(httpSession.getId(), httpSession);
}

public HttpSession findById(String id) {
return SessionRepository.findById(id);
}

public void update(HttpSession httpSession) {
SessionRepository.update(httpSession);
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package domain.user.service;
package service.user;

import java.util.ArrayList;
import java.util.List;

import domain.user.db.UserRepository;
import domain.user.model.User;
import user.User;
import user.UserRepository;

public class UserService {
private static final UserService instance = new UserService();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@

import controller.Controller;
import controller.FileController;
import domain.user.service.UserService;
import domain.user.web.LoginController;
import domain.user.web.UserCreateController;
import domain.user.web.UserListController;
import domain.user.web.UserReadController;
import session.service.SessionService;
import controller.user.LoginController;
import controller.user.UserCreateController;
import controller.user.UserListController;
import controller.user.UserReadController;
import service.session.SessionService;
import service.user.UserService;

public class Context {
private static final ObjectMapper objectMapper = new ObjectMapper();
Expand All @@ -33,7 +33,7 @@ public Map<String, Controller> createControllerBifurcation() {
controllers.put("file", new FileController());
controllers.put("/user/create", new UserCreateController(userService, sessionService));
controllers.put("/user/profile", new UserReadController(userService, objectMapper));
controllers.put("/user/login", new LoginController(userService, sessionService));
controllers.put("/user/login", new LoginController(userService));
controllers.put("/user/list", new UserListController(userService, sessionService, objectMapper));
return controllers;
}
Expand Down
Loading