백엔드 - 프론트엔드간 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);
}
랜덤한 글을 불러오는 로직에서 .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;
글을 하나도 보지 않은 상태에서는 랜덤 글 불러오기 로직이 작동하지 않는 문제
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);
이 부분도 동적쿼리로 제거할 수 있지 않을까요...?
)
댓글이 작성된 게시글이 삭제되지 않는 문제
@OneToMany(mappedBy = "post", cascade = CascadeType.ALL)
private List<Comment> commentList = new ArrayList<>();
@OneToMany(mappedBy = "post", cascade = CascadeType.ALL)
private List<ReadingPost> readingPostList = new ArrayList<>();
이미지 파일 저장을 할때 만약 똑같은 이름의 이미지 파일이 업로드 되는 경우 어떻게 구분 지을 지에 대한 문제
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();
}
이미지 파일을 서버에 저장은 했지만 이것을 클라이언트에 어떻게 줄것인가?
똑똑~ 혹시 백엔드 깃허브 링크좀 다시 주실 수 있으실까효...? (승원 튜터) 찾았습니다 ㅋ
@Configuration
public classWebConfig implements WebMvcConfigurer{
....
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/image/**")
.addResourceLocations("file:///home/ubuntu/image/");
}
}