본문 바로가기

Project5

티켓 발급 서비스에서 JPA 낙관적 락 구현 1. Entity에 @Version 필드 추가2. 트랜잭션 설정3. @Retry 어노테이션을 사용한 자동 재시도 구현 aop와 retry 의존성 추가 // Retry implementation "org.springframework.retry:spring-retry" // AOP runtimeOnly 'org.springframework.boot:spring-boot-starter-aop'  concert.findbyId > 현재 version값을 1차캐시에 저장     트랜잭션 종료, 커밋 시점에 DB의 version값과 1차 캐시에 저장된 값을 비교함     버전 일치 > 버전 값 증가 / 버전 불일치 -> OptimisticLockException 발생 -> Retry     E.. 2025. 3. 27.
[404 NOT DELIVERY] Review 가게별 조회 기능 개선하기 프로젝트에서 리뷰와 코멘트를 담당으로 진행하였으며 ERD는 아래와 같이 설계를 진행했다.  리뷰와 코멘트는 1대1관계이고 Comment가 review_id를 갖는 관계이다.여기서 가게기준으로 리뷰와 코멘트를 한번에 출력될 수 있도록 조회 기능을 만드는 것이 문제였는데,처음 구현했던 코드의 문제점이 보여 리팩토링을 진행했다. 기존 코드의 문제점1. N+1 문제 : reviewRepository를 통해 리뷰 리스트를 가져온 후, 각 리뷰에 대해 commentRepository를 사용해 코멘트를 개별적으로 조회, 리뷰 13건과 코멘트 13건 기준으로 총 27개의 쿼리(1개는 가게 확인 쿼리)가 실행되어 데이터베이스의 부하를 증가시키고 성능을 저하시킴2. 각 리뷰마다 별도의 쿼리가 실행되면서 네트워크 I/O가 .. 2025. 1. 13.
[newsfeed] Like 기능의 성능 개선하기 고민되는 코드는 CommentLike 부분으로여러 검증을 위해 Post와 Comment, User까지 조회를 하고 있다.아래는 내가 직접 작성한 코드인데 클라이언트로부터 PathVariable로 postId와 commentId를 받고 있다.userId는 세션을 비교하고 있다.해당 기능의 흐름은이렇다. 1. 해당되는 게시글 찾기2. 해당되는 댓글 찾기3. 댓글을 단 유저와 현재 접속하고 있는 유저가 동일한지 확인(본인의 게시글에 좋아요를 누를 수 없음)4. 게시글을 작성한 유저와 친구인지 아닌지 확인(본인이면 넘어감)5. comment가 해당 post에 달린게 맞는지 확인6. 현재 유저가 이 코멘트에 좋아요를 누른 기록이 있는지 확인6-1. 있다면 해당 행 제거, 댓글 엔티티에 있는 좋아요 카운트 감소6-.. 2024. 12. 30.
[newsfeed] 댓글과 게시글의 '좋아요' 기능, 어떤 식으로 구현하는게 좋을까? 프로젝트 상의 게시글(Post)과 댓글(Comment)에 각각 좋아요 기능이 구현되어야 했다.첫 번째 구현한 방법은 아래 ERD 다이어그램과 같다.  좋아요 기능이 유저-게시글 / 유저-댓글의 형태로 중복이 되지 않게 하나만 존재하게 하는 방법에 대해서도 고민 했는데, 처음에는 검증을 하려고 생각했으나 더 좋은 방법이 있었다.  다중 컬럼을 아래 코드와 같이 unique 제약조건을 사용해 묶었다. 여기서의 문제점은 굳이 UniqueConstraint를 사용할 필요가 없었던 것이다.Service에서 해당되는 행이 존재하면 삭제하는 동작이 있기 때문이다.@Table(uniqueConstraints ={ @UniqueConstraint(name = "user_like_comment", columnN.. 2024. 12. 30.
[Todolist] ToDoList 과제 1차 TIL - 필수 구현까지 1차 API 설계  최종 API 설계(Notion 으로 작성)  ERD 설계 : 하나만 나오는게 맞나? 라고 계속 생각했는데 필수과제에선 하나만 나오는게 맞다.도전 과제를 염두해두고 만든 것러프 버전 내용Spring jdk : corretto 17.0.13Spring Boot : 3.3.6Dependencies : Spring Web, Lombok, MySQLDriver, Spring Data JDBC, ThymeleafDatabase : MySQL   사용한 테이블 생성 및 Postman raw  -- User 테이블 생성CREATE TABLE USER ( USER_ID VARCHAR(255) PRIMARY KEY, -- 사용자 ID, 기본 키 USER_NAME VARCHAR(100), .. 2024. 12. 5.