[StudyWithMe] 영속성 컨텍스트와 관련된 퀴즈 풀어보실 분?
·
프로젝트/StudyWithMe
이번 포스팅에서는 몇 시간의 삽질(?)끝에 문제 원인을 찾았을 때 머리가 띵할 정도로 내가 미웠던,영속성 컨텍스트 그리고 JPQL 그리고 영속, 비영속에 관한 이야기를 하려고 한다. 나의 문제 해결 과정을 퀴즈처럼 나열하며 포스팅 할 것이기에 "나는 JPA, 영속성 컨텍스트, JPQL에 자신있어"라는 사람이라면 바로 문제를 알아차릴 수도 있다. 하지만, 나는 문제를 해결하며 "아.. 내가 아직 JPA, 영속성 컨텍스트, JPQL를 잘 알고 있는것이 아니구나"라고 느끼게 되었다.  자 그럼 퀴즈 시작해보자.  문제 상황 문제 상황을 설명하려면 일단 코드를 보는 편이 좋을 것 같다. StudyRoom 삭제 관련 메서드@Transactional public void delete(Long studyRoom..
[StudyWithMe] 프로젝트에서의 쿼리 고민 일기(계속 추가 예정)
·
프로젝트/StudyWithMe
`StudyWithMe` 프로젝트를 진행하며, 내가 좀 신경 쓴 쿼리들(JPQL, Native Query 등)에 관해 포스팅하려고 한다.(지속적으로 이 포스팅에 추가할 예정이다.) 엄청나게 어려운 쿼리들을 위주로 작성한다는 느낌보다는 내가 새롭고 기록해두면 좋겠다고 생각하는 것들을 포스팅한다.  시작!  요구사항 1. "스터디 룸 이용후기에 관한 답글"은 해당 "스터디 룸의 관리자"와 "이용후기 작성자"만 생성할 수 있다. 기본적으로, 이용후기를 작성한다는 개념 자체가 이용을 한 사람이 달아야 하며,이용후기에 관한 답글도 스터디 룸 관리자 혹은 이용후기 작성자만 다는 것이 맞다.  그래서, 비즈니스 로직에서 해당 작업을 적절히 확인을 해주어야 한다. 이때, 프론트엔드에게 스터디 룸의 ID를 받아오고 스..
[StudyWithMe] 멀티 스레드에서 트랜잭션 작업 간 정보 불일치 문제
·
프로젝트/StudyWithMe
이번 포스팅에서는 `StudyWithMe`에서 부족했던 나의 트랜잭션의 작동 지식에 관해 포스팅 하려고 한다.  `StudyWithMe`에서 좋아요, 이용후기 작업 시,`Database Lock`으로 스터디 룸에 관한 동시성 문제를 대비했다.  엥? 좋아요, 이용후기인데 왜 스터디 룸 동시성 문제를 해결해? (이유는 스터디 룸에 스터디 룸 좋아요, 이용후기 개수/평점에 대해 스터디 룸으로 반정규화를 해놨기 때문에 동시 접근 시 제대로 저장되지 않을 수 있기 때문이다.)  그럼 왜 반정규화를 했는데? 목록 조회같은 많은 스터디 룸 조회 작업이나 상세 조회 작업에서 매번 좋아요, 이용후기에 관해서집계 함수를 사용하는 것은 비용이 클 것으로 판단했기 때문이다. 그래서 미리 스터디 룸에 반정규화를 해놓았다. S..
[StudyWithMe] 페이징 시 Offset 방식 대신 Cursor 방식 적용(약 111배 성능 향상)
·
프로젝트/StudyWithMe
이번 포스팅에서 작성해 볼 내용은 `StudyWithMe` 프로젝트에서 페이징 방식을`Offset` -> `Cursor` 방식으로 변경하면서 사용한 방법과 성능 차이에 관해 포스팅 하려 한다.  본격적인 시작에 앞서, `Pagination`, `Offset`, `Cursor` 방식에 대해 간략하게 알아보고 가자.만약, 관련 페이지네이션 지식을 전부 안다고 하면 넘어가도 된다. 더보기페이지네이션? (Pagination, 페이징)만약, 우리가 웹 페이지를 로드할 때, 동시에 모든 데이터를 다 불러와서 처리한다면 가장 먼저 걱정되는 건 무엇일까? 그건 당연히 성능이다. 그렇기에 페이지네이션은 거의 필연적으로 구현해야 하는 기능이다. 즉, 페이지네이션이란?`특정한 정렬 기준 + 필요한 개수`의 조건에 맞춰 데이..
[StudyWithMe] 스터디 룸 UPDATE API 작성 시 했던 고민들
·
프로젝트/StudyWithMe
이번 포스팅에서는 `StudyWithMe`의 스터디 룸 Update API를 구현하면서 생각한 고민들에 관해 포스팅 하려고 한다. 설명하기에 앞서, 아니 UPDATE API를 작성하는데 고민을 왜해? 그냥 하면 되는거 아니야? 라고 생각할 수 있다. 물론, 맞는 말이다. 하지만, 스터디 룸과 연관되어 있는 테이블들이 굉장히 많다보니 이런 고민이 생기게 되었다. 스터디 룸 연관 테이블스터디 룸 이미지스터디 룸 태그스터디 룸 휴무일스터디 룸 옵션스터디 룸 타입스터디 룸 예약 조건과 같은데 이걸 하나의 API에서 다 처리하자니 코드도 길어지고, 해당 API가 너무 무겁다는 생각이 들었다.  하나의 Update API로 전부 처리 우선, 하나의 API로 처리하려고 했던 코드의 내용은 아래와 같다.(작성하다가 포..
[StudyWithMe] Flyway의 다양한 활용과 조심
·
프로젝트/StudyWithMe
`StudyWithMe` 프로젝트를 진행하며 처음으로 `DB Migration Tool`인 `Flyway`를 사용하고 있다.  아래는 내가 `Flyway`에 관해 작성한 포스팅이다. 2024.12.01 - [Infra/Flyway] - [Flyway] Flyway - database migration tool [Flyway] Flyway - database migration tool1. Flyway 소개 우선, `Flyway` 공식 홈페이지에서는 `Flyway`를 다음과 같이 정리하고 있다."Flyway is an open-source database migration tool" 해석하자면 오픈 소스로 누구나 사용할 수 있는 데이터베이스 마이hdbstn3055.tistory.com 2024.12.01 -..