이번 포스팅에서는 멀티 프로젝트에 대해서 이야기해보고자 한다. 그전에, 멀티 프로젝트에 반대되는 것인 단일 프로젝트에 대해 먼저 이해하면 좋을 것 같다. 📌 단일 프로젝트 단일 프로젝트는 프로젝트를 하나로 구성한다는 의미를 가지는데, 모든 기능들이 한 패키지 아래에 존재하는 형태를 말한다. spring boot 프로젝트를 기본적인 설정을 하고 생성하면 보이는 형태가 단일 프로젝트와 같다. 즉, 하나의 프로젝트 안에 모든 도메인과 기능이 포함된 것을 말한다. 📌 멀티 프로젝트 멀티 프로젝트는 단일 프로젝트와 달리 여러 개의 서브 프로젝트(혹은 모듈)로 분리된 형태를 말한다. 그렇다면, 멀티 프로젝트를 언제 왜 사용해야 할까? 💡 When?프로젝트의 규모가 커 유지보수와 확장이 필요할 때.여러 팀이..

offset 기반 페이징 방식의 단점서버 진화 ~~~ (서버 스케일업)[hikaricp connection is not available] - 테이블은 많지만 회전율은 낮은..6명이 동시에 요청하면 OOM 발생하는 서비스영어회화 스터디 서비스를 개발하면서 부하 테스트를 위happygimy97.tistory.com 지난 포스팅에서는 offset 방식의 단점에 대해 알아본 후, more 방식으로 업데이트했을 때의 성능 개선이 얼마큼 일어나는지를 확인해 보았다. 이번 포스팅에서는 인덱스를 설정으로 성능 개선을 한 과정에 대해 이야기를 해보고자 한다. 📌 인덱스 설정 부하 테스트를 진행 중인 API는 검색 API였고, ORDER BY 절이나 where 절에 쓰이는 조건은 몇 가지 중에서 랜덤하게 설정되도록..
이번 포스팅에서는 인덱스에 대해서 이야기해보고자 한다. 인덱스는 개발하면서 여기저기에 자주 나오는 용어이지만, 막상 인덱스가 뭐예요?라는 질문을 받으면 수박 겉핥기식의 답변만 내놓았었다. 때문에 이번 기회에 인덱스를 제대로 학습하고 정리해보려 한다. 📌 인덱스 인덱스는 데이터를 빠르게 검색하도록 도와주는 도구인데, 데이터의 위치를 참조하거나 정렬된 구조를 가진다. 인덱스는 마치 도서관의 책을 찾는데, 위치를 모르고 찾는 것과 위치를 알고 찾는 것의 차이라고 볼 수 있다. 도서관이 데이터베이스이고, 책이 테이블의 데이터, 책의 위치가 인덱스인 것과 같다. 때문에, 인덱스로 인해 데이터베이스의 테이블 내 데이터를 효율적이고 빠르게 찾을 수 있게 된다. 인덱스가 데이터를 빠르게 찾도록 도와주는 도구라면, ..

서버 진화 ~~~ (서버 스케일업)[hikaricp connection is not available] - 테이블은 많지만 회전율은 낮은..6명이 동시에 요청하면 OOM 발생하는 서비스영어회화 스터디 서비스를 개발하면서 부하 테스트를 위해 클라우드 환경에 필요한happygimy97.tistory.com 지난 포스팅에서 MySQL 서버 스케일업을 하기 전과 후의 평균 응답 속도 차이를 살펴보았다. 이번 포스팅에서는 offset 기반 페이징 기법을 cursor 기반 페이징 기법(more 방식이라고 함)으로 변경한 이유와 그 결과에 대해 이야기해 보고자 한다. 📌 offset 기반 페이징 방식offset 기반으로 페이징을 처리할 때, offset과 pageSize가 필요한데, 아래와 같은 쿼리가 있다고 ..

[hikaricp connection is not available] - 테이블은 많지만 회전율은 낮은..6명이 동시에 요청하면 OOM 발생하는 서비스영어회화 스터디 서비스를 개발하면서 부하 테스트를 위해 클라우드 환경에 필요한 서비스들을 컨테이너 환경으로 실행했다.클라우드 서비스는 Naverhappygimy97.tistory.com 지난 포스팅에서 offset 기반의 페이징 기법을 사용해서 검색 API를 테스트한 과정과 hikaricp pool이 부족해 DB와 연결 가능한 커넥션이 더 이상 없을 때 발생하는 에러에 대해서 이야기를 했었다. 그런데 찾아보니 vuser를 100 이상으로 설정하여 테스트하는 경우는 없는 것 같았다. 심지어 지인 중에 시니어분들이 몇 분 계셔 여쭤보니 실무에서도 vuser 4..

6명이 동시에 요청하면 OOM 발생하는 서비스영어회화 스터디 서비스를 개발하면서 부하 테스트를 위해 클라우드 환경에 필요한 서비스들을 컨테이너 환경으로 실행했다.클라우드 서비스는 Naver cloud platform의 서비스들을 이용했다. 🛠happygimy97.tistory.com 📌 테스트 배경 지난 포스팅에서 50만 건의 데이터를 findAll()로 모두 조회하는 API를 테스트했다가 6명의 유저(vuser)만으로 힙메모리 초과로 OOM이 발생했었다. 이를 해결하고자 offset과 pageSize를 설정해 50만 건 중 조건에 맞는 데이터를 pageSize만큼 가져오는 것을 테스트했고, 에러 없이 정상적으로 테스트를 수행하는 것을 확인할 수 있었다. 이번 포스팅에서는 vuser를 늘려가며 테스..