Java-Spring

· Java-Spring
테스팅 개요 위와 같은 서버 구조에서 알림 시스템을 구축하고 알림 전송 시스템의 생산자서버인 Main Server에 K6로 부하테스트를 수행했습니다. 테스트 목적1. 본 테스트는 서버의 자원을 최대한으로 사용하여 알림 전송이 어느 정도의 TPS를 달성하는지를 측정하는 것 입니다. 2. 테스트를 통해 각종 지표를 분석하고 코드 수정이나 설정 변경을 통해  더 높은 TPS를 달성할 수 있는 지 탐색해보는 것 입니다. 3. 마지막으로 서버의 자원을 최대한으로 활용하지 않고 평이한 트래픽은 어느 정도로 처리가 가능한 지 측정하려 합니다. K6 스크립트30초 간 100명의 가상유저1분 간 300명의 가상유저1분 간 500명의 가상유저개별 가상 사용자의 요청의 간격 2초import http from "k6/http..
· Java-Spring
들어가기알림 시스템을 구축했으니 이제 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를 이용해 생성..
· Java-Spring
들어가기 GitHub - AmorGakCo/Backend: 모두 모여 각자 코딩 플랫폼 [Backend]모두 모여 각자 코딩 플랫폼 [Backend]. Contribute to AmorGakCo/Backend development by creating an account on GitHub.github.com 모각코 모집 플랫폼을 개발하면서 FCM을 이용한 WebPush와 SMS 알림 발송을 구현했습니다. 알림전송의 딜레이를 줄이기 위해 비동기 프로세스가 필요했고 안전한 비동기 프로세스 구축을 위해 RabbitMQ를 선택했습니다. 이 글에서는 알림 발송에 실패한 경우 재시도 전략과 데드레터 처리 과정을 정리해보려 합니다. AMQPRabbitMQ의 특징으로는 가장 먼저 AMQP기반의 메세징 미들웨어라고 할 ..
· Java-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이 위치연산도 제..
· Java-Spring
들어가기현재 개발중인 모각코 플랫폼은 같은 모각코에 속한 참여자들 끼리 모각코 온도(좋아요,싫어요)를 높이고 낮춰야하는 요구사항이 있습니다. 참여자들이 동시다발적으로 온도를 높이고 낮추려한다면 동시성 문제를 피할 수 없습니다. 문제 상황 파악하기먼저 동시성의 정도를 파악해야합니다. 동시성의 정도를 파악하는게 불가능한 경우도 있고 가능하더라도 정확하게 예측하기란 어렵습니다. 실제 기업들은 모니터링과 통계정보를 통해서 어느 정도 분석을 하는 것 같습니다. 모각코 온도를 높이고 낮추는 오퍼레이션은 같은 그룹에 속한 참여자들 끼리만 가능하도록 설계돼있습니다. 한 그룹은 최대 15명까지 수용이 가능하도록 돼 있어 동시성이 높은 상황은 아니라고 판단이 됩니다. 이러한 상황에 적합한 해결책을 찾아보려 합니다. 비관적..
· Java-Spring
선택 정렬 (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..
· Java-Spring
들어가기Spring과 React 기반으로 프로젝트를 진행하며 소셜로그인 기능을 도입했는데 굉장한 삽질의 연속이었습니다. 다시는 삽질하지 않도록 그 과정을 남겨 놓고자 합니다. OAuth2의 전 과정을 Spring에서 처리하기 [Spring Security OAuth2 Client]가장 먼저 시도했던 방법으로 Spring Security의 OAuth2 클라이언트를 사용해 정말 간편하게 소셜로그인을 구현할 수 있었습니다. 프론트는 /oauth/authorize/kakao 로 요청을 보내면 Spring의 OAuth2 Client가 그 이후의 모든 과정을 대신 처리해줍니다. 모든 과정을 대신 처리해준다는 의미는 카카오 로그인 페이지로 리다이렉션, Authorization Code 요청, AccessToken 요..
· Java-Spring
Google S2구글이 개발한 Google S2는 그리드 시스템의 일종입니다. 그리드 시스템이란 아래 사진 처럼 지구를 작은 사각형들로 쪼개 지구 표면을 덮는 시스템을 의미합니다. Goolge은 프렉탈 구조(같은 구조의 반복)인 힐버트 곡선을 이용해서 지구 상의 표면을 끊어지지 않는 선을 이용해 덮습니다.  직접 Google S2 라이브러리 시각화 도구로 그리드 시스템을 확인해보겠습니다.  위 빨간색 사각형을 Google S2에선 Cell이라 부르고 같은 셀안에 포함된 지점(위경도)들은 모두 동일한 Cell ID를 부여받게 됩니다. 이 셀들은 고유한 Level이 존재하는데 Level이 작을 수록 더 넓은 면적을 갖고 Level이 클 수록 더 작은 면적을 같게 됩니다.  Cell Level은 우리가 찾고자..
H@eCh@n
'Java-Spring' 카테고리의 글 목록