back-end study

back-end study

백엔드 개발자로써 최적화를 위해 고려할 사항들

이번 글에선, 백엔드 개발자로써, 최적화를 수행하기 위해 수행, 고려할 수 있는 것들을 몇가지 정리해보겠다. 캐시 사용하기 반복적으로 실행되는 쿼리 결과를 캐시하여 DB에 쿼리를 보내는 횟수를 줄일 수 있다. Spring Boot에서는 캐시 관련 어노테이션을 사용하여 쉽게 캐시를 적용할 수 있다. 예를 들어 @Cacheable 어노테이션은 메서드의 반환값을 캐시에 저장하고, 이후 동일한 메서드를 호출할 때 캐시된 값을 반환한다. 인덱스 추가하기 쿼리 성능을 높이기 위해 인덱스를 추가할 수 있다. 인덱스는 특정 컬럼을 대상으로 빠른 검색을 가능하게 한다. Spring Boot에서는 JPA 어노테이션을 사용하여 인덱스를 추가할 수 있다. 예를 들어 @Index 어노테이션을 사용하여 엔티티 클래스의 필드에 인..

back-end study

[Optimization] 캐싱(caching)을 통한 성능 개선 분석

Test Environment 3인 유저 채팅방에서 채팅 추가 시, api의 속도를 확인하는 것으로 cache 적용 전 후 의 성능을 비교했습니다. 기본 전략 반복 읽기가 많은 데이터를 캐싱하였기에 lookl aside +write around 전략을 사용하고, 일관성 유지를 위해 데이터 수정 발생시 캐시 데이터를 버린 뒤, 이후 사용시 캐시를 다시 Hit시켜 캐시메모리에 변경사항을 로딩하는 방식을 사용했습니다. caching 적용 전 api 속도 sql 수행 횟수 기본적으로 chatroom, mem ber의 엔티티를 select하는 sql이 각각 수행되고, 해당 채팅을 db에 insert하는 명령어가 수행된다. 추가적으로, 캐싱을 적용하지 않았으므로 채팅 알림을 보내기 위해 채팅 방 내의 모든 멤버들의..

back-end study

성능 지표에 관하여 (ThroughPut, Latency)

이번 글에선, 간단하게 성능 지표관련된 지표 2가지를 알아보겠다. Throughput: 시간당 처리량을 의미한다 흔히 TPS라고도 불리며, 초당 처리하는 단위 작업, 혹은 HTTP 요청들으로 해석할 수 도 있다. TPS: 초당 완료되는 트랜잭션의 수. 많은 작업을 동시에 처리할 수 있는 동시성에 관한 성능을 나타낸다. Latency 하나의 패킷이 출발지에서 도착지까지 걸리는 시간이다. 사용자의 체감 시간과 관련되어있다. 각 지표가 실제 성능에 미치는 영향 ThroughPut 위와 같이, DB, WAS의 성능을 개선하더라도, 웹서버의 ThroughPut이 그대로라면, 여전히 500이라는 TPS에 제한이 걸리는 병목현상이 발생한다. 따라서 맹목적인 성능 향상도 좋지만, 이와 같은 Critical Path를 ..

back-end study

HTTP 클라이언트- Apache HttpClient VS OkHttpClient VS Spring WebClient

Apache HttpClient, OkHttpClient, 그리고 Spring WebClient은 모두 자주 사용되는 HTTP 클라이언트 라이브러리입니다. 각각의 장, 단점을 간략하게 정리하겠습니다. 1. Apache HttpClient: - 장점: - 다양한 기능과 유연성: 다양한 HTTP 요청 및 응답 구성 옵션을 제공하며, 커스터마이징 가능한 요청 인터셉터, 커넥션 풀링, 프록시 설정 등 다양한 기능을 제공합니다. - 안정성: 오랜 기간 동안 널리 사용되었고 안정성이 검증된 라이브러리입니다. - 단점: - 성능: 일부 상황에서 성능이 다른 클라이언트보다 느릴 수 있습니다. - 설정 및 사용의 복잡성: 일부 개발자들에게는 설정과 사용이 복잡하게 느껴질 수 있습니다. 2. OkHttpClient: - ..

back-end study

WebClient 이론 및 사용법

아래 글을 읽고 오면 도움이 됩니다. https://codenme.tistory.com/100 Blocking / Non-blocking 과 Sync / Async 의 차이 Blocking A 함수가 B 함수를 호출 할 때, B 함수가 자신의 작업이 종료되기 전까지 A 함수에게 제어권을 돌려주지 않는 것 Non-blocking 함수를 호출하며 제어권을 넘겨주는 것으로 호출한 함수가 다른 codenme.tistory.com restTemplate: 멀티 스레드 Blocking 방식( 호출하는 함수가 호출된 함수의 응답을 대기한다. ) - HTTP 요청 후 Json, xml, String과 같은 응답을 받을 수 있는 템플릿 - RESTful 형식을 지원한다 - 멀티 스레드와 Blocking 방식 사용 - B..

back-end study

Blocking / Non-blocking 과 Sync / Async 의 차이

동기와 비동기 동기(Synchronous, 동시에 발생) 동시에 일어난다는 의미이다. 즉, 요청과 그 결과가 동시에 일어난다는 약속을 의미한다. 요청을 하면, 시간이 얼마나 걸리든 상관없이 요청한 자리에서 결과가 주어져야 한다. 요청과 결과가 모두 한 자리에서 동시에 일어나게 된다. 여러 노드 사이의 작업 처리 단위를 동시에 맞추겠다는 의도를 포함하고 있다. 설계가 매우 간단하고 직관적이지만 결과가 주어질 때까지 아무것도 못하고 대기해야 한다는 단점이 존재한다. 비동기(Asynchronous, 동시에 발생하지 않는) 동시에 일어나지 않음을 의미한다. 즉, 요청과 결과가 동시에 일어나지 않는다는 약속을 의미한다. 요청한 그 자리에서 결과가 주어지지 않는다. 노드 사이의 작업 처리 단위를 동시에 맞추지 않아..

back-end study

[Optimization] 인덱싱(indexing)을 통한 성능 개선 분석

indexing이란? 인덱스를 설정하면 해당 컬럼들의 값을 해시 맵 형태로 메모리에 저장해두고 검색할 때 메모리에서 검색을 먼저 하고 해당하는 행을 찾아 반환하지만 인덱스 생성하는데에도 비용이 들고, 데이터 수정, 추가 시마다 업데이트가 필요하기에 데이터의 추가, 수정 삭제에 대한 처리 속도가 낮아진다. 그렇기에 인덱싱으로 "유의미한" 검색 성능 향상을 만들 수 없다면, 만들지 않는 것이 좋다. 그럼 언제 인덱싱이 효과적이지 못할까? 인덱싱이 효과적이지 않은 상황 - 작은 테이블: 작은 크기의 테이블에서는 인덱스가 적용되어도 큰 차이를 만들지 못할 수 있다. 이런 경우에는 인덱스를 적용하는 대신에 테이블을 자주 스캔하는 것이 더 효율적일 수 있다. - 자주 변경되는 테이블: 자주 데이터를 추가, 수정, ..

코앤미
'back-end study' 카테고리의 글 목록