-
Notifications
You must be signed in to change notification settings - Fork 28
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
[hiro & bongf] Mission6 페이지나누기 #134
base: bong6981
Are you sure you want to change the base?
Conversation
- 페이징 구현 완료
- 지역변수로 선언된 부분을 QustionPage 멤버 변수로 변경
- 날짜 내림 차순으로 구현 - 그를 테스트하기 위한 더미데이터 변경
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안녕하세요! Hiro & Bongf! 리뷰어 Dion입니다.
여러 고민들은 많이 해볼 수록 좋습니다. 코딩에 정답은 없으니, 최선을 지향하는 수밖에는 없다고 생각해요.
클래스에 꼭 상태값을 모조리 담아줄 필요는 없습니다. 필요한 시점에 그냥 그 값을 호출하는 방법도 있죠.
또한, 스프링에서 스프링이 실행되고나서 필요한 일을 시키는 방법이 있는데요. 그냥 알려드리면 재미가 없으니, 검색해보세요~ 힌트는 충분히 드린 것 같습니다.
사실 코드는 Paging이 제일 중요한데, Paging이 아직 깔끔하지 않다고 판단되어 변경요청 드립니다.
웹 애플리케이션 관련 리뷰
- ;jsessionid=09008FA332450BC65BE8B883C688A096 이거 주소창에 안나오게하는 설정 요구사항에 있었는데, 한 번 찾아보세요~
- 페이지가 0부터 시작하는 것은 뭔가 이상하지 않나요?
- 이전, 다음 버튼은 유동적으로 노출되어야하고, 눌렀을 때, 다음 단계로 이동해야 한다고 생각되네요.
고생하셨습니다!
궁금하시거나, 도움이 필요한 부분, 이해가 가지 않는 부분, 토론하고 싶은 부분은 코멘트 남겨주세요!
DM으로 여쭤보지 마시구요 ㅋㅋ!!
import java.util.List; | ||
|
||
public class QuestionPage { | ||
private final int COUNT_NUMBERS_TO_SHOW = 5; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
private final int COUNT_NUMBERS_TO_SHOW = 5; | |
private final static int COUNT_NUMBERS_TO_SHOW = 5; |
|
||
public class QuestionPage { | ||
private final int COUNT_NUMBERS_TO_SHOW = 5; | ||
private final Pageable pageable; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
얘는 final이고 나머지는 final이 아닌 이유가 있을까요?
private int previous; | ||
private int next; | ||
private Page<Question> questions; | ||
private List<Integer> pageNumbers = new ArrayList<>(COUNT_NUMBERS_TO_SHOW); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
여기서 상태로 관리되는 값과 아닌 값을 구분하는 시야를 기르셨으면 좋겠네요.
단순히 데이터를 저장하는 목적으로 필드를 사용하는 것은 추천드리지 않습니다.
@@ -23,7 +23,7 @@ public ApiAnswerController(AnswerService answerService) { | |||
|
|||
@PostMapping | |||
public Answer createAnswer(@PathVariable long questionId, String contents, HttpSession session) { | |||
User user = HttpSessionUtils.getSessionedUser(session).orElseThrow(NotLoginException::new); | |||
User user = HttpSessionUtils.getSessionedUser(session).orElseThrow(NotLoginException::new); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
User user = HttpSessionUtils.getSessionedUser(session).orElseThrow(NotLoginException::new); | |
User user = HttpSessionUtils.getSessionedUser(session).orElseThrow(NotLoginException::new); |
메서드 오퍼레이터의 사용은 좋네요!
@ExceptionHandler(IllegalEntityIdException.class) | ||
public String handleIllegalEntityIdException(IllegalEntityIdException e) { | ||
return e.getMessage(); | ||
public String handleIllegalEntityIdException() { | ||
return "유효하지 않은 접근입니다"; | ||
} | ||
|
||
@ExceptionHandler(NotLoginException.class) | ||
public String handleNotLoginException(NotLoginException e) { | ||
return e.getMessage(); | ||
public String handleNotLoginException() { | ||
return "로그인이 필요합니다"; | ||
} | ||
|
||
@ExceptionHandler(IllegalAccessException.class) | ||
public String handleIllegalAccessException(IllegalAccessException e) { | ||
return e.getMessage(); | ||
public String handleIllegalAccessException() { | ||
return "자신의 답변만 삭제할 수 있습니다"; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이전 리뷰어분이 이런 형식의 예외 핸들링을 바라신 것은 아닌 것 같아요.
저는 솔직히 아직 이정도 수준의 예외 처리를 바라진 않는데, 에러를 반환하는 객체를 정의해서 일정한 형식으로 주는것을 고민해보세요!
import java.util.ArrayList; | ||
import java.util.List; | ||
|
||
public class QuestionPage { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
객체로 포장하려는건 좋은 시도였어요~
this.questions = questionsByPage; | ||
this.previous = questionsByPage.previousOrFirstPageable().getPageNumber(); | ||
if (questionsByPage.hasNext()) { | ||
this.next = questionsByPage.nextPageable().getPageNumber(); | ||
} else { | ||
this.next = questionsByPage.getNumber(); | ||
|
||
} | ||
this.pageNumbers = createPageNumbers(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
여기서 유도된 친구들은 그냥 메서드 호출하면 그 때 반환해주는건 어때요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오! 그런 방식은 생각해보지 않았네요. 그렇게 되면 멤버변수에 대한 고민도 해결되는 부분이 있는 것 같습니다! 감사합니다. 위에 final 키워드와 함께 수정해보겠습니다!
for(int i=1; i<=200; i++) { | ||
System.out.println( | ||
"INSERT INTO QUESTION (ID, WRITER_ID, TITLE, CONTENTS, CREATED_DATE_TIME, COUNT_OF_ANSWERS) VALUES ('"+ i + "', '1', '6', 'dui', '2021-03-20 16:03:03.106461', '1')" | ||
); | ||
} | ||
|
||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
음 이건 아닌데요~
스프링에서는 스프링 컨테이너 시작시점에 동작을 수행하는 기능도 존재합니다. 이를 이용해보세요.
|
||
public QuestionPage(Pageable pageable, Page<Question> questionsByPage) { | ||
this.pageable = pageable; | ||
this.questions = questionsByPage; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
가급적이면 일치시켜주세요~
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
넵 일치시키도록 하겠습니다!
|
||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
빈 라인이 이렇게 추가된 이유는 뭔가용?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 정리를 하면서 잘못 추가된 것 같습니다. 삭제하겠습니다!
상세한 리뷰 감사합니다! |
안녕하세요
백엔드반 히로와 봉프입니다.
미션6까지 구현했습니다.
1-6까지 한 번 더 미션을 돌리기 위해 빨리 하려다보니 고민이 부족했던 점이 있습니다.
커밋 메시지가 기능 단위별로 작성되지 않았습니다. 죄송합니다.
미션 5에서 주신 피드백에 대해 예외 메시지를 그대로 노출시키기 보다는 새로운 메시지로 처리했습니다.
여전히 예외처리를 하고 있어 피드백 반영이 잘 된 것 같지 않습니다 ㅠㅠ
미션 5에서 주신 피드백은 아래와 같습니다
코드 리뷰 감사하다는 말씀 드립니다!
배포링크
https://bong-spring-boot-qna.herokuapp.com/
생성된 계정 정보
아이디 : javajigi / 비밀번호 : test
아이디 : sanjigi / 비밀번호 : test
아이디 : hi / 비밀번호 : hi
고민한 부분
미해결
더미데이터를 만들 때 for문으로 만들어 복사 붙여넣기를 했습니다. 어떤 키워드로 학습할 수 있을지 몰라 우선 말씀드린 방식으로 데이터를 넣었습니다. CS수업 때 파이썬으로 더미 데이터를 만드는 법은 배웠지만 그것은 데이터베이스에 직접 넣는 방식이라 이번 프로젝트와 같이 data.sql에 작성할 때는 방법을 찾지 못했습니다.