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

Feature/6-질문 게시판 개발 #8

Closed
wants to merge 15 commits into from
Closed

Feature/6-질문 게시판 개발 #8

wants to merge 15 commits into from

Conversation

KanuBang
Copy link
Collaborator

질문 게시판 기능 개발

  • 질문 생성
  • 질문 조회
  • 질문 수정
  • 질문 목록 조회
  • 질문 삭제
  • 키워드 질문 검색
  • 댓글 달기
  • 댓글 수정
  • 댓글 삭제

질문 게시판 통합 테스트

  • 질문 생성 테스트
  • 질문 조회 테스트

- 질문 생성
- 질문 조회
- 질문 수정
- 질문 목록 조회
- 질문 삭제
- 키워드 질문 검색
- 질문 댓글 추가
- 질문 댓글 수정
- 질문 댓글 삭제
질문 게시판 기능 테스트
- 질문 생성 테스트
- 질문 조회 테스트
- 질문 수정 테스트
- 질문 삭제 테스트
- 질문 검색 테스트
- 질문 목록 조회 테스트
- 질문 댓글 추가 테스트
- 질문 댓글 수정 테스트
- 질문 댓글 삭제 테스트
- 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에 생성
- 질문 조회 성공
- 존재하지 않는 질문으로 조회 시도 시 질문 조회 실패 테스트
@KanuBang KanuBang requested a review from f-lab-lyan December 18, 2024 04:53
Copy link

Quality Gate Failed Quality Gate failed

Failed conditions
C Reliability Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

@KanuBang KanuBang closed this Dec 21, 2024
@@ -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);
Copy link
Collaborator

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);
Copy link
Collaborator

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}")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
@GetMapping("/{q_id}")
@GetMapping("/{questionId}")

Comment on lines +27 to +28
public Question findById(Long q_id) {
return store.get(q_id);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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<>();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. 이걸 굳이 static으로 만들 필요가 있을까요?
  2. 동시성 이슈는 없을까요?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thread safety에 대해서

Copy link
Collaborator

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);
Copy link
Collaborator

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();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이렇게 하면, 전체 질문 리스트가 많아졌을 경우엔 문제가 생기지 않을까요?

Copy link
Collaborator

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)$",
Copy link
Collaborator

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;
Copy link
Collaborator

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();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 방식으로 계속 사용하실 것 같진 않지만, 이 방식은 서버가 늘어나면, 사용할 수 없는 방식입니다. :-)


}

@Test
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

요 아래의 테스트들은 추가하실 예정이시겠죠?

KanuBang added a commit that referenced this pull request Jan 7, 2025
Refactor: #7, #8 코드 리뷰 반영
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.

2 participants