-
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
feat: 개발질문 게시판의 해시태그 기능 구현 완료 #629
Conversation
src/main/java/page/clab/api/domain/community/board/adapter/in/web/BoardRegisterController.java
Outdated
Show resolved
Hide resolved
.../clab/api/domain/community/board/adapter/out/persistence/BoardHashtagPersistenceAdapter.java
Show resolved
Hide resolved
...ava/page/clab/api/domain/community/board/adapter/out/persistence/BoardHashtagRepository.java
Show resolved
Hide resolved
...page/clab/api/domain/community/board/adapter/out/persistence/BoardHashtagRepositoryImpl.java
Outdated
Show resolved
Hide resolved
.../java/page/clab/api/domain/community/board/application/dto/mapper/BoardHashtagDtoMapper.java
Outdated
Show resolved
Hide resolved
...in/java/page/clab/api/domain/community/hashtag/adapter/in/web/HashtagRegisterController.java
Outdated
Show resolved
Hide resolved
src/main/java/page/clab/api/domain/community/hashtag/domain/Hashtag.java
Show resolved
Hide resolved
.../clab/api/external/community/board/application/port/ExternalRetrieveBoardHashtagUseCase.java
Outdated
Show resolved
Hide resolved
...ab/api/external/community/board/application/service/ExternalBoardHashtagRegisterService.java
Outdated
Show resolved
Hide resolved
...ain/java/page/clab/api/external/hashtag/application/port/ExternalRetrieveHashtagUseCase.java
Outdated
Show resolved
Hide resolved
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.
작업량이 정말 많으셨을 것 같은데, 빠르게 진행해주신 것 같아 놀랐습니다! 고생하셨습니다.
일단, 저는 해시태그에 대해 그냥 List<String>
으로 관리하고, Board를 저장할 때에도 String
으로 받아 개발 질문 게시글에 대해서만 반환하도록 하는 걸로 간단하게 생각했었는데, Hashtag
라는 새로운 도메인을 만드실 줄은 몰랐습니다..!
HashTag
엔티티를 사용하는게 아니라 그냥 String
으로만 관리하면 간단할 것 같은데 Hashtag
도메인을 새로 구현하신 이유가 있으신지 궁금합니다.
.../page/clab/api/domain/community/board/adapter/in/web/BoardsByHashtagRetrievalController.java
Outdated
Show resolved
Hide resolved
} | ||
|
||
@Override | ||
public List<BoardHashtag> getAllByBoardId(Long boardId) { |
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.
이전에 코드베이스 전반 검토할 때, findBy
는 예외처리를 하지 않고 조회하는 메서드, getBy
는 예외처리까지 포함되어 조회하는 메서드에 적용하기로 했어서, 작업하신 메서드 이름들을 올바른 이름으로 바꾸는 작업이 필요할 것 같아요.
.../java/page/clab/api/domain/community/board/application/dto/mapper/BoardHashtagDtoMapper.java
Show resolved
Hide resolved
...main/java/page/clab/api/domain/community/board/application/service/BoardRegisterService.java
Outdated
Show resolved
Hide resolved
src/main/java/page/clab/api/domain/community/board/application/service/BoardUpdateService.java
Outdated
Show resolved
Hide resolved
...in/java/page/clab/api/domain/community/hashtag/adapter/in/web/HashtagRegisterController.java
Outdated
Show resolved
Hide resolved
...ain/java/page/clab/api/domain/community/hashtag/application/dto/mapper/HashtagDtoMapper.java
Outdated
Show resolved
Hide resolved
.../java/page/clab/api/domain/community/hashtag/application/port/in/RetrieveHashtagUseCase.java
Show resolved
Hide resolved
...in/java/page/clab/api/domain/community/hashtag/application/port/out/RegisterHashtagPort.java
Show resolved
Hide resolved
@limehee @SongJaeHoonn 두 분의 피드백 감사합니다!
이러한 해시태그를 고정으로 둔다면 Enum으로 관리하는 것이 가장 먼저 떠올랐습니다. 그렇지만 만약, 해시태그를 추가적으로 등록하거나 삭제하는 경우에서는 프론트와 백에서 매번 Enum을 수정해야 된다고 생각했어요. 그래서 저는 위에서 선정된 해시태그들을 지금 구현된 HashTag 테이블에 저장하고, 추가 삭제의 경우는 ADMIN 권한만 가능하도록 하면 유지보수가 편하다고 생각했습니다. 이 설계에 대해서 어떻게 생각하시는지 궁금합니다! 설계 부분을 고민하다보니 글이 많이 길어졌습니다,, 부족한 부분 있으면 바로 피드백 주세요! |
프론트 팀과 별도로 진행된 논의 내용은 제가 공유받지 못하여 정확히 알지 못합니다. 그러나 제가 이해한 바에 따르면, 해시태그 기능은 사용자가 카테고리 게시판에서 해시태그를 선택하면 해당 해시태그로 등록된 게시글 목록이 표시되는 방식입니다. 이 경우, 일부 사용자가 권한 관리가 적절히 이루어지지 않는 점을 악용하여 다량의 해시태그를 생성할 수 있으며, 이로 인해 더미 해시태그가 페이지에 노출될 수 있습니다. 또한, API 요청에 제한이 없을 경우 시스템 부하가 증가하여 서비스에 영향을 미칠 수 있으며, 최악의 경우 무작위로 생성된 데이터로 인해 저장 공간이 부족해지는 등의 문제가 발생할 수 있습니다. 물론, 민주님께서 언급하신 대로 다른
초기 논의된 방향을 그대로 적용할 경우, 해시태그를 저는 민주님께서 언급하신 대로 현재 구현된 |
이 부분은 서비스단에서 게시글 저장시 해당 게시글에 대한 중복 검증 절차를 거치면 괜찮을 것이라고 생각했습니다.
이 부분에서 제가 해시태그 기반 게시글 반환 기능이 있다는걸 인지하지 못했네요. 말씀해주신대로, 조회 시 전체 게시글을 순회하는 패턴은 효율이 많이 떨어지고,
패키지로 나뉘어진 도메인(
정확하게 이해하셨습니다! |
…로 작성한 내용을 어노테이션으로 수정
… usecase와 service board 패키지 아래로 이동
…직을 Board 도메인 객체로 이동
src/main/java/page/clab/api/domain/community/board/application/service/BoardUpdateService.java
Fixed
Show fixed
Hide fixed
src/main/java/page/clab/api/global/config/SecurityConfig.java
Dismissed
Show dismissed
Hide dismissed
최종 SQL문 입니다.
|
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.
제안했던 내용 잘 반영해주셔서 감사합니다! 추가적인 코멘트 남깁니다.
...main/java/page/clab/api/domain/community/board/application/service/BoardRegisterService.java
Outdated
Show resolved
Hide resolved
src/main/java/page/clab/api/domain/community/board/domain/Board.java
Outdated
Show resolved
Hide resolved
...ava/page/clab/api/domain/community/board/adapter/out/persistence/BoardHashtagRepository.java
Outdated
Show resolved
Hide resolved
...ava/page/clab/api/domain/community/board/adapter/out/persistence/BoardHashtagRepository.java
Outdated
Show resolved
Hide resolved
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.
재훈님이 추가로 남겨주신 코멘트만 해결하면 될 것 같습니다. 긴 시간 작업하시느라 고생 많으셨어요.
Summary
커뮤니티 게시판 중에서 개발질문 카테고리에 대해서 해시태그를 설정할 수 있는 기능을 개발했습니다.
Tasks
(해시태그를 먼저 등록하고, 개발질문 게시판에 해시태그id를 연결하는 형태입니다.)
(개발질문 게시판 전용으로 dto를 만드는 선택지도 있었지만, @Jeong-Ag 님과 회의 후에 결정했습니다. 모든 게시판의 요청 dto에 해시태그 id list를 담아서 전달할 수 있습니다. 이때 null이어도 괜찮습니다. 이는 현재 개발질문 게시판에서만 해시태그 기능을 사용할 수 있지만 추후 확장성을 고려한 선택이었습니다.)
(게시글을 수정할 때 해시태그 수정도 함께 할 수 있도록 했습니다. 이때는 기존에 있던 해시태그 정보와 새로운 해시태그 정보를 비교해서 소프트 딜리티를 수정하거나 새롭게 등록할 수 있도록 로직을 작성했습니다.)
(해시태그를 여러개 전달하면 페이지네이션을 적용해서 해당 해시태그를 모두 포함하는 게시글을 반환합니다.)
ETC
리뷰 해주실 때 로직에 대한 피드백이나 성능 피드백 많이 해주시면 반영하겠습니다! 다만 수정된 API 연동이 최대한 빨리 진행되어야 해서, 성능 피드백은 PR 머지 후 다른 이슈에서 진행하고자 합니다.
SQL문
hashtag
BoardHashtag
Screenshot
해시태그 생성 API
개발질문 게시판이 아닌 경우 해시태그 등록 시 예외처리. 해시태그가 없다면 정상 등록 가능.
게시글 상세조회 API에서 해시태그 정보를 함께 반환하도록 수정함. 해시태그가 없는 경우는 빈 리스트를 반환. 다른 게시글 조회 관련 API도 마찬가지로 수정완료.
게시글 수정 API에서 해시태그 정보를 받도록 수정. 이때 카테고리가 개발질문인 것만 해시태그 정보를 수정가능하도록 예외처리
해시태그가 모두 포함된 게시글 조회
[자료구조 해시태그]
[JAVA, C++ 해시태그]