일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
- 3기
- 3기 1차
- 42seoul
- 42서울
- amazon
- AWS
- Collection
- dml
- Document
- EC2
- HTTP
- railsconsole
- REST
- REST API
- restful
- RESTful API
- rubyonrails
- seoul42
- Server
- service
- showtable
- ubuntu
- URI
- web
- 라피신
- 모각코
- 본과정
- 서버
- 서울42
- 스터디
- Today
- 216
- Total
- 53,776
목록전체 글 (173)
네로개발일기

3-2. 첫 페이지 조회 결과 캐시하기 처음 검색 시 조회된 count 결과를 응답 결과로 내려주어 JS에서 이를 캐싱하고 매 페이징 버튼마다 count 결과를 함께 내려주는 것이다. Repository에서는 요청에 넘어온 항목 중 캐싱된 count 값이 있으면 이를 재사용하고, 없으면 count 쿼리를 수행한다. - 첫 1페이지 요청 시 count 쿼리를 날려서 totalCount를 가져온다. - 2페이지 이상 요청 시 JS에서 캐싱한 totalCount를 같이 보내서 count 쿼리를 날리지 않고 기존의 totalCount를 같이 보내서 count 쿼리를 날리지 않는다. 이 방식은 다음과 같은 상황에서 도움이 된다. - 조회 요청이 검색 버튼과 페이지 버튼 모두에서 골고루 발생하고 - 실시간으로 데이..

페이징 기능을 구현하는데 있어, 페이징 쿼리 자체를 개선하는 방법도 있지만, 그 외 다른 기능을 개선하는 방법도 함께 할 수 있다. 여기서 말하는 기능은 count 쿼리이다. 일반적인 페이징 기능에 있어 데이터 조회와 함께 매번 수행되는 것이 count 쿼리이다. 해당 조건으로 조회되는 총 건수를 알아야만 아래와 같이 pageNo들을 노출시킬 수 있다. 총 몇건인지 확인하기 위해 전체를 확인해야 하기 때문에 데이터 조회만큼 오래 걸린다. 이 문제를 개선할 수 있는 방법은 크게 2가지가 있다. 1. 검색 버튼 사용시 페이지 건수 고정하기 2. 첫 페이지 조회 결과 cache 하기 3-1. 검색 버튼 사용시 페이지 건수 고정하기 굳이 사용율이 떨어지는 페이지 버튼을 위해 매번 전체 count 쿼리가 수행될 ..

2. 커버링 인덱스 사용하기 No Offset 페이징을 사용할 수 없는 상황이라면 커버링 인덱스로 성능을 개선할 수 있다. 커버링 인덱스란, 쿼리를 충족시키는데 필요한 모든 데이터를 갖고 있는 인덱스를 말한다. 즉, select, where, order by, limit, group by 등에서 사용되는 모든 컬럼이 Index 컬럼 안에 다 포함되는 경우다. select 절까지 포함하게 되면 너무 많은 컬럼이 인덱스에 포함되기 때문에 실제론 커버링 인덱스는 select 를 제외한 나머지만 우선적으로 수행한다. SELECT * FROM items WHERE [조건문] ORDER BY id DESC OFFSET [페이지 번호] LIMIT [페이지 사이즈] 위와 같은 페이징 쿼리를 아래처럼 처리한 코드를 얘기..

페이징은 웹에서 흔히 볼 수 있는 기능이다. 하지만, 기초적인 페이징 구현 방식은 서비스가 커지면서 큰 장애를 유발할 수 있다. 적재된 데이터가 많아지면서 페이징 기능이 수십초~ 수분까지 조회가 느려질 수 있다. 특히 1억건이 넘는 테이블에서의 페이징은 단순히 인덱스를 추가한다고 해서 성능 문제가 해결되진 않는다. 그래서 일반적인 페이징 기능에서 성능을 개선하는 방법을 알아보자. 물론, 인덱스를 이용한 쿼리 튜닝이 되어있다는 가정이고 조회 쿼리에서 인덱스 사용은 필수이다. [ 참고 ] 효율적인 데이터베이스 인덱스 설정 방법 https://frogand.tistory.com/144 [SQL] 효율적인 DB INDEX(인덱스) 설정 인덱스(INDEX) 검색 속도를 높이기 위한 색인 기술이다. 보통 인덱스는 ..
Assert는 단순히 if문을 줄이는 역할만 하는 것이 아니다. 프로젝트 규칙을 적용하고 공통을 재사용한다는 것에 큰 의미가 있다. Spring Assert를 사용하는 목적 Spring Assert는 인수를 검증하고 조건에 맞지 않는 경우 IllegalArgumentException 또는 IllegalStateException를 발생시킨다. 이 부분은 조건문을 단순화하고 반복적인 코드를 줄이는 역할을 한다. if (user == null) { throw new IllegalArgumentException("사용자 정보가 존재하지 않습니다."); } // 위 코드는 아래와 같이 바꿀 수 있다. Assert.notEmpty(user, "사용자 정보가 존재하지 않습니다."); Assert의 확장 값을 검증하는..