2021-03-05-TIL
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/
This post is licensed under CC BY 4.0 by the author.