콘서트 예약 서비스에는 꽤 많은 쿼리가 수행된다.이번 주차에는 성능 개선할 수 있는 쿼리들을 색출하고, 직접 인덱스를 걸어본 후 성능 비교와 부하테스트를 해 보자.콘서트 예약 서비스의 조회 쿼리들에 대한 인덱스 필요성 조사내가 구현한 콘서트 예약 서비스에서의 도메인들은 유저, 대기열, 콘서트 총 3개이다. 먼저, 유저 도메인에서의 조회 쿼리들은 전부 id(PK) 를 통한 조회이므로 인덱스가 필요 없다.PK는 중복된 값을 가질 수 없으며, 칼럼 중에 가장 카디널리티가 높은 칼럼이다. PK에는 이미 인덱스가 걸려 있다. Mysql같은 InnoDB는 PK에 클러스터드 인덱스를 사용한다. PostgreSQL같은 경우는 InnoDB가 아니라서 논-클러스터드 인덱스를 사용한다.. 정렬을 보장하지 않음. 그리하여 유..
캐싱 분석 보고서캐싱이란?캐싱이란 어플리케이션의 성능을 대폭 상승 시켜주는 대표적인 기술이다.데이터를 일시적인 공간(캐시)에 저장하는 것을 의미하며, 조회 성능이 더 느린 계층(Disk I/O)에서 발생하는 병목 현상을 줄이기 위해 조회 성능이 더 빠른 계층에 임시로데이터를 저장하는 방법이다.캐시는 임시 파일과 임시 데이터들을 저장하는 메모리로, 더 빠르게 관련 데이터들에 접근을 할 수 있게 해준다.그럼 어떤 정보를 저장해야 할까? 바로 가장 많이 조회되는 데이터를 저장하면 된다.하지만 그렇게 단순하지는 않다. 가장 많이 조회되지만, 가장 변경이 많은 데이터를 캐시해버리면 오히려 성능 과부하가 일어날 수 있다.이러한 성능 과부하는 캐시 동기화 때문에 일어나는데, 자세한 내용은 아래 콘서트 예약 서비스의 ..
항플 백엔드에서, 내가 선택한 주제는 콘서트 예약 서비스이다. 콘서트 예약 서비스에서는 아래와 같은 세 가지의 동시성 이슈 발생 가능성이 있다. 유저의 잔액 충전유저의 좌석 예약예약된 좌석 결제동시성 제어와 동시성 제어 방안 분석동시성 제어에는 여러 방안이 있지만 이번에는 낙관적 락, 비관적 락, Redis pub/sub(분산 락), kafka messaging 기법을 분석해 보았다. 동시성 제어 : 낙관적 락(Optimistic Lock)트랜잭션 충돌이 적을 것이라 예상하고, 트랙잭션에 잠금을 걸지 않은 상태로 데이터를 조회하여,수정하는 시점(트랜잭션의 최종 커밋 단계)에 검증해 충돌을 감지하는 동시성 제어 방식이다. 동시 요청 중에 한건만 성공해야 하는 케이스에 적합한 잠금 방식이며, 트랜잭션, Lo..
3,4,5주차에 걸쳐 Chapter2를 진행했다.이번 회고에서는 주차별로 어떤 과정을 거쳤고, 어떤 문제점을 겪고 해결했는지를 정리해 보려고 한다. 3주차3주차에는 서비스 시나리오를 선택하는 과정부터 시작했다. 나는 콘서트 예약 서비스를 선택했는데, 회사에서 Redis를 쓰지 않는 상황이고, Redis를 토이프로젝트로만 경험해보았기 때문에 이번 기회에 대기열 시스템에 대해 학습 겸, Redis를 제대로 공부해보고 싶어서 이 시나리오를 골랐다. 시나리오를 정한 후 프로젝트의 MileStone을 구축했다. 마일스톤을 구축하기 위해 Github Roadmap 기능을 활용했는데, 이처럼 유용한 기능이 숨어있었다니.. 이제야 알게 된 것이 너무 아쉬웠다. (회사에서는 애석하게도 엑셀로 WBS를 작성한다.. 나도 ..
1주차 발제에서는 TDD와 동시성이 주제였는데, TDD는 이제 기본으로 깔고 들어가야 한다.이번 주차에서는 클린 아키텍처와 동시성이다.저번 주차의 동시성은 단일 인스턴스라는 가정하에, DB 없이 락을 구현하는게 과제였다면, 이번 주차는 DB락을 걸어야 했다.자세한 발제 내용은 다음과 같다.토요일 3시, 발제 시간에 허재 코치님께서 클린 아키텍처에 대해 설명해 주셨다.Layered ArchitectureLayered Architecture의 단방향 하위참조 흐름Layered Architecture는 상위 계층이 하위 계층을 호출하는 단방향 흐름을 유지해야 한다.상위 계층은 하위 계층에 직접 의존하며, 이를 통해 필요한 기능을 수행한다.예를 들어 Business Layer가 Persistence Layer를..
1주차이니 플러스백엔드 코스에 대해 간단하게 설명부터 하자면, 항해 99 플러스 백엔드는 현재 재직중인 주니어 개발자들을 대상으로 10주간 기본기를 탄탄하게 다지고, 실무 중심으로 과제를 하나하나 해결해 나가는 코스이다. https://hanghae99.spartacodingclub.kr/plus/be [항해 플러스, 도전을 넘어 개발자 커리어 도약으로백엔드 주니어 개발자로서 성장의 한계를 느끼고 있다면, 시니어 코치진과 함께 10주 몰입을 통해 도약하세요.hanghae99.spartacodingclub.kr](https://hanghae99.spartacodingclub.kr/plus/be)첫주차 발제 내용은 TDD(근데 이제 동시성을 곁들인..)였고, 주말동안 계속 밤을 새서 코드를 구현했다.. 화..