1. 백엔드 - 프론트엔드간 jwt를 이용한 통신 문제

    @Override
    public void addCorsMappings(CorsRegistry registry) {
    	registry.addMapping("/**")
    					.allowedOrigins("<http://anonymousmentalcare.s3-website.ap-northeast-2.amazonaws.com>")
    					.allowedMethods("*")
    					.allowedHeaders("*")
    					.exposedHeaders(HttpHeaders.AUTHORIZATION)
    					.allowCredentials(true)
    					.maxAge(MAX_AGE_SECS);
    }
    
  2. 랜덤한 글을 불러오는 로직에서 .findAll()을 하는 문제

    // 랜덤한 게시글 받아오기
    // findAll 하면 전체 목록을 받아오기때문에 리소스 낭비가 심하다.
    // 페이징 기법으로 내용을 게시글이 1개인 모든 페이지로 만들고 랜덤인덱스로 가져오면 된다.
    long qty = postRepository.countByUserNotAndPostIdNotId(user, readingPostIdList);
    int idx = (int)(Math.random() * qty);
    Page<Post> postPage = postRepository.findAllByUserNotAndPostIdNotId(user, readingPostIdList, PageRequest.of(idx, 1));
    
    PostResponseDto postResponseDto = null;
    if (postPage.hasContent()) {
        postResponseDto = new PostResponseDto(postPage.getContent().get(0));
    }
    
    return postResponseDto;
    
  3. 글을 하나도 보지 않은 상태에서는 랜덤 글 불러오기 로직이 작동하지 않는 문제

    private Post randomPostPick(User user, List<Long> readingPostIdList) {
            JPAQuery<Post> query = new JPAQuery<>(entityManager);
            QPost qPost = new QPost("p");
    
            // readingPostIdList 가 비어있으면 내가 작성하지 않은 글 조회,
            // 비어있지 않으면 내가 작성하지 않았으면서 readingPostIdLIst 에 없는 글 조회(내가 읽지 않은 글)
            boolean readingPostIdListIsNull = readingPostIdList.size() == 0;
    
            long cnt = readingPostIdListIsNull ?
                    postRepository.countByUserNot(user) :
                    postRepository.countByUserNotAndPostIdNotIn(user, readingPostIdList);
            long index = (long) (Math.random() * cnt);
            System.out.println("남은 게시글 수 : " + cnt);
    
            QueryResults<Post> queryResults = query.from(qPost)
                    .where(qPost.user.ne(user)
                            .and(readingPostIdListIsNull ?
                                    qPost.user.ne(user) :
                                    qPost.postId.notIn(readingPostIdList))
                    ).offset(index)
                    .limit(1)
                    .fetchResults();
    
            if(queryResults.isEmpty()){
                return null;
            }else {
                return queryResults.getResults().get(0);
            }
        }
    

    (승원: 혹시...

     boolean readingPostIdListIsNull = readingPostIdList.size() == 0;
    
            long cnt = readingPostIdListIsNull ?
                    postRepository.countByUserNot(user) :
                    postRepository.countByUserNotAndPostIdNotIn(user, readingPostIdList);
    

    이 부분도 동적쿼리로 제거할 수 있지 않을까요...?

    )

  4. 댓글이 작성된 게시글이 삭제되지 않는 문제

    @OneToMany(mappedBy = "post", cascade = CascadeType.ALL)
    private List<Comment> commentList = new ArrayList<>();
    
    @OneToMany(mappedBy = "post", cascade = CascadeType.ALL)
    private List<ReadingPost> readingPostList = new ArrayList<>();
    
  5. 이미지 파일 저장을 할때 만약 똑같은 이름의 이미지 파일이 업로드 되는 경우 어떻게 구분 지을 지에 대한 문제

    public ImageDto imageUpload(MultipartFilefile)throwsIOException {
            String path = "/image/";
            String saveLocation = "/home/ubuntu/image/";
    
            //같은 이름의 이미지 파일을 방지하고자 램덤함 UUID를 생성해서 파일이름앞에 붙힌다.
    				UUID uuid = UUID.randomUUID();
            String originFileName = file.getOriginalFilename();
    
            originFileName = originFileName.replace(" .", ".");
    
            String fileName = uuid + "_" + originFileName;
    
            file.transferTo(newFile(saveLocation + fileName));
    
            path += fileName;
            path = path.replace(" .", ".");
    
    				returnImageDto.builder().imageUrl(path).build();
        }
    
  6. 이미지 파일을 서버에 저장은 했지만 이것을 클라이언트에 어떻게 줄것인가?

    똑똑~ 혹시 백엔드 깃허브 링크좀 다시 주실 수 있으실까효...? (승원 튜터) 찾았습니다 ㅋ

    @Configuration
    public classWebConfig implements WebMvcConfigurer{
    ....
    
    @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry
                    .addResourceHandler("/image/**")
                    .addResourceLocations("file:///home/ubuntu/image/");
        }
    }