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

2주차 미션 / 서버 4조 구진 #13

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

JGoo99
Copy link

@JGoo99 JGoo99 commented Mar 29, 2024

어제 막 데모데이가 끝나서 많이 구현하지 못했습니다ㅜㅜ 하루를 갈아넣었는데 기본개념부터 파악하느라 진전이 별로 없었네요....😢

개인적으로 톰캣 구현하는게 너무 재밌어서 과제 종료 이후로도 계속 구현하고 리펙토링 하겠습니다!
좋은 과제 감사합니다!!

로직

input 데이터를 읽어와 HttpRequest 에 파싱합니다.

private final Method method;  // ex. "GET"
private final Uri uri;  // ex. "/"
private final Map<String, String> queryParams;  // ex. {..., userId=exampleId, ...}
private final Map<String, String> header;  // ex. {..., Content-Length=10, ...}
private final Map<String, String> body;  // ex. {..., userId=exampleId, ...}

파싱한 request 와 response 를 받는 컨트롤러 매핑 메서드를 호출합니다.

controller.mapping(request, response);

매핑되는 request 조건으로 이동하여 서비스를 호출하도록 합니다.

스프링에서 사용하는 컨트롤러를 상상하며 구현했습니다. If 문은 비효율 적인 면이 있어서 리펙토링이 필요한 듯 합니다.

// @GetMapping("/") 홈화면
if (request.getMethod() == GET && request.getUri() == HOME) {
  service.home(request, response);
}

// 생략

// @PostMapping("/user/login") 로그인
if (request.getMethod() == POST && request.getUri() == LOGIN) {
  service.login(request, response);
}

서비스단에서 실제 로직을 실행합니다.

실제 컨트롤러에서 응답처리하도록 리펙토링이 필요해보입니다.

최대한 스프링에서 사용했던 입장을 고려하면서 구현했습니다.
컨트롤러에서 return ResponseEntity.status(CREATED).build(); 의 순서로 객체를 생성했던 기억을 살려 구현했습니다.

@Override
public void registerOnPostMethod(HttpRequest request, HttpResponse response) throws IOException {
  log.info("<<<<<<<<< 회원가입 요청 (post) >>>>>>>>>");
  Map<String, String> payload = request.getBody();
  userRepository.addUser(new User(
      payload.get("userId"),
      payload.get("password"),
      payload.get("name"),
      payload.get("email")
  ));

  response.setStatusCode(FOUND);
  response.setLocation(HOME.getKey());
  response.build();
}

@JGoo99 JGoo99 changed the title feat: 요구사항 1, 2, 3, 4, 5 2주차 미션 / 서버 4조 구진 Mar 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant