전체 글
-
성능 개선을 진행해보자3스프링 2024. 7. 17. 00:55
Paging 적용하기성능을 좀 더 올리고 싶었는데 프론트 개발자와 협의 하에 페이징을 적용하기로 하였다.위에서 적용하고자하는 JPA 의 DTO 직접 조회보다 더 깔끔하게 처리할 수 있다.public Page findAllByOrderByModifiedDateDesc(Pageable pageable) { QueryResults result = queryFactory .select(Projections.fields(AllBookMarkResponseDto.class, bookMark.id.as("id"), bookMark.modifiedDate.as("date"))) ..
-
성능 개선을 진행해보자 2스프링 2024. 7. 7. 22:18
IndexbookMark의 modifiedDate에 대한 컬럼에 내림차순 인덱스를 만들어준다.@Table(name = "book_mark", indexes = { @Index(name = "idx_modified_date_desc", columnList = "modifiedDate DESC")}) 그러나 실행계획을 분석해보면 인덱스를 타지 않음을 알 수 있었다. 강제로 인덱스를 타도록 쿼리 힌트를 주었다. EXPLAIN SELECT * FROM book_mark FORCE INDEX (idx_modified_date_desc) ORDER BY modified_date DESC; 실행결과는 아래와 같다. 보시다시피 속도가 반절이상 빨라진 것을 볼 수 있다.그러나 문제점은 queryDSL..
-
서버 과부하를 아라보자네트워크 2024. 7. 5. 22:11
서버 과부하서버가 리소스를 소진하여 들어오는 요청을 처리하지 못할 때 발생한다. 이 때 서버는 사용자의 요청을 처리하지 못해 응답 없음이 뜨게된다.보통 서버의 CPU 사용량이 80, 90%에 도달하면 메모리가 부족하여 계속해서 스와핑이 발생하면 과부하 상태가 된다.모니터링을 이용한 자원할당이러한 과부하 분제를 CPU, 메모리, 대역폭과 같은 자원 할당을 수행한다.모니터링을 하는 이유는 서버 과부하로 인한 서버 중지에 대한 대처가 가능하기 때문이다. 어떤 페이지 요청에 트래픽이 얼마나 발생했는지 등을 모니터링을 통해 파악할 수 있기 때문이다.AWS 오토스케일링을 이용하면 cloudWatch가 계혹해서 모니터링을 진행하여 서버 대수를 자동으로 늘려주는 작업을 한다. 또한 netdata를 이용하는 것도 가능하..
-
성능 개선을 진행해보자 1편스프링 2024. 7. 3. 04:44
" data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 성능 개선하기서론현재 bookMark에 100만개의 데이터를 넣어놓았다.이에따라 연속 독서기록량을 체크할 때 성능이 매우 좋지 않았다.전체 책갈피 조회 쿼리를 다시 점검해보았는데, 약 8s 정도로 시간이 다소 걸리는 것을 확인할 수 있었다.시간을 좀 더 개선시켜보는 것이 목표이다.쿼리 DSL로의 변경전체 책갈피 리스트를 조회하는데 JPA를 이용하여 다음과 같은 메소드를 사용하고있다.public Map> showAllBookMarkList() { List list = bookMarkRepository.findAllByOrderByModifiedDateDesc().stream() .map(A..
-
Need to specify how to reconcile divergent branches를 아라보자Git 2024. 6. 28. 21:20
기존 git pull의 문제점 : 세 가지 전략으로 나뉘게 된 배경git pull --help에서 설명하는 내용git pull --help에서는 아래처럼 설명한다.In its default mode, git pull is shorthand for git fetch followed by git merge FETCH_HEAD. 번역하자면, 디폴트모드에서는 git pull이 git fetch, 즉 git merge FETCH_HEAD의 작업에 대한 간단명령어(속기)라는 말이다.다시 말해 git pull의 내부 동작이 git merge FETCH_HEAD처럼 동작한다는 말이다. 따라서 이 디폴트모드에서는 git pull을 수행했을 때 git merge에 대한 불필요한 commit이 자동으로 생긴다. 기존 gi..
-
[프로그래머스] 숫자게임알고리즘 2024. 6. 28. 16:57
문제xx 회사의 2xN명의 사원들은 N명씩 두 팀으로 나눠 숫자 게임을 하려고 합니다. 두 개의 팀을 각각 A팀과 B팀이라고 하겠습니다. 숫자 게임의 규칙은 다음과 같습니다.먼저 모든 사원이 무작위로 자연수를 하나씩 부여받습니다.각 사원은 딱 한 번씩 경기를 합니다.각 경기당 A팀에서 한 사원이, B팀에서 한 사원이 나와 서로의 수를 공개합니다. 그때 숫자가 큰 쪽이 승리하게 되고, 승리한 사원이 속한 팀은 승점을 1점 얻게 됩니다.만약 숫자가 같다면 누구도 승점을 얻지 않습니다.전체 사원들은 우선 무작위로 자연수를 하나씩 부여받았습니다. 그다음 A팀은 빠르게 출전순서를 정했고 자신들의 출전 순서를 B팀에게 공개해버렸습니다. B팀은 그것을 보고 자신들의 최종 승점을 가장 높이는 방법으로 팀원들의 출전 순..
-
프록시와 로드밸런싱을 아라보자네트워크 2024. 6. 26. 01:06
Load Balancing서버가 처리해야 하는 업무를 여러 대의 서버로 나누어 처리하는 것. 한대의 서버로 부하가 집중되지 않도록 트래픽을 관리하여 각 서버가 최적의 퍼포먼스를 보일 수 있도록 하는 것.서비스 규모가 늘어나면 이를 분산하기 위한 방법으로 두가지 방법이 있다.Scale - UpCPU, 메모리 등 하드웨어 기능을 업그레이드한다. 비용이 기하급수적으로 증가한다. 하나의 서버에 웹 서비스를 제공하므로 서버 장애시 가용성에 문제가 발생한다.Scale - out저렴한 노드를 여러개를 하나의 클러스터로 구성하는 방식. 하나의 노드에 문제가 발생해도 웹 서비스가 중단되지 않는다. 만약 이를 통해 트래픽 대처를 한다면, 여러 대의 서버로 트래픽을 분산하기 위한 로드 밸런싱이 필요하다.로드밸런싱 방식은 아..