2021-03-05-TIL

userId 는 추후에 id를 별도로 두어서 url로 전달할 계획

null을 리턴하는 것이 찜찜..

https://chris.beams.io/posts/git-commit/


미션 1: 회원 가입, 사용자 목록, 질문하기 구현

안녕하세요, 코드스쿼드 백엔드 과정의 August입니다. 항상 좋은 리뷰 감사합니다! 이번 과제는 주어진 요구사항인 회원 가입, 사용자 목록에 해당하는 기능을 구현하였고, 질문하기 및 질문 목록을 조회하는 기능을 구현했습니다. 마지막으로, 선택 사항에 해당하는 회원 정보 수정 기능도 요구사항에 따라 구현 완료하였습니다.

구현 내용

config

  • MvcConfig : 과제에서 주어진 코드를 적용했습니다.

controller

  • MainController - 기본 경로에 대한 맵핑을 해주는 컨트롤러 입니다.
    • index() - url의 루트 경로를 index 페이지로 맵핑해주는 메서드입니다.
  • QuestionController - /questions로 들어온 url을 맵핑해주는 컨트롤러 입니다.
    • Question을 ArrayList에 저장하여 관리합니다.
    • index() - Model 객체를 받아서 questions 리스트를 모델에 추가하고, /qua/list 로 url을 맵핑합니다.
    • create() - Question을 받아서 생성날짜를 지정하고 id를 지정한 다음, questions 리스트에 추가합니다. 그리고 /questions 페이지로 리다이렉션 합니다.
    • list() - 해당 질문의 id를 GET으로 넘겨받아서 해당 질문글을 모델 객체에 추가하고, /qna/show 페이지로 넘겨줍니다.
  • UserController - /users로 들어온 url을 맵핑하고 처리하는 컨트롤러 입니다.
    • User를 ArrayList에 저장하여 관리합니다.
    • profile() - userId를 GET으로 넘겨받고 userId에 해당하는 User객체를 가져와서 모델 객체에 추가합니다. 그리고 /user/profile 페이지로 맵핑합니다.
    • list() - 모델 객체에 users 리스트를 모두 추가하고 /user/list 페이지로 맵핑합니다.
    • create() - (회원가입) 전달받은 User객체를 users리스트에 추가합니다. 그리고 /users로 리다이렉션 합니다.
    • form() - (회원정보 수정페이지) userId를 넘겨받으면서 해당 User를 찾은 다음, 만약에 존재한다면 모델 객체에 추가하고 수정 페이지 /user/updateForm 로 맵핑합니다.
    • update() - (회원정보 수정) userId에 해당하는 User를 찾고, 전달받은 User객체로 변경합니다. 그리고 다시 /users 페이지로 리다이렉션 합니다.
    • findeUserById() - users리스트에서 userId가 같은 User 객체를 찾는 로직이 반복수행되어 별도의 메서드로 분리하였습니다.

domain

  • Question - 질문 하나를 담는 클래스 입니다.

  • User - 사용자 한명의 정보를 담는 클래스 입니다.

    • update() - User객체를 전달받아서 그 User의 데이터로 전부 변경합니다.
    • matchUserId() - userId는 User의 내부 데이터이므로 여기에서 일치하는지 비교합니다.

[CODE REVIEW] Mission1 by cooper

[August]

  • Question의 생성자에 format이 인상적이다. 그런데 생성자 대신에 setter로 대체하면 안되는지? Handlebars는 기본적으로 getters and setters를 사용하는지? 파이널 필드
  • HandleBarHelper의 역할이 정확히 무엇인지
  • UserController::getUserFormPage 에서 검증을 안하는 것 같다.
  • MvcConfig에 이미 정의되어 있다고 하셨는데, 그러면 현재는 /form 맵핑이 필요없는것인지 -> 필요없다. 같은 경로인데 컨트롤러가 두 개 있는 상태라서
  • QuestionController에서 question이라는 접미사가 반드시 필요한 것 인가? 상위 url을 questions로 묶으면 의미가 명확해서 메서드명도 필요없는게 아닌가?
    • location.href 같이 html에 로직은 넣지 않는 추세이다.
    • application.properties에 questions로 달면 기본url을 설정가능?
  • templates layout을 블록에 대한 Handlebars 문법으로 묶어보는 것도 좋을 것 같다. Vue.js 등 많은 프론트엔드 프레임쿼드에서 사용중인 기법이다.
  • Optional 목적을 잊어버렸는데 K에게 질문 -> 객체의 null 체크하기 위해서!

[Kyu]

  • static에 있는 html파일들은 사용하는 건지? -> 아니다. 지워야겠다.

[K]

  • Question에 write, content, createdDate만 가지는 생성자를 만들면 그걸로 메시지 패싱 가능하다. Question으로 받을때도 생성자로 세 개를 받는 생성자를 정의하면 이 생성자를 스프링이 찾아서 생성한 객체를 컨트롤러로 넘겨준다. 스프링이 Setters나 생성자를 찾아서 값을 셋팅해준다. (둘 중에 무엇이 우선되는지는 잘 모르지만 상관x)

  • 현재는 싱글톤이 아니다. 싱글톤으로 관리하려면 @Bean 이나 @Component 어노테이션을 사용하면 된다.

Watcha 플러그인으로 같이 채팅할 수 있다.

https://spring.io/guides/tutorials/rest/