TIL
[TIL - 20230515] 게시글 제목과 태그에 검색어를 포함하는 게시글 조회
💻구현 PostService /** * 제목과 태그에 keyword가 포함되는 프로젝트 검색 */ public ResponseDto searchPost(Pageable pageable, String keyword, Member member) { Page allPosts = postRepository.findByIsFinishTrueAndTitleContainingOrTagsTagNameContaining(pageable, keyword, keyword); List postList = getAllPostsByUserDetails(member, allPosts); return ResponseDto.setSuccess(postList); } /** * 프로젝트 전체 조회 */ public ResponseDto..
[TIL - 20230515] @ReqeustParam enum 타입 받기
💻문제점 @ReuqestParam으로 enum 타입을 받아야 했는데, 알아서 변환되지 않기 때문에 String으로 받고, enum 타입으로 변환해주어야 했다. 📃시도 Category Enum 클래스에 ofName() 메서드라는, categoryStr 문자열이 categoryName과 같은 Category를 반환하도록 했다. 하지만 String으로 값을 받고 ofName() 메서드를 통해 변환시켜주자니 받아야 하는 Enum 타입의 데이터가 많은 경우에는 가독성이 떨어질 것이라고 생각했다, 그래서 나는 @RequestParam을 받을 때 부터 Category 타입으로 변환하는 것을 찾아보았다. @Getter public enum Category { FashionStuff("FashionStuff"), Hom..
[TIL - 20230513] 게시글 수정(썸네일 변경 포함)을 위한 MutipartFile과 Dto 함께 받기
💻문제점 게시글 작성과 이미지 업로드를 위해 MultipartFile과 dto를 함께 받아야할 일이 생겼다. @RequestBody와 @RequestParam을 사용해서 데이터를 받으려고 했다. 하지만 실패! public ResponseDto updatePostStory(@PathVariable Long id, @Valid @RequestBody PostInfoRequestDto postInfoRequestDto, @RequestParam(value="ghumbnail") MultipartFile image) { return postService.updatePostInfo(id, postStoryRequestDto, image); } 📃시도 1. PostInfoRequestDto 클래스에 Multipar..
[TIL - 20230510] Service 유효성 검사 메서드 분리
💻문제점 MemberService, PostService, CommentService, LikeService 클래스마다 클래스 내부에서 사용하는 유효성 검사 메서드가 존재한다. 각 클래스에서 사용하는 유효성 검사 메서드는 다음과 같다. MemberService 클래스 // ==== 유효성 검사 ==== private void tokenNullCheck(String token) { if (token == null) { throw new NullPointerException(ExceptionMessage.HAS_NO_TOKEN.getMessage()); } } private void tokenValidateCheck(String token) { if (!jwtUtil.validateToken(token)) ..
[TIL - 20230506] 회원/비회원 전체 게시글 조회 처리
💻문제점 현재 프로젝트에서는 비회원/회원 모두 전체 게시글을 조회할 수 있도록 되어있다. 게시글 조회 API 응답으로 회원이 해당 게시글을 좋아요 했는지 여부를 함께 넘겨주는데, 비회원이면 무조건 false이므로 좋아요 여부를 확인할 필요가 없었고, 회원이면 각 게시글 마다 좋아요를 했는지 여부에 따라 true/false를 넘겨주어야 했다. 📃시도 API의 요청 URL이 /anonymous 시작하는 비회원 조회 API를 만들어서 비회원이면 해당 API로 요청을 보내고, 좋아요 여부는 무조건 false를 넘겨주도록 했다. AnonymousController @RestController @RequestMapping("anonymous") @RequiredArgsConstructor public class A..
[TIL - 202030504] WebSocket+Stomp 채팅방에 직접 참여하지 않은 사용자 구독시키기2 + 자잘한 문제점 해결
💻문제점 1 어제의 문제가 오늘까지 이어진다. 문제점은 다음과 같았다. A가 B에게 채팅을 보내기 위해 1:1 대화하기 버튼을 누른다. 이때 A와 B의 채팅방이 만들어지고, 서버에서 해당 채팅방의 UUID를 넘겨주면 A는 해당 채팅방을 구독한다. 이때 B가 A와 1:1대화하기 버튼을 직접 누르지 않는 이상, 해당 채팅방에 대해 구독되어 있지 않기 때문에 메세지를 받을 수 없다. A가 1:1대화하기 버튼을 눌렀을 때 B도 구독할 수 있는 방법이 없을까? 📃문제점1 시도 시도3. 새로운 방법을 고안했다. 이 방법은 StompSession 객체를 찾을 필요가 없다! 우선, 모든 사용자는 웹 소켓을 연결할 때 자기 자신의 개인 채팅방도 구독한다. ex) /sub/chat/queue유저1 유저2가 유저1에 대해 ..
[TIL - 20230503] WebSocket+Stomp 채팅방에 직접 참여하지 않은 사용자 구독시키기1
💻문제점 A가 B에게 채팅을 보내기 위해 1:1 대화하기 버튼을 누른다. 이때 A와 B의 채팅방이 만들어지고, 서버에서 해당 채팅방의 UUID를 넘겨주면 A는 해당 채팅방을 구독한다. 이때 B가 A와 1:1대화하기 버튼을 직접 누르지 않는 이상, 해당 채팅방에 대해 구독되어 있지 않기 때문에 메세지를 받을 수 없다. A가 1:1대화하기 버튼을 눌렀을 때 B도 구독할 수 있는 방법이 없을까? 이 문제로 이미 이틀을 고민하는 중이다... 생각한 방법은, 사용자가 로그인을 할 때 생성된 WebSocketSession을 sessionId와 함께 저장하는 것이다. Map의 형태로 Key는 sessionId, value는 WebSocketSession 객체를 저장한다. Map sessionMap = new Conc..