경기요 - 경기대학교 주변 맛집 모음[ 배포 링크 ] [ 프로젝트 깃허브 ]이용자들이 직접 추천하고 싶은 맛집 정보 등록을 요청하고 등록된 맛집에 대한 평가가 이루어질 수 있는 맛집 지도 플랫폼입니다. 개요이전 포스팅에서 리뷰 생성 API가 목표 TPS를 달성하지 못하는 것에 대해 아래와 같은 문제들이 있음을 확인하고 그 해결 과정에 대해서 다루었었습니다. 문제외부 리소스를 수행하는 작업(이미지 s3 업로드)이 같은 트랜잭션에 묶여있다 -> 비효율적인 커넥션 사용리뷰와 이미지가 강하게 결합되어 있다 -> 변경 사항이 전파되어 유지보수에 좋지 않음 데이터 원자성을 보장할 수 없다 -> 리뷰 생성 Commit 실패하여 롤백되더라도 이미지 생성 동작은 수행됨하나의 쓰레드에서 동기적으로 수행되어 요청 처리 속도..
경기요 - 경기대학교 주변 맛집 모음 [ 배포 링크 ] [ 프로젝트 깃허브 ] 이용자들이 직접 추천하고 싶은 맛집 정보 등록을 요청하고 등록된 맛집에 대한 평가가 이루어질 수 있는 맛집 지도 플랫폼입니다. 개요 이전 포스팅에서 이어지는 내용입니다. 현재 리뷰 생성 API의 목표 TPS는 20 ~ 60이지만, 마지막 테스트에서 11.3이라는 결과를 얻었으며 추가적인 개선을 진행하기 위해 리뷰 생성 과정에서 이미지 생성에 대한 동작을 분리하기로 결정하였었습니다. 이를 최근에 관심을 갖고 공부 중인 이벤트 주도형 개발로부터 아이디어를 얻어 해결해 나간 과정을 다뤄보도록 하겠습니다. 문제 인식 과정 @Override @Transactional public void createReview(UserInfo user..
Steady - 개발 스터디 및 프로젝트 인원 모집 사이트 [ 배포 링크 ] [ 프로젝트 깃허브 ] 자체적으로 제공하는 폼과 유저 평가를 통해 외부 서비스에 의존하지 않고 검증된 스터디 인원을 모집할 수 있는 서비스입니다. 개요 이전 포스팅에서 MySQL 슬로우 쿼리를 최적화하는 과정을 진행하였습니다. 이번 포스팅에서는 최적화 된 쿼리를 바탕으로 QueryDsl을 통해 Pagination을 구현하는 과정을 진행하였습니다. 아래는 Pagination에 사용될 SQL 쿼리입니다. SELECT DISTINCT s.* FROM steadies s JOIN (SELECT DISTINCT s.id, s.promoted_at FROM steadies s LEFT JOIN steady_likes sl ON s.id =..
이번 포스팅에서는 데브코스 팀 프로젝트 진행 중에 경험했던 페이징 쿼리 최적화 과정에 대해서 소개하려고 합니다. Steady - 배포주소, 백엔드 깃허브개발자들을 대상으로 스터디 또는 프로젝트 인원을 모집할 때 구글 폼과 같은 외부 서비스에 의존하지 않고도 검증된 인원을 모집할 수 있도록 서비스 내에서 자체적으로 폼을 제공하고, 유저 평가 시스템을 통해 인원으 모집할 수 있는 서비스입니다. 위 이미지를 통해 알 수 있듯이 steady는 기술 스택, 모집 분야, 좋아요와 `일대다 관계`를 맺고 있습니다. 이러한 관계를 맺고 있는 데이터들이 존재할 때 동적으로 필터링 또는 검색 조건을 통해 조회하기 위해서 `QueryDsl`을 사용하였습니다. QueryDsl을 통해 작성한 메서드와 당시 DB 상황은 다음과..
🟦Test Fixture 개발에 있어서 가장 중요한 요소 중 하나인 테스트 코드를 작성하다보면 여러가지 객체들의 상태나 행위에 대한 검증이 필요하게 되고, 이를 테스트하기 위한 테스트 객체(더미 객체)들을 만들게 됩니다. 그리고 우리는 이러한 객체들을 보통 `Test Fixture` 라고 부릅니다. Test Fixture의 정의는 무엇일까요? A test fixture is a device used to consistently test some item, device, or piece of software. Test fixtures are used in the testing of electronics, software and physical devices.위 위키피디아 정의를 정리하면 일관된 테스트를 ..