Project(39)
-
[Cinemagram] Popular 페이지 렌더링 - (11)
저번 포스팅까지 해서 좋아요 기능 구현이 끝이 났습니다. 이제 드디어 Popular페이지를 구현하도록 하겠습니다.복습해 보자면, Popular페이지는좋아요가 있는 사진들을 출력하는 페이지로 좋아요가 많은 순으로 나오게 됩니다. 이번 포스팅에서는 쿼리를 짜는 부분이 중점적으로 나옵니다. 최종 쿼리가 아닌 단계별 쿼리를 소개할 예정입니다. 이 정도는 앞으로도 짤 수 있게 계속해서 연습이 필요합니다.익숙해져야 할 개념서브 쿼리 인라인 뷰 : FROM절에 사용하는 서브 쿼리 스칼라 서브쿼리 : SELECT절에 사용하는 서브 쿼리그룹 바이조인 좋아요가 있는 이미지 출력 쿼리관련 클래스ImageControllerImageServiceImageRepository 로직과 nativeQuery 넣을 위치ImageCo..
2023.01.26 -
[Cinemagram] 좋아요 기능 구현 - (10)
좋아요 기능 구현, Popular 페이지 렌더링을 연달아 구현할 예정입니다. Popular 페이지란?좋아요가 많은 순서대로 Image를 출력하는 페이지입니다. 따라서 그전에 좋아요 기능을 먼저 구현해 보도록 하겠습니다. 좋아요 기능 구현모델 만들기 & 연관관계 매핑엔티티명은 MYSQL에 LIKE 함수가 존재하므로 Likes로 만들었습니다.😁 @Transient엔티티 필드로는 필요한데, DB 칼럼으로 만들고 싶지 않을 때 사용하는 어노테이션 어떤 필드들이 필요할까?우리가 SNS에서 어떤 로직으로 좋아요를 누르는지 생각해보면 됩니다.즉, 어떤 이미지를 누가 좋아했는지 알아야 합니다. 또한 특정 유저는 한 이미지를 딱 한 번만 좋아요 누를 수 있습니다. (다중 칼럼 UNIQUE 제약 조건)- 좋아요..
2023.01.25 -
[Trouble Shooting] 무한 순환참조 이슈
토이 프로젝트를 하면서 순환참조 문제가 종종 발생하였습니다. 처음에는 당황했지만 차근차근 코드를 따라가 보니 해결할 수 있었습니다. 이번 포스팅에서는 크게 두 Case로 나눠서 어떻게 오류를 해결했는지 과정을 작성해 보겠습니다. Case 1. Jackson 라이브러리를 사용하여 엔티티를 JSON으로 변환 시, 무한참조 이슈 관련 모델UserImage Imageimport com.fasterxml.jackson.annotation.JsonIgnoreProperties;@NoArgsConstructor@Getter@Entitypublic class Image extends BaseTimeEntity { ... @JoinColumn(name = "userId") @ManyToOne(fet..
2023.01.18 -
[Cinemagram] 팔로우 기능 구현 - (9)
원래 이 기능은 가장 나중에 하려고 했습니다. 랜더링 하는 부분들을 구현한 후에 조금 복잡한 기능을 구현하는 게 정신건강에 좋을 것 같다는 판단이었습니다. 하지만 여러 테스트를 하던 와중 이와 같은 에러가 발생했습니다. Postman으로 구독 API 테스트 中ERROR UsernamePasswordAuthenticationFilter : An internal error occurred while trying to authenticate the user. org.springframework.security.authentication.InternalAuthenticationServiceException: UserDetailsService returned null, which is an interface c..
2022.12.26 -
[Trouble Shooting] JPA DTO Mapping - QLRM 라이브러리 사용
QLRM 라이브러리란DB에서 Result 된 결과를 자바 클래스에 매핑해주는 역할을 합니다. Repository에 nativeQuery를 직접 짜서 날리면 되는 거 아닌가?Repository에 nativeQuery를 직접 짜서 넣으면 되는데 왜 굳이 QLRM 라이브러리를 추가해서 작업하는 것일까요? 그 이유는 특정 Repository는 특정 타입(Follow 모델)만 리턴하기 때문입니다. (상속받은 클래스 타입의 모델만 리턴) 따라서 직접 짠 쿼리의 결과가 특정 타입(Follow 모델)이 아니라면 Repository에 nativeQuery를 넣을 수가 없습니다. 실습할 코드는 DTO를 리턴해야 함이처럼 DTO로 받아 내야 하는 쿼리의 경우 JpaRepository를 상속받은 인터페이스로 nativeQu..
2022.12.23 -
[Cinemagram] Feed 페이지 렌더링 - (8)
이번 포스팅은 어떤 기능을 구현할까 고민이 있었습니다. 남은 기능 중 큰 꼭지인 팔로우 기능을 구현하고자 했지만이번에는 조금 쉬운 기능을 구현하며 잠시 쉬어가는 챕터로 만들기로 결정했습니다. Feed 페이지 랜더링Cinemagram의 Feed 페이지란?로그인 한 유저가 팔로우한 유저들이 올린 이미지를 볼 수 있는 페이지입니다. 그럼 Feed 페이지로 갈 때 들고 가야 할 데이터는 어떤 게 있을까요?User 정보Image 정보Imagecaption(좋아요, 댓글은 나중에 구현) 어떤 쿼리를 짜야하는가?관련 Repository에 nativeQuery를 짜려고 하는데, 이때 어떤 쿼리를 넣어야 할까요? ❗❗ 당장 어떤 쿼리를 짜야할까 생각하지 말고 다음의 스텝을 따라가 보자 ❗❗1. 과연 나는 어떤 걸..
2022.12.19