인프런 커뮤니티 질문&답변

빠른 게님의 프로필 이미지

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

쿼리로 어느정도의 연산 레벨까지 허용 하는게 맞을까요?

작성

·

1.2K

1

안녕하세요 도사님! 오랜만에 다시 뵙습니다.

강의 내용 중에 "데이터베이스의 부하를 줄이기 위해 쿼리에서의 연산을 최소화하고 데이터만 왔다갔다 하는 형태로 하고 연산은 애플리케이션 서버단에서 처리하는게 좋다." 라고 말씀하신 내용이 기억 납니다.

제가 아직 감이 안잡혀서 그러는데 쿼리에서 어느정도의 연산까지 허용하는게 좋을까요?

상황마다 다를 수 있겠지만 그래도 도사님께서 간단하게

* SUM() 이정도는 써도 된다.

* SUM(IF(..)) 이런건 애플리케이션 서버에서 하는게 좋다.

* 어떤 기준을 두고서 쿼리에서 어느 정도의 연산까지 허용할 것인가를 알려 주시면 감사하겠습니다.

답변 2

5

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요^^! Heeseon O님

저도 오랜만에 반갑습니다^^

데이터베이스에서 조회시 역할은 크게 3가지로 나눌 수 있습니다.

filter(where), Projection(select), aggregation(group by)

기술적으로 이 3가지를 데이터베이스에서 해주어야 애플리케이션과 DB간에 전송되는 데이터가 최적화 됩니다.

이 역할은 가급적 데이터베이스에 맞기고, 나머지 영역은 애플리케이션으로 가져오는 것이 좋습니다.

여기서 또 로직에 따라 2가지로 나눌 수 있는데요.

1. 비즈니스 로직

- 우리 애플리케이션에 영향을 줄 수 있는 비즈니스 로직은 단순한 IF문 하나라도, 애플리케이션에서 처리하는 것이 좋습니다.

2, 프리젠테이션 로직

- DB에서 SQL로 날짜 타입을 문자로 가공해서 조회해 오는 것은 좋지 않습니다. DB에서는 순수하게 날짜 타입으로 조회하고, 이것을 프리젠테이션 로직에서 원하는 모양으로 고치도록 해야 합니다. 예를 들어서 요구사항이 2019-01-02 로 뿌려주세요 라고 했다가, 2019년 1월 2일로 뿌려주세요 라고 변경이되면, 이것은 명백히 프리젠테이션의 요구사항이 변경된 것이거든요.

마지막으로 매우 복잡한 통계성 쿼리 같은 경우는 좀 예외입니다. 이 경우는 DB에서 최대한 많이 처리해도 핵심 비즈니스 로직에 영향을 주는 것은 아니기 때문에, SQL을 잘 활용해서 해결하는 것도 좋은 방법입니다.

감사합니다^^

1

빠른 게님의 프로필 이미지
빠른 게
질문자

답변을 듣고 나니 어느 정도 감이 더 잡힌 것 같습니다.

감사합니다 도사님 최고! ^^