들어가기알림 시스템을 구축했으니 이제 RabbitMQ가 감당할 수 있는 메세지 양을 측정해보고 Prefetch Size와 Concurrent Consumer의 관계와 해당 값들이 성능에 미치는 영향을 알아보려합니다. 서버 구조서버 구조는 위처럼 구성돼있습니다. 각 Compute Engine 인스턴스를 모니터링하기 위해 Prometheus, Grafana를 위한 인스턴스를 별도로 구성했습니다. Grafana, Prometheus를 제외한 Spring Boot, RabbitMQ는 도커로 실행중입니다. 이번 글에서는 RabbitMQ의 지표를 살펴볼 예정입니다. RabbitMQ 인스턴스 스펙GCP E2-SmallvCPU 2코어 1RAM 2GBUbuntu 20.04 LTSK6 Script부하는 K6를 이용해 생성..
Spring
들어가기난생 처음으로 오픈소스에 기여를 해보게 됐습니다. 비록 코드가 아닌 문서화 관련이지만 나름 뿌듯한 경험이었고 과정을 기록해놓고 싶습니다. 배경 GitHub - TUK-SPORTIFY/sportify-backend: 2024년 국민체육진흥공단 공공데이터 활용 경진대회 수상작[장려상2024년 국민체육진흥공단 공공데이터 활용 경진대회 수상작[장려상]. Contribute to TUK-SPORTIFY/sportify-backend development by creating an account on GitHub.github.com 공모전에 출품한 Sportify 서비스는 위/경도 위치연산을 통해 사용자 주변 위치의 스포츠 이용권 강좌를 제공해야했습니다. 데이터 베이스를 선택할 때 MySQL이 위치연산도 제..
들어가기현재 개발중인 모각코 플랫폼은 같은 모각코에 속한 참여자들 끼리 모각코 온도(좋아요,싫어요)를 높이고 낮춰야하는 요구사항이 있습니다. 참여자들이 동시다발적으로 온도를 높이고 낮추려한다면 동시성 문제를 피할 수 없습니다. 문제 상황 파악하기먼저 동시성의 정도를 파악해야합니다. 동시성의 정도를 파악하는게 불가능한 경우도 있고 가능하더라도 정확하게 예측하기란 어렵습니다. 실제 기업들은 모니터링과 통계정보를 통해서 어느 정도 분석을 하는 것 같습니다. 모각코 온도를 높이고 낮추는 오퍼레이션은 같은 그룹에 속한 참여자들 끼리만 가능하도록 설계돼있습니다. 한 그룹은 최대 15명까지 수용이 가능하도록 돼 있어 동시성이 높은 상황은 아니라고 판단이 됩니다. 이러한 상황에 적합한 해결책을 찾아보려 합니다. 비관적..
선택 정렬 (Selection Sort) : O(N^2)선택정렬은 선택이라는 이름에서 그 의미가 잘 들어납니다. 오름 차순으로 정렬한다고 가정해보면, 배열 전체를 탐색해 가장 큰 수를 찾아 가장 오른쪽 요소와 Swap합니다. 요소가 10개인 [5,2,3,13,24,1,6,23,52,12] 이러한 배열이 있을 때 0번째 요소부터 순차적으로 가장 큰 값(52)이 위치한 인덱스(8)를 찾은 뒤 12와 52를 Swap합니다. [5,2,3,13,24,1,6,23,12,52] 이제 맨 마지막 요소는 이미 정렬됐으니 다음으로 큰 수(24)를 찾아 12와 Swap하면 됩니다.([5,2,3,13,12,1,6,23,24,52]) public class SelectionSort { public static void m..
들어가기Spring과 React 기반으로 프로젝트를 진행하며 소셜로그인 기능을 도입했는데 굉장한 삽질의 연속이었습니다. 다시는 삽질하지 않도록 그 과정을 남겨 놓고자 합니다. OAuth2의 전 과정을 Spring에서 처리하기 [Spring Security OAuth2 Client]가장 먼저 시도했던 방법으로 Spring Security의 OAuth2 클라이언트를 사용해 정말 간편하게 소셜로그인을 구현할 수 있었습니다. 프론트는 /oauth/authorize/kakao 로 요청을 보내면 Spring의 OAuth2 Client가 그 이후의 모든 과정을 대신 처리해줍니다. 모든 과정을 대신 처리해준다는 의미는 카카오 로그인 페이지로 리다이렉션, Authorization Code 요청, AccessToken 요..
Google S2구글이 개발한 Google S2는 그리드 시스템의 일종입니다. 그리드 시스템이란 아래 사진 처럼 지구를 작은 사각형들로 쪼개 지구 표면을 덮는 시스템을 의미합니다. Goolge은 프렉탈 구조(같은 구조의 반복)인 힐버트 곡선을 이용해서 지구 상의 표면을 끊어지지 않는 선을 이용해 덮습니다. 직접 Google S2 라이브러리 시각화 도구로 그리드 시스템을 확인해보겠습니다. 위 빨간색 사각형을 Google S2에선 Cell이라 부르고 같은 셀안에 포함된 지점(위경도)들은 모두 동일한 Cell ID를 부여받게 됩니다. 이 셀들은 고유한 Level이 존재하는데 Level이 작을 수록 더 넓은 면적을 갖고 Level이 클 수록 더 작은 면적을 같게 됩니다. Cell Level은 우리가 찾고자..
들어가기 현재 개발 중인 아모르각코 [아모르겠고 모각코나 하자] 프로젝트는 위치를 기반으로 사용자들이 모각코 모임을 등록하고 참여할 수 있는 서비스입니다.프로젝트를 구현하며 가장 큰 고민은 위치를 어떻게 저장하고 어떻게 조회할 것인지였습니다. MySQL의 R-Tree 인덱스를 활용하는 방법과 PostgreSQL의 GiST인덱스를 활용하는 방법을 조사해 봤습니다. 이전 포스팅에서 MySQL과 PostGIS의 성능을 비교했고 더 성능이 나은 PostGIS를 선택했었습니다. 위치기반 서비스 데이터베이스 선택 [PostgreSQL GIS]들어가기 위치기반 서비스 데이터베이스 선택 [MySQL]들어가기현재 진행중인 프로젝트인 'AmorGakCo(아모르각코)'는 사용자들이 모각코 모임을 개설하고 사용자의 위치..
들어가기 위치기반 서비스 데이터베이스 선택 [MySQL]들어가기현재 진행중인 프로젝트인 'AmorGakCo(아모르각코)'는 사용자들이 모각코 모임을 개설하고 사용자의 위치를 기반으로 모각코 모임을 조회하는 서비스입니다.서비스 기능의 핵심에는 사용curiosity-s.tistory.com 저번 포스팅에선 MySQL의 공간 검색 쿼리를 통해 DB Query, API Latency를 측정해봤습니다. 이번 포스팅에선 같은 데이터 셋(서울 지역 한식가게 약 4만6천 건)으로 PostgreSQL GIS 쿼리를 알아보고 MySQL과 비교해보겠습니다. Hibernate JPQL Hibernate ORM User GuideStarting in 6.0, Hibernate allows to configure the d..