2024-12-08 개발일기
·
개발 기록
요즘 `StudyWithMe`라는 프로젝트를 진행하면서 정답인지는 모르겠으나 코드를 하나하나 짤 때마다 왜를 고민하면서 코드를 작성하고 있다. 그렇게 코드를 작성하다보니 지금 비공개로 돌린 포스팅 해야 할 거리들이 굉장히 많은데.. 현재 비공개로 돌려 놓은 `StudyWithMe`의 포스팅 거리는 아래와 같다. Postgresql 기본 키 생성 전략 Identity vs SequenceFlyway의 활용 방법과 조심해야 될 부분스터디 룸 UPDATE API 작성 시 고민의 흔적들단위 테스트를 작성하는 것에서 통합 테스트로 변경하게 된 이유Offset 방식 대신 Cursor 방식을 활용하게 된 이유와 그 과정동시성 문제 확인을 위해 테스트 코드를 작성하며 다른 스레드에서 수행됨에 따른 트랜잭션 개념 이후로..
[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 -..
[StudyWithMe] PostgreSQL을 처음 접해보며
·
프로젝트/StudyWithMe
이번 `StudyWithMe` 프로젝트에서 `PostgreSQL`을 사용하기로 했다. 지금까지 `MySQL`만을 사용해왔었는데, 같이 프로젝트 하는 친구의 적극 유도(?)로 `PostgreSQL`을 사용하게 되었다. 기존에 `PostgreSQL`은 `MySQL`과는 달리 `SEQUENCE`라고 불리는 독립 오브젝트를 제공한다고만 알고 있었다.즉, "`AUTO_INCREMENT`가 아닌 `SEQUENCE`를 이용해 미리 ID값을 불러와서 사용하는 것이 가능하다." 까지 알고 있었다. 그래서, 이번 포스팅에서는 위와 같이 알고만 있던 `PostgreSQL`에서`PostgreSQL`과 `MySQL`의 차이.`PostgreSQL`를 조금 사용해보며 알게 된 사실.기본 키 생성 전략을 `SEQUENCE`가 아닌 ..