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 웹 서버 리팩토링 미션 제출합니다. #204

Open
wants to merge 13 commits into
base: yejiahn
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all 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
13 changes: 13 additions & 0 deletions application-module/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
plugins {
id 'java'
}

version '1.0.0'

repositories {
mavenCentral()
}

dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
37 changes: 37 additions & 0 deletions application-module/src/main/java/Application.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import controller.CreateUserController;
import controller.ListController;
import controller.RootController;
import controller.UserLoginController;
import domain.UrlMapper;
import domain.controller.Controller;
import domain.controller.FrontController;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Application {

private static final Logger logger = LoggerFactory.getLogger(RequestHandler.class);

Choose a reason for hiding this comment

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

RequestHandler의 로거를 생성하는 것은 의도된 내용일까요?


private static final Controller CONTROLLER;

static {
Map<String, Controller> urlMapper = new HashMap<>();
urlMapper.put("/user/create", CreateUserController.getInstance());
urlMapper.put("/user/login", UserLoginController.getInstance());
urlMapper.put("/", RootController.getInstance());
urlMapper.put("/user/list", ListController.getInstance());
CONTROLLER = new FrontController(new UrlMapper(urlMapper));
}

public static void main(String[] args) throws Exception {
try {
WebServer.main(args, CONTROLLER);
} catch (IOException e) {
logger.error(e.getMessage());
e.printStackTrace();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package web.application.controller;
package controller;

import db.DataBase;
import web.application.domain.model.User;
import web.server.domain.request.HttpRequest;
import web.server.domain.response.HttpResponse;
import domain.controller.AbstractController;
import domain.model.User;
import domain.request.HttpRequest;
import domain.response.HttpResponse;

public class CreateUserController extends AbstractController {

Expand All @@ -30,5 +31,6 @@ public void doPost(HttpRequest httpRequest, HttpResponse httpResponse) {
private static class ControllerCache {

private static final CreateUserController CREATE_USER_CONTROLLER = new CreateUserController();

}
}
Original file line number Diff line number Diff line change
@@ -1,35 +1,40 @@
package web.application.controller;
package controller;

import utils.HandlebarsHelper;
import db.DataBase;
import domain.controller.AbstractController;
import domain.request.HttpRequest;
import domain.response.HttpResponse;
import dto.UserListResponse;
import java.util.ArrayList;
import java.util.Optional;

import db.DataBase;
import web.HandlebarsHelper;
import web.application.dto.UserListResponse;
import web.server.domain.request.HttpRequest;
import web.server.domain.response.HttpResponse;
import web.server.utils.StaticFileType;
import utils.StaticFileType;

public class ListController extends AbstractController {

private static final String LOGINED = "logined";

private ListController() {
super();
}

public static ListController getInstance() {
return ListController.Cache.LIST_CONTROLLER;
return Cache.LIST_CONTROLLER;
}

@Override
public void doGet(HttpRequest httpRequest, HttpResponse httpResponse) {
boolean isLogined = Optional.ofNullable(httpRequest.getSession().getAttribute("logined"))
boolean isLogined = Optional.ofNullable(httpRequest.getSession().getAttribute(LOGINED))
.map(value -> Boolean.parseBoolean(value.toString()))
.orElse(false);

if (!isLogined) {
httpResponse.forward("templates/index.html", StaticFileType.HTML);
httpResponse.sendRedirect("/");
return;
}

HandlebarsHelper handlebarsHelper = HandlebarsHelper.getInstance();
UserListResponse userListResponse = UserListResponse.of(new ArrayList<>(DataBase.findAll()));
String content = handlebarsHelper.apply("user/list", userListResponse);
String content = HandlebarsHelper.apply("user/list", userListResponse);

httpResponse.forward(content);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package web.application.controller;
package controller;

import web.application.common.FilePrefixPathMapper;
import web.server.domain.request.HttpRequest;
import web.server.domain.response.HttpResponse;
import web.server.utils.StaticFileType;
import domain.controller.AbstractController;
import domain.request.HttpRequest;
import domain.response.HttpResponse;
import utils.FilePrefixPathMapper;
import utils.StaticFileType;

public class RootController extends AbstractController {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package web.application.controller;
package controller;

import web.application.common.FilePrefixPathMapper;
import web.application.service.UserService;
import web.server.domain.request.HttpRequest;
import web.server.domain.request.HttpSession;
import web.server.domain.response.HttpResponse;
import web.server.domain.response.ResponseCookie;
import web.server.utils.StaticFileType;
import domain.controller.AbstractController;
import domain.request.HttpRequest;
import domain.request.HttpSession;
import domain.response.HttpResponse;
import domain.response.ResponseCookie;
import service.UserService;
import utils.FilePrefixPathMapper;
import utils.StaticFileType;

public class UserLoginController extends AbstractController {

private UserLoginController() {
super();
}

public static UserLoginController getInstance() {
return Cache.USER_LOGIN_CONTROLLER;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package db;

import com.google.common.collect.Maps;
import domain.model.User;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
import web.application.domain.model.User;

public class DataBase {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,26 @@
package web.application.domain.model;
package domain.model;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.ToString;

@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
@ToString
@Builder
public class User {

private String userId;
private String password;
private String name;
private String email;

@Builder
public User(String userId, String password, String name, String email) {
this.userId = userId;
this.password = password;
this.name = name;
this.email = email;
}

public boolean hasPasswordSameWith(String password) {
return this.password.equals(password);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package web.application.dto;
package dto;

public abstract class ResponseDto {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package web.application.dto;
package dto;

import domain.model.User;
import java.util.List;
import web.application.domain.model.User;

public class UserListResponse extends ResponseDto {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package web.application.service;
package service;

import db.DataBase;
import domain.model.User;
import java.util.Optional;
import web.application.domain.model.User;

public class UserService {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
package web;
package utils;

import com.github.jknack.handlebars.Handlebars;
import com.github.jknack.handlebars.Template;
import com.github.jknack.handlebars.io.ClassPathTemplateLoader;
import com.github.jknack.handlebars.io.TemplateLoader;
import dto.ResponseDto;
import java.io.IOException;
import web.application.dto.ResponseDto;

public class HandlebarsHelper {

public static HandlebarsHelper getInstance() {
return Cache.HANDLEBARS_HELPER;
}
private static final Handlebars handlebars;

public String apply(String path, ResponseDto responseDto) {
static {
TemplateLoader loader = new ClassPathTemplateLoader();
loader.setPrefix("/templates");
loader.setSuffix(".html");
Handlebars handlebars = new Handlebars(loader);
handlebars = new Handlebars(loader);
}

public static String apply(String path, ResponseDto responseDto) {
try {
Template template = handlebars.compile(path);
return template.apply(responseDto);
Expand All @@ -26,8 +27,4 @@ public String apply(String path, ResponseDto responseDto) {
}
}

private static class Cache {

private static final HandlebarsHelper HANDLEBARS_HELPER = new HandlebarsHelper();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<div class="col-md-12">
<div class="navbar-header">

<a class="navbar-brand" href="/index.html">SLiPP</a>
<a class="navbar-brand" href="/templates/index.html">SLiPP</a>
<button class="navbar-toggle" data-target="#navbar-collapse1" data-toggle="collapse" type="button">
<i class="glyphicon glyphicon-search"></i>
</button>
Expand Down Expand Up @@ -68,7 +68,7 @@
</div>
<div class="collapse navbar-collapse" id="navbar-collapse2">
<ul class="nav navbar-nav navbar-right">
<li class="active"><a href="/index.html">Posts</a></li>
<li class="active"><a href="/templates/index.html">Posts</a></li>
<li><a href="/user/login.html" role="button">로그인</a></li>
<li><a href="/user/form.html" role="button">회원가입</a></li>
<!--
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,8 @@ <h2 class="qna-title">InitializingBean implements afterPropertiesSet() 호출되
서버가 가동되면서 bean들이 초기화되는 시점에 B라는 클래스의 afterPropertiesSet 메소드는</p>
<p>A라는 클래스의 특정 메소드인 afunc()를 호출하고 있습니다.</p>
</div>
<div class="article-web.server.utils">
<ul class="article-web.server.utils-list">
<div class="article-web.utils">
<ul class="article-web.utils-list">
<li>
<a class="link-modify-article" href="/questions/423/form">수정</a>
</li>
Expand All @@ -117,7 +117,7 @@ <h2 class="qna-title">InitializingBean implements afterPropertiesSet() 호출되
</form>
</li>
<li>
<a class="link-modify-article" href="/index.html">목록</a>
<a class="link-modify-article" href="/templates/index.html">목록</a>
</li>
</ul>
</div>
Expand Down Expand Up @@ -145,8 +145,8 @@ <h2 class="qna-title">InitializingBean implements afterPropertiesSet() 호출되
<div class="article-doc comment-doc">
<p>이 글만으로는 원인 파악하기 힘들겠다. 소스 코드와 설정을 단순화해서 공유해 주면 같이 디버깅해줄 수도 있겠다.</p>
</div>
<div class="article-web.server.utils">
<ul class="article-web.server.utils-list">
<div class="article-web.utils">
<ul class="article-web.utils-list">
<li>
<a class="link-modify-article"
href="/questions/413/answers/1405/form">수정</a>
Expand Down Expand Up @@ -178,8 +178,8 @@ <h2 class="qna-title">InitializingBean implements afterPropertiesSet() 호출되
<div class="article-doc comment-doc">
<p>이 글만으로는 원인 파악하기 힘들겠다. 소스 코드와 설정을 단순화해서 공유해 주면 같이 디버깅해줄 수도 있겠다.</p>
</div>
<div class="article-web.server.utils">
<ul class="article-web.server.utils-list">
<div class="article-web.utils">
<ul class="article-web.utils-list">
<li>
<a class="link-modify-article"
href="/questions/413/answers/1405/form">수정</a>
Expand Down Expand Up @@ -223,8 +223,8 @@ <h2 class="qna-title">InitializingBean implements afterPropertiesSet() 호출되
<div class="article-doc comment-doc">
{2}
</div>
<div class="article-web.server.utils">
<ul class="article-web.server.utils-list">
<div class="article-web.utils">
<ul class="article-web.utils-list">
<li>
<a class="link-modify-article" href="/api/questions/{3}/answers/{4}/form">수정</a>
</li>
Expand All @@ -244,4 +244,4 @@ <h2 class="qna-title">InitializingBean implements afterPropertiesSet() 호출되
<script src="../js/bootstrap.min.js"></script>
<script src="../js/scripts.js"></script>
</body>
</html>
</html>
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
package web.application;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertAll;

import db.DataBase;
import domain.model.User;
import dto.UserListResponse;
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import web.HandlebarsHelper;
import web.application.domain.model.User;
import web.application.dto.UserListResponse;
import utils.HandlebarsHelper;

public class HandlebarsHelperTest {

Expand All @@ -34,12 +32,10 @@ void setUp() {
@DisplayName("템플릿 경로와 모델을 입력하면 해당 동적 페이지를 반환한다.")
@Test
void handlebarsApplyTest() {
HandlebarsHelper handlebarsHelper = HandlebarsHelper.getInstance();

List<User> users = new ArrayList<>(DataBase.findAll());
UserListResponse userListResponse = UserListResponse.of(users);

String contents = handlebarsHelper.apply("user/list", userListResponse);
String contents = HandlebarsHelper.apply("user/list", userListResponse);

assertAll(
() -> assertThat(contents).contains("자바지기"),
Expand Down
Loading