Skip to content

feat: 게시글 상세 조회 API 추가 및 패키지 정리 - #1

Open
JY-Dev wants to merge 3 commits into
mainfrom
dev
Open

feat: 게시글 상세 조회 API 추가 및 패키지 정리#1
JY-Dev wants to merge 3 commits into
mainfrom
dev

Conversation

@JY-Dev

@JY-Dev JY-Dev commented Mar 21, 2025

Copy link
Copy Markdown
Owner

작업 내용

게시글 기능 개발

  • 게시글 상세 조회 API 및 조회수 관련 로직 작성
  • README 업데이트
  • 패키지 정리

PR에는 다음 3개의 커밋이 포함되어 있습니다:

  • chore: 패키지 정리
  • docs: readme update
  • feat: 게시글 상세 조회 API 및 조회수 관련 로직 작성

@JY-Dev JY-Dev changed the title dev 브랜치를 main에 병합 feat: 마인드 셰어 API 초기 개발 완료 Mar 21, 2025
@JY-Dev JY-Dev changed the title feat: 마인드 셰어 API 초기 개발 완료 feat: 게시글 상세 조회 API 추가 및 패키지 정리 Mar 21, 2025
@JY-Dev

JY-Dev commented Mar 21, 2025

Copy link
Copy Markdown
Owner Author

PR 상세 리뷰 요약

1. 게시글 상세 조회 API 구현

Controller 변경사항

  • PostController 클래스에 GET /posts/{id} 엔드포인트 추가
  • @PathVariable을 통해 게시글 ID를 받아 서비스 레이어로 전달
  • 인증된 사용자 정보를 @AuthenticationPrincipal로 받아 서비스에 전달하여 권한 확인

Service 레이어 변경사항

  • PostServicegetPostDetail(Long postId, UserPrincipal userPrincipal) 메서드 추가
  • 게시글 존재 여부 확인 후 없으면 POST_NOT_FOUND 예외 발생
  • 게시글 조회 시 트랜잭션 내에서 조회수 증가 메서드 호출
  • 사용자 정보와 게시글 정보를 조합하여 DTO로 변환 후 반환

Entity 변경사항

  • Post 엔티티에 viewCount 필드 추가 (기본값 0)
  • increaseViewCount() 메서드 추가하여 조회수 증가 로직 캡슐화
  • JPA 엔티티 매핑 설정 추가 (조회수 컬럼 매핑)

DTO 변경사항

  • PostDetailResponse 클래스 생성
    • 게시글 ID, 제목, 내용, 작성자 닉네임, 작성일, 수정일, 조회수 필드 포함
    • 작성자 본인 여부를 표시하는 isOwner 필드 추가
  • Entity → DTO 변환 로직 추가

데이터베이스 변경

  • POST 테이블에 view_count 컬럼 추가
  • 관련 인덱스 조정 (Full Text Index 제거 및 새 인덱스 추가)

2. 패키지 구조 정리

패키지명 변경

  • 루트 패키지를 com.jydev에서 com.mindshare로 변경
  • 관련된 모든 import 문 업데이트

내부 구조 최적화

  • 도메인 중심 패키지 구조로 정리
    • com.mindshare.post - 게시글 관련 클래스
    • com.mindshare.user - 사용자 관련 클래스
    • com.mindshare.auth - 인증 관련 클래스
  • 각 도메인 내부를 기능별로 세분화 (controller, service, dto, entity 등)
  • 불필요한 import 제거 및 코드 정리

3. 테스트 관련 사항

  • 게시글 상세 조회 및 조회수 증가 로직에 대한 단위 테스트 케이스 추가
  • 다양한 시나리오 테스트:
    • 정상 조회 케이스
    • 존재하지 않는 게시글 조회 시 예외 처리
    • 조회수 증가 정상 작동 여부

4. 비즈니스 로직 주요 검토 포인트

  • 조회수 증가 로직이 매 요청마다 무조건 증가하는 구조인지 확인 필요 (중복 방지 로직 필요 가능성)
  • 삭제된 게시글에 대한 조회 요청 처리 방식 확인
  • 사용자 권한에 따른 접근 제어 적절성 검토
  • 트랜잭션 경계 설정의 적절성 검토

@JY-Dev

JY-Dev commented Mar 21, 2025

Copy link
Copy Markdown
Owner Author

코드 리뷰 의견

PR에 포함된 3개 커밋에 대한 리뷰 의견입니다:

1. 게시글 상세 조회 API 구현 관련 의견

👍 잘된 점:

  • 도메인 중심의 설계 접근이 좋습니다. Post 엔티티에 increaseViewCount() 메서드로 조회수 증가 책임을 부여한 것이 적절합니다.
  • 트랜잭션 내에서 조회와 조회수 증가를 함께 처리하여 데이터 일관성을 유지한 점이 좋습니다.
  • PostDetailResponse를 통해 API 응답을 명확히 정의한 점이 좋습니다.

🤔 개선 제안:

  1. 조회수 중복 증가 방지 로직 필요

    • 같은 사용자가 짧은 시간에 여러 번 조회할 경우 조회수가 계속 증가하는 문제가 있습니다.
    • 사용자 세션 또는 쿠키 기반의 조회수 중복 증가 방지 메커니즘 추가를 고려해보세요.
    • 예: PostViewLog 같은 엔티티를 만들어 사용자별 조회 기록을 저장하고, 일정 시간(예: 하루) 내에는 중복 카운트하지 않도록 구현할 수 있습니다.
  2. 예외 처리 보완

    • 게시글이 삭제된 상태인지 확인하는 로직이 필요할 수 있습니다(소프트 딜리트 사용 중이라면).
    • @Transactional(readOnly = true)를 기본으로 설정하고, 조회수 증가 메서드에만 readOnly = false를 적용하는 것이 더 효율적일 수 있습니다.
  3. 성능 고려사항

    • 게시글 조회가 빈번할 경우 캐싱 전략을 고려해보세요. 특히 인기 게시글의 경우 Redis 등을 활용한 캐싱이 유용할 수 있습니다.
    • viewCount에 대한 업데이트가 많을 경우, 이를 별도 테이블로 분리하여 경합(contention)을 줄이는 방안도 검토해볼 수 있습니다.

2. README 업데이트 관련 의견

👍 잘된 점:

  • 문서화는 매우 중요한 부분이므로 적극적인 업데이트 감사합니다.
  • API 명세와 사용법을 명확하게 기술해 주셔서 다른 개발자들이 이해하기 쉬울 것 같습니다.

🤔 개선 제안:

  1. API 응답 예시 추가

    • 각 API 요청에 대한 응답 예시를 추가하면 API 사용자에게 더 도움이 될 것 같습니다.
    • 가능하다면 Swagger UI를 통한 문서화를 고려해보세요.
  2. 에러 응답 형식 문서화

    • 에러 발생 시 응답 형식과 가능한 에러 코드 목록도 README에 포함하면 좋을 것 같습니다.

3. 패키지 정리 관련 의견

👍 잘된 점:

  • 도메인 중심의 패키지 구조로 정리한 것이 코드 가독성과 유지보수성을 높여줍니다.
  • com.jydev에서 com.mindshare로의 패키지명 변경은 프로젝트 정체성을 명확히 해줍니다.

🤔 개선 제안:

  1. 패키지 구조 명확화

    • 공통 모듈(common)이나 유틸리티(util) 등의 패키지를 명확히 분리하면 좋을 것 같습니다.
    • 각 도메인 패키지 내 구조(controller, service, repository 등)를 통일성 있게 유지해주세요.
  2. 불필요한 import 정리

    • 사용하지 않는 import 구문을 정리해주시면 코드가 더 깔끔해질 것 같습니다.

전체적인 의견

이 PR은 게시글 상세 조회 기능과 코드 구조 개선에 초점을 맞추고 있어 핵심 기능을 잘 구현한 것으로 보입니다. 특히 조회수 관리 메커니즘이 잘 설계되었습니다. 다만, 중복 조회 카운트 방지와 성능 최적화 측면에서 추가적인 보완을 고려해보시면 좋을 것 같습니다.

코드 품질이 전반적으로 우수하며, 앞으로도 이러한 패턴을 유지해주시길 바랍니다. 위 의견들은 참고 사항이며, PR은 정상적으로 진행해도 될 것으로 판단됩니다.

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.

1 participant