이번 주에 새로운 팀 프로젝트에 착수했다.
Spring boot 프레임워크를 사용해서 Spring Security, JWT의 인증/인가 기능을 구현하고 이를 통해 뉴스피드(게시글을 올리고, 조회할 수 있는) 웹서비스를 만든다.
요구사항 명세에 따라 여러 기능별로 팀 분담을 한 상태이다.
내가 맡은 부분은 인가받은 유효한 사용자가 게시물과 댓글에 좋아요(like)할 수 있는 기능 구현이다.
사용자 인증/인가 구현보다 간단한 부분이므로 빠른 시일내에 마무리하고 다른 기능구현도 해보려고 한다.

위 테이블은 팀 내에서 결정한 좋아요 테이블인데, (사용자 ID + 게시글 ID)으로 식별가능한 것으로 판단하여 복합키를 사용하기로 하였다.
@id 두개를 하나의 엔터티에 설정하는 것은 안되더라.
Spring Entity에서 pk 설정은 @id 애너테이션으로 설정하는 방법밖에 모르고 있었기에
복합키 표현 방법, 설정 방법을 찾아보았다.
먼저 복합키 클래스를 따로 정의해야한다.
1. Serializable 구현체 클래스 생성
2. 1에 복합키를 구성할 속성을 @Column 구성한다
주의점으로 위 클래스는 equal, hashCode, 기본생성자가 구현되어야한다고 한다.
-> @EqualsAndHashCode, @NoArgsConstructor 으로 편하게 해결
엔터티에서 복합키를 갖는 방법을 전반적으로 2가지의 방법을 제시한다.
전자의 방법을 택했다.
사용 Repository에 extends JpaRepository<사용 엔터티 클래스, 복합키 클래스>
쿼리메서드
복합키로 find시에는
findById + 복합키 중 원하는 id 컬럼
원하는 id가 여러 개일 시에는
findById + 복합키 중 원하는 id 컬럼1 + And + Id + 복합키 중 원하는 id 컬럼2 + And + ...
사용 예시 코드
public interface PostLikeRepository extends JpaRepository<PostLike, PostLikeId> {
Optional<PostLike> findByIdUserIdAndIdPostId(Long userId, Long postId);
}