• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

페이징을 위한 쿼리 질문드려요!

20.12.04 12:48 작성 조회수 96

0

지난 번 사소한 질문에도 친철히 답변해주시고 알찬 강의 항상 감사드립니다!

JPA 최적화 강의를 완강했습니다.

현재 간단한 프로젝트를 진행하고 있는데 페이징에 대해 질문드립니다.

DB서버에 select한 데이터의 개수를 지정해서 가져오는 페이징 쿼리를

호출하는 이유로

' application 메모리에 로드할 수 있는 데이터의 양은 제약이 있기 때문에 

한 번의 쿼리로 너무 많은 데이터를 가져올 경우 시스템에 에러가 날 수 있다.'

이렇게 생각했습니다.

질문1) 그럼 시스템이 견딜 수 있는 메모리의 성능을 최대한 고려해서 

한 번의 쿼리로 최대한 많은 데이터를 가져오고 

최종적으로 모든 데이터를 가져오기 위해 날리는 쿼리의 개수를 최소화하는 게 

최적화를 위한 올바른 이해인가요?? 

질문2) 조금 다른 질문입니다!

만약에 회원가입 시 ID 입력에 대한 요구사항이

1. 100글자를 넘기지 않는다

2. 중복된 ID가 있어서는 안 된다

라고 했을 때 1번 요구사항을 프런트에서 처리했다면

백에서는 1번 요구사항에 대해서는 구현하지 않고 2번 요구사항만 검증하는 식으로 

현업에서도 코드를 짜나요??

항상 너무너무 감사합니다!

답변 1

답변을 작성해보세요.

1

안녕하세요. cjswoudddn님^^

' application 메모리에 로드할 수 있는 데이터의 양은 제약이 있기 때문에 

한 번의 쿼리로 너무 많은 데이터를 가져올 경우 시스템에 에러가 날 수 있다.'가 맞습니다.

따라서 DB에 데이터가 1억개 있고 약 100G라고 하면, 서버 메모리가 100G가 아닌 이상 한번에 시스템이 OOM이 발생하겠지요. 또한 네트워크도 많이 점유하구요.

사용자가 한 화면에 보는 데이터 리스트가 50개라면 50개씩만 조회하면 됩니다.

그런데 만약 정말로 1억개의 데이터를 모두 조회해서 어떤 결과를 만들어야 한다면(일반적으로 배치 처리), 한번에 50개가 아니라, 5000개 처럼 애플리케이션이 처리해야 하는 적정한 양을 성능 테스트로 찾아야 합니다.

두번째 질문은 클라이언트에서 열심히 검증해도, 악의적으로 서버에서 클라이언트 로직을 무시하고 넘길 수 있기 때문에 서버에서도 추가로 검증해야 합니다.

감사합니다.