패스트캠퍼스
                
              패스트캠퍼스 환급챌린지 29일차 : 9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online 강의 후기
                이태우(1990년)
                 2025. 4. 2. 22:25
              
                          
            본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
공부 시작 시각 인증

수강 인증 사진

DB 커넥션 스레드 풀
- 애플리케이션에서 DB로 요청하는 것을 위한 연결 작업은 큰 비용이 들기 때문에 미리 연결 세팅하고 관리하는 방법
 - DB가 처리할 수 있는 쓰레드 숫자가 제한되어 있다.
 
JpaPostRepository.java
package org.fastcampus.post.repository.jpa;
import java.util.List;
import org.fastcampus.post.repository.entity.post.*;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
public interface JpaPostRepository extends JpaRepository<PostEntity, Long> {
    @Query("SELECT p.id FROM PostEntity p WHERE p.author.id = :authorId")
    List<Long> findAllPostIdByAuthorId(Long authorId);
    @Modifying
    @Query(value = "UPDATE PostEntity p"
            + " SET p.content = :#{#post.getContent()},"
            + " p.state = :#{#post.getState()},"
            + " p.updDt = now()"
            + " WHERE p.id = :#{#post.id}")
    void updatePostEntity(PostEntity post);
    @Modifying
    @Query(value = "UPDATE PostEntity p"
            + " SET p.likeCount = p.likeCount + :likeCount,"
            + " p.updDt = now()"
            + " WHERE p.id = :postId")
    void updatePostLikeCount(Long postId, Integer likeCount);
    @Modifying
    @Query(value ="UPDATE PostEntity p"
            + " SET p.commentCount = p.commentCount + 1,"
            + " p.updDt = now()"
            + " WHERE p.id = :id")
    void increaseCommentCount(Long id);
}
JpaCommentRepository.java
package org.fastcampus.post.repository.jpa;
import org.fastcampus.post.repository.entity.comment.*;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
public interface JpaCommentRepository extends JpaRepository<CommentEntity, Long> {
    @Modifying
    @Query(value = "UPDATE CommentEntity c "
            + "SET c.content = :#{#comment.getContent()}, "
            + "c.updDt = now() "
            + "WHERE c.id = :#{#comment.getId()}")
    void updateCommentEntity(CommentEntity comment);
    @Modifying
    @Query(value = "UPDATE CommentEntity c "
            + "SET c.likeCount = c.likeCount + :likeCount, "
            + "c.updDt = now() "
            + "WHERE c.id = :commentId")
    void updateCommentLikeCount(Long commentId, Integer likeCount);
}
LikeRepositoryImpl.java
package org.fastcampus.post.repository;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.fastcampus.post.application.Interfaces.LikeRepository;
import org.fastcampus.post.domain.Post;
import org.fastcampus.post.domain.comment.*;
import org.fastcampus.post.repository.entity.like.*;
import org.fastcampus.post.repository.jpa.*;
import org.fastcampus.user.domain.User;
import org.springframework.stereotype.Repository;
@Repository
@RequiredArgsConstructor
public class LikeRepositoryImpl implements LikeRepository {
    @PersistenceContext
    private final EntityManager entityManager;
    private final JpaPostRepository jpaPostRepository;
    private final JpaCommentRepository jpaCommentRepository;
    private final JpaLikeRepository jpaLikeRepository;
    @Override
    public boolean checkLike(Post post, User user) {
        LikeEntity likeEntity = new LikeEntity(post, user);
        return jpaLikeRepository.existsById(likeEntity.getId());
    }
    @Override
    @Transactional
    public void like(Post post, User user) {
        LikeEntity likeEntity = new LikeEntity(post, user);
        entityManager.persist(likeEntity);
        jpaPostRepository.updatePostLikeCount(post.getId(), 1);
    }
    @Override
    @Transactional
    public void unlike(Post post, User user) {
        LikeEntity likeEntity = new LikeEntity(post, user);
        jpaLikeRepository.deleteById(likeEntity.getId());
        jpaPostRepository.updatePostLikeCount(post.getId(), -1);
    }
    @Override
    public boolean checkLike(Comment comment, User user) {
        LikeEntity likeEntity = new LikeEntity(comment, user);
        return jpaLikeRepository.existsById(likeEntity.getId());
    }
    @Override
    @Transactional
    public void like(Comment comment, User user) {
        LikeEntity likeEntity = new LikeEntity(comment, user);
        entityManager.persist(likeEntity);
        jpaCommentRepository.updateCommentLikeCount(comment.getId(), 1);
    }
    @Override
    @Transactional
    public void unlike(Comment comment, User user) {
        LikeEntity likeEntity = new LikeEntity(comment, user);
        jpaLikeRepository.deleteById(likeEntity.getId());
        jpaCommentRepository.updateCommentLikeCount(comment.getId(), -1);
    }
}
학습 인증샷

공부 종료 시각 인증
