계산 로직을 Java 단이 아닌 쿼리문에서 하신 이유가 궁금합니다.
256
작성한 질문수 31
select sum(cp.quantity * p.price) as totalAmount
from customer_product cp
inner join product p
on cp.product_number = p.product_number
where cp.customer_id = #{customer_id}장바구니에 들어있는 상품의 개수와 가격을 곱한 금액의 총합을 구하는 로직을 17:50 쯤에 보여주셨습니다.
DB에 Connection하는 비용을 고려하면 계산 로직은 Java에서 처리하는 게 더 빠르지 않을까 생각했습니다. 실무에서 많이 사용한다던가, 아니면 더 좋은 방법이라고 생각하셨던 이유가 있었을까요?
답변 2
1
데이터베이스 중심 수업이다보니 쿼리 위주로 설명이 되어있습니다. 물론 개발단에서 자바로직으로 처리 할 수도 있겠습니다. 코드상 복잡한 로직 이다면 쿼리로 기술해서 쉽게 결과를 가져올 수도 있는점도 고려해서 작업하시면 좋겠습니다^^
0
안녕하세요, 인프런 AI 인턴입니다. Bruce Han님.
올리신 질문은 데이터베이스 레벨에서의 계산 작업과 애플리케이션 레벨에서의 계산 작업 간의 차이점에 관한 것입니다.
우선, SQL 쿼리를 사용하여 직접 데이터베이스에서 계산을 수행하는 이유는 다음과 같은 몇 가지 이점 때문입니다:
효율성: 데이터베이스는 대량의 데이터를 처리하는 데 최적화되어 있으며, SQL 쿼리는 데이터 집계 및 계산을 수행하는 데 매우 효과적입니다. 데이터베이스가 직접 계산을 수행하도록 하면 대량의 데이터를 애플리케이션으로 전송하는 대신, 처리된 결과만 전송하여 네트워크 부담을 줄일 수 있습니다.
단순화: 응용 프로그램 코드에서 계산 로직을 제거함으로써 코드가 더 단순하고 유지보수가 용이해집니다. 이는 애플리케이션의 복잡도를 줄일 수 있습니다.
트랜잭션 관리: 데이터베이스 수준에서 계산을 처리하면 트랜잭션 내에서 데이터 일관성을 쉽게 유지할 수 있습니다.
물론, 모든 경우에서 데이터베이스 수준의 계산이 더 나은 것은 아닙니다. 데이터의 크기와 응용 프로그램의 요구 사항에 따라 최적의 방법이 달라질 수 있습니다. 실제로, 복잡한 로직이거나 데이터베이스에 과부하가 걸릴 가능성이 있다면 애플리케이션 단에서 처리하는 것이 더 적절할 수도 있습니다.
관련된 정보를 확인하고자 한다면, 스칼라식으로 데이터베이스 및 애플리케이션 성능 최적화하기 게시글을 참고하시기 바랍니다. 이 글은 MongoDB와 같은 데이터베이스의 활용 방법에 대한 유용한 정보를 제공합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
0
AI의 답변 중 추가로 궁금한 게 있네요.
DB 단과 애플리케이션 단 사이 대량의 데이터가 들낙날락하는 중 네트워크 부담에 어떻게 영향을 미치는지 궁금합니다. 계산하는 것 자체는 애플리케이션 단 or DB 단인데, 사이의 네트워크는 계산을 안 하니 상관없고 두 단의 일처리에 위임했으니 상관없는 것 아닐까요?
애플리케이션 단에서도 계산하는 로직은 쿼리문의 계산 로직과 크게 다르지 않을 것으로 보이는데요. 복잡도가 있다면 애플리케이션은 따로 함수로 뺄 수 있다는 장점이 있을텐데, 그래도 쿼리로 해결하는 이점이 있을까요? 궁금합니다.
데이터 일관성에 대한 추가 설명이 듣고 싶습니다. 트랜잭션 내에서의 일관성을 지킨다고 하면 어느 정도 일리있는 말인 것 같긴 한데, 정확한 근거를 알고 싶습니다.
답변은 감사하지만, 질문의 주 요지는 굳이 DB Connection을 또 해서 계산할 필요는 없지 않을까입니다.
3-13 리텐션 과제 제출합니다!
0
50
2
getOrCreate / Unique? 멱등 처리 질문
1
57
2
경쟁상태
0
47
1
stmt
0
39
1
실행 통계2 explain analyze 조인 쿼리
0
38
1
3강 인덱스 구조 강의 자료 문의
1
49
1
조회 메서드에서 @Transactional(readOnly=true) 질문
1
39
1
68강 문제 풀이
0
42
1
현대 쿼리 복잡성에 관한 질문
0
86
3
key_length 가 사용되는곳
0
43
1
[과제]1-9 피벗 테이블 만들어보기
0
63
2
cnt수를 구할 때 왜 user_pseudo_id 를 사용하나요?
0
60
2
해당 결제 부분을 포폴에서 테스트 api를 적용에 대한 궁금증
1
44
1
아래 글들에서 적혀있는 노션 페이지를 찾을수 없다는데요..
0
51
1
공통 코드 VS Enum 클래스
1
47
1
verify.sh 4단계 실패 — Jenkins 컨테이너에서 127.0.0.1:6443 connection refused
0
61
2
안녕하세요.
0
52
1
쿼리 질문드립니다!
0
191
2
12_논리적인 모델링(독립형,상속형PK)에서 질문드립니다.
0
277
2
테이블정의서 NN(NotNull)
0
332
1
테이블 이름에 "t_" 프리픽스를 붙이는 이유가 있나요?
0
597
1
마프1탄은 언제개강예정인가요?
0
239
1
제품테이블에서 제품색상처리는/
0
247
1
intellij Ultimate tomcat server로 구동시 생긴문제입니다.
0
411
1





