일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- java
- IAC
- blockchain
- Database
- nestjs
- terraform
- TypeScript
- 온라인강의
- ChatGPT
- 유데미
- 도서
- terraform cloud
- docker
- Redis
- 블록체인
- Nestia
- 이더리움
- class-transformer
- chai
- mysql
- 백엔드
- restdocs
- nodejs
- 리뷰
- typeorm
- Mocha
- 글또
- corretto
- spring
- gradle
- Today
- Total
목록개발/데이터베이스 (3)
끄적끄적
백엔드를 개발하다보면 가장 흔하게 처리해야 하는 부분중 하나가 페이지네이션 부분이다. 그 중에서도 요즘에는 커서 기반의 페이지네이션 처리를 많이 수행하며 단순히 sequence 로만 처리하는 것이 아니라 여러 조건하에서 정렬할 필요가 있다. 그 때 커서 페이지네이션 처리를 하다보면 중복된 커서 데이터에 의해 특정 레코드를 건너띄는 경우가 자주 발생하며 이를 처리할 필요가 있다. 이번 포스팅에서는 이런 문제에 대한 예시와 해결방법들에 대해서 정리해볼 생각이다. 들어가기 전에 들어가기 전에 테스트를 할 테이블을 정의했다. 상품이라는 테이블이 있으며 seq 를 PK 로 가지고 있으며 price 와 created_at 을 인덱스로 가지면서 이를 활용해 상품을 최신순 혹은 가격순으로 정렬하고자 한다. 또한 테..
운영중인 서비스에서 Dead Lock 이 발생한다는 알람을 받은 적이 있었다. 트래픽이 없을 때는 문제 없었는데 최근 이벤트를 진행하면서 순간 트래픽이 몰리다보니 Gap Lock 에 의해 Dead Lock 이 발생하면서 예상치 못한 에러가 발생한 것이였다. 그래서 Lock 에 대해 다시 한번 공부하는 기회가 되어서 이에 대한 간단한 이야기와 회사에서 실제로 Dead Lock 을 어떤 방법을 활용해서 해결했는지 예시와 함께 정리해볼까 한다. 포스팅은 MySQL(InnoDB) 기준으로 작성하였고 PostgreSQL 의 경우 Lock 방식이 다르므로 적용되지 않는 다는 점은 기억하면 좋겠다. 들어가기 전에 포스팅에서 예시를 들기 위해 아래 ERD 의 구조를 사용하려 한다. 채팅방과 유저가 존재하며, 채팅방 참..
웹 백앤드 어플리케이션 개발을 할 때 대부분의 서비스에서 여러 테이블의 join 은 필수적으로 일어난다. 그런데 많은 테이블들을 join 하면서 성능이 떨어지는 경우가 많이 생긴다. 이를 해결하기 위해 join 되는 컬럼에 인덱스를 건 뒤, 그 인덱스를 타게 하기 위한 수많은 쿼리 튜닝 작업을 진행하곤 한다. 하지만 쿼리 튜닝 작업 전에 가장 기본적으로 성능 향상을 시킬 수 있는 방법이 있는데 db side 에서 join 을 사용하는 것이 아닌 application side 에서 join 을 진행하는 것이다. 이번 포스팅에서는 실제로 db side join 을 application side join 으로 변경하면서 성능 향상을 한 경험에 대해서 이야기할 생각이다. 들어가기 전에 본문으로 들어가기 전에 포..