공간 데이터 + 공간 인덱스를 통한 성능 조회
·
카테고리 없음
개요진행하고 있던 프로젝트의 핵심 기능은 지도를 통해 여러 주택 정보를 제공해주는 것이다. 주택의 정보는 공공데이터 포털에서 가져오고, 주택의 위치는 위도와 경도를 통해 제공된다.이때 사용자에게는 모든 주택 정보가 아닌 특정(현재) 위치를 기준으로 반경 거리 이내의 주택만을 조회하도록 하였다 따라서 이 프로젝트의 핵심 기능인 주택 정보 조회의 성능이 중요하다고 판단했기 때문에, 주택 정보 조회의 성능 테스트 진행 후 공간 인덱스를 통해 성능 개선을한 내용을 소개하려고 한다. 테스트는 진행하고 있던 프로젝트를 간소화하여 테스트를 진행했다. 테스트테스트 환경은 총 5만 개의 데이터를 생성하였고, 편의를 위해 (0,0)에서 반경 5000m이내를 조회하여 100개의 데이터를 조회하도록 구성하였다.1. 직접 하버..
Spring + Elasticsearch 전문 검색 인덱스 적용 - 성능 테스트 (3)
·
Project/Elasticsearch의 전문 검색 인덱스 성능 비교
6. Elasticsearch의 전문 검색 인덱스 성능 테스트테스트는 빠르고 간단하게 연동할 수 있는 H2를 활용하여 삽입 및 검색에 대한 성능 테스트를 진행할 예정이다 H2 연동은 in-memory 기반 손쉽게 연동하였다spring: ... datasource: driver-class-name: org.h2.Driver url: jdbc:h2:mem:testdb username: sa password: ... 6.1) H2 vs Elasticsearch 삽입 성능 테스트제대로 된 삽입 성능 테스트를 위해 단순 넘버링 문자가 아닌 '문장'을 추가해야 했다.공공 데이터 포털에서 나름 쓸만한 csv을 가져와서 활용했지만 데이터가 300개여서 반복문으로 약 10,000개의 데이터를 ..
No-Offset(Cursor) 방식의 무한스크롤 구현
·
카테고리 없음
1. 개요진행하고 있던 프로젝트에서 채팅을 도입하게 되었고, 채팅 메시지는 상당히 데이터 양이 많기 때문에 한 번에 가져오기에는 시간이 오래 걸릴 것으로 예상되었다.따라서 무한 스크롤 방식을 적용하기로 했고, no-offset(cursor) 방식을 도입하기로 하였다 2. No-Offset + Cursor 방식은 왜 빠른가?먼저 offset + limit 방식을 살펴보자만약 offset = 10,000 이고 limit = 20으로 조회를 한다면 원하는 데이터 Product = 10,001 ~10,020을 조회하기 위해 불필요한 Product = 1 ~ 10,000을 모두 읽어야 한다. 즉, 20개의 데이터를 조회하기 위해 10,020개의 데이터를 조회해야 하는 비효율적인 상황이다. 만약 조회 시작 지점인 ..
함수형 프로그래밍을 적용한 분산락 성능 개선 (2)
·
Project
이전 글과 이어지는 게시글입니다 1. 개요이전글에서는 분산락에 개선점을 언급하였고, 이를 해결하기 위해 함수형 프로그래밍을 도입한 과정을 소개하려고 한다. 분산락의 개선점적용 여부 확인의 어려움락 장시간 점유로 인한 성능 저하 이를 개선하기 위해선 먼저 key 관리 방법을 바꾸고, 락이 필요한 영역에만 락을 적용해야 한다.기존 코드를 함수형 프로그래밍으로 개선하여 해결할 수 있다.함수형 프로그래밍은 간단히 파라미터로 함수를 넘기는 것을 말한다. 2. 구현LockManager@Slf4j@RequiredArgsConstructor@Componentpublic class LockManager { private final RedissonClient redissonClient; private fina..
낙관적 락 vs 비관적 락 vs 분산락 (with Redisson)
·
Project
1. 개요공유 자원에 대한 동시성 이슈를 해결하기 위한 방법은 다양하다. 그 중에서 낙관적 락, 비관적 락, 분산락에 대해 알아보고 직접 적용해보며 성능 차이를 확인해보려 한다 2. 낙관적 락 (Optimistic Lock)특징충돌이 발생하지 않는다고 가정DB가 제공하는 락 기능이 아닌, 애플리케이션에서 제공하는 버전 관리 기능Version이라고 하는 구분 컬럼을 활용트랜잭션 커밋 시점에 충돌을 파악레코드를 업데이트 하는 과정에서만 락을 점유하기 때문에 성능이 좋음 동작공유 자원을 포함하는 ROW에 업데이트 할 때 Version을 증가ROW 업데이트 시점에 해당 ROW를 읽었을 때 Version과, 업데이트 시점에 Version이 다르면 예외를 발생같은 경우에만 업데이트 실행 3. 비관적 락 (Pessi..
Lambda + CDN을 통한 스트리밍 영상 제공
·
Project
1. 개요현재 진행하고 있는 프로젝트에서 주 도메인이 영상과 이미지이다.따라서 효율적인 콘텐츠 제공을 위해 영상은 트랜스코딩을 통하여 스트리밍 파일로 저장하고, 이와 함께 이미지도 CDN을 통해 배포하였고 이 과정을 정리해보려 한다. HLS(HTTP Live Streaming)내가 적용한 스트리밍은 HLS로 적응형 스트리밍(Adaptive HTTP Streaming) 또는 적응형 비트레이트 스트리밍(ABR, Adaptive Bitrate Streaming)의 일종이다.이를 통해 유저의 네트워크 환경에 따라 최적화된 다양한 영상 품질(해상도)를 제공할 수 있다. 후보군으로 MPEG-DASH를 생각했지만, 다음과 같은 이유로 HLS를 선택하였다구현 난이도자료DASH는 국제 표준이고 HLS는 Apple에서 개..
Remote host terminated the handshake, SSL peer shut down incorrectly
·
Error Solution
상황JDK 17, Spring Boot 3.3 환경에서 일환율 조회 API 를 실행하는 과정 중 SSL 에러를 마주하였다.Open API를 적지 않게 사용해 봤지만 SSL 에러는 생소했다.특별한 것 없이 Open API를 적용하였고 아래와 같은 에러 로그를 확인할 수 있었다.// 일부 생략됨org.springframework.web.client.ResourceAccessException: I/O error on GET request for "https://www.koreaexim.go.kr/site/program/financial/exchangeJSON": Remote host terminated the handshake at org.springframework.web.client.RestTemplate..
GitHub Actions + ECR + ECS + ALB를 통한 CICD
·
Project
1. 설계CI내가 정의한 CI의 역할은 pr로 올라온 코드가 정상적으로 빌드되고 단위 테스트가 성공적으로 마무리 됐는지를 확인하기 위함이다.따라서 GitHub Actions만을 가지고 간단하게 마무리 할 수 있었다. CI.ymlname: CIon: pull_request_target: types: [opened, synchronize, closed] branches: [dev] paths: - '**'permissions: contents: readjobs: CI: runs-on: ubuntu-latest steps: - name: 1. checkout uses: actions/checkout@v4 - name: 2. Set up JDK 21 ..
Spring + Elasticsearch 전문 검색 인덱스 적용 - 구현 (2)
·
Project/Elasticsearch의 전문 검색 인덱스 성능 비교
5. Spring + Elasticsearch 구현이제 앞서 살펴본 Elasticsearch 문법들을 그대로 Spring에서 구현하는 것이 이 포스팅의 목표이다ㅓ먼저 Spring에서 Elasticsearch 데이터를 관리&처리하기 위해 Spring Data Elasticsearch를 사용하였다자세한 내용은 Spring Data Elasticsearch docs를 참고할 수 있다. build.gradledependencies { // elasticsearch implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'} 사실 Elasticsearch 포트 번호를 변경하거나, 인증을 적용한 게 아니라면 config..
Spring + Elasticsearch 전문 검색 인덱스 적용 - Elasticsearch 익히기 (1)
·
Project/Elasticsearch의 전문 검색 인덱스 성능 비교
GitHub - lsh2613/Elasticserach: Spring + Elasticserach를 적용한 전문 검색 인덱스 성능 비교Spring + Elasticserach를 적용한 전문 검색 인덱스 성능 비교. Contribute to lsh2613/Elasticserach development by creating an account on GitHub.github.com 1. Elasticsearch란?ELK, Elastic Stack이라 불리는 Elasticsearch, Logstash, Kibana 중 ELK의 심장이라 불리는 Elasticsearch는 뛰어난 검색 능력과 대규모 분산 시스템을 구축할 수 있는 다양한 기능을 제공한다.DBMS에서 사용하는 용어와 혼동되기 쉬워 아래 표를 참고하도록..