-
Notifications
You must be signed in to change notification settings - Fork 0
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
Feature/6-질문 게시판 개발 #8
Conversation
- 질문 생성 - 질문 조회 - 질문 수정 - 질문 목록 조회 - 질문 삭제 - 키워드 질문 검색 - 질문 댓글 추가 - 질문 댓글 수정 - 질문 댓글 삭제
질문 게시판 기능 테스트 - 질문 생성 테스트 - 질문 조회 테스트 - 질문 수정 테스트 - 질문 삭제 테스트 - 질문 검색 테스트 - 질문 목록 조회 테스트 - 질문 댓글 추가 테스트 - 질문 댓글 수정 테스트 - 질문 댓글 삭제 테스트
- comment만 수정할 수 있도록 변경. - 댓글 수정 방식 변경 후 관련 테스트도 변경된 방식에 맞도록 테스트 코드 변경
1. DTO 검증 조건 추가 2. Entity 분리 3. 필요 없는 파일 삭제 4. MVC 패턴으로 분리
1. Member의 엔티티와 Dto 분리 2. service layer 도입에 따른 코드 리팩토링 3. MemberForm, MemberEditForm에 검증 조건 추가 4. MemberControllerMvcTest 테스크 코드 완성 5. MemberTestFixture 생성
1. Login,Logout 관련 dto 세분화 2. service layer 도입에 따른 코드 리팩토링 3. LoginForm 검증 조건 추가 4. LoginControllerMvcTest 테스크 코드 완성 5. LoginTestFixture 생성
1. TestRestTemplate를 이용하여 MemberControllerIntegrationTest를 작성했습니다. 2. MemberService에서는 더 이상 사용하지 않은 import문을 삭제했습니다.
1. LoginResponse에 message 필드를 추가하여 테스트할 때 비교값으로 사용했습니다. 2. LoginResponse가 달라짐에 따라 영향 받은 Login 관련 클래스들을 전반적으로 수정했습니다.
1. TestRestTemplate를 이용하여 LoginControllerIntegrationTest를 작성했습니다.
login dto를 response와 request로 분류
Login, member의 Controller, Service 메서드의 명명규칙을 반영했습니다.
memberService의 메서드 명이 변경 됨에 따라 발생한 에러를 수정했습니다.
1. 질문 생성 관련 통합 테스트 진행 - 로그인 한 사용자가 검증 조건에 맞는 질문 생성 시도 시 질문 생성 성공 - 로그인 한 사용자가 검증 조건을 충족하지 못한 질문 생성 시도 시 질문 생성 실패 - 로그인 하지 않은 사용자가 질문 생성 시도 시 질문 생성 실패
1. 질문 조회 관련 통합 테스트 진행 - 질문 조회, 수정, 삭제 테스트를 할 때 필요한 테스트 데이터를 제공하는 createQuestion 메서드를 QuestionTestFixture에 생성 - 질문 조회 성공 - 존재하지 않는 질문으로 조회 시도 시 질문 조회 실패 테스트
Quality Gate failedFailed conditions See analysis details on SonarQube Cloud Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE |
@@ -13,6 +13,7 @@ public class MemberRepository { | |||
private static Map<Long, Member> store = new HashMap<>(); | |||
|
|||
public Member save(Member member) { | |||
log.info("save: member={}", member); |
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.
아직은 엄청 큰 일이 아닐 수도 있지만, member를 그대로 찍으면, 로그에 password가 찍힐 것 같네요.
log.info("logged member = {}", member); | ||
// 로그인되지 않은 경우 예외 처리 | ||
if (member == null) { | ||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null); |
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.
이 부분은 filter나 interceptor를 활용해보면 어떨까요? 아마도, 많은 로직에 이것과 비슷한 코드가 들어갈 것 같네요.
} | ||
|
||
// 질문 조회 | ||
@GetMapping("/{q_id}") |
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.
@GetMapping("/{q_id}") | |
@GetMapping("/{questionId}") |
public Question findById(Long q_id) { | ||
return store.get(q_id); |
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 Question findById(Long q_id) { | |
return store.get(q_id); | |
public Question findById(Long questionId) { | |
return store.get(questionId); |
@Repository | ||
public class QuestionRepository { | ||
|
||
private static Map<Long, Question> store = new HashMap<>(); |
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.
- 이걸 굳이 static으로 만들 필요가 있을까요?
- 동시성 이슈는 없을까요?
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.
Thread safety에 대해서
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.
ConccurentHashMap
|
||
// 질문 생성 | ||
public Question addQuestion(QuestionCreateForm createForm, String loggedUsername) { | ||
Question question = questionRepository.save(createForm, loggedUsername); |
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.
Repository는 entity를 그대로 받아서 저장하는 곳으로 설정하는게 좋지 않을까요?
|
||
// 질문 목록 조회 | ||
public List<Question> findAllQuestion() { | ||
List<Question> questions = questionRepository.findAll(); |
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.
예를 들면, 사용자별로 보여주거나, 날짜별로 보여주거나, 그래도 데이터가 크면, 페이지네이션을 하거나 ...
|
||
@NotBlank(message = "질문 언어를 입력하셔야 합니다.") | ||
@Pattern( | ||
regexp = "^(ko|en|ja|cn|fr|ar|es|ru)$", |
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 Comment(String content, String author) { | ||
this.id = ++sequence; |
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.
이렇게 하면, id는 항상 1이 되는게 아닌가요?
@Builder | ||
public class Question { | ||
|
||
private static final AtomicLong sequence = new AtomicLong(); |
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.
이 방식으로 계속 사용하실 것 같진 않지만, 이 방식은 서버가 늘어나면, 사용할 수 없는 방식입니다. :-)
|
||
} | ||
|
||
@Test |
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.
요 아래의 테스트들은 추가하실 예정이시겠죠?
질문 게시판 기능 개발
질문 게시판 통합 테스트