천발무금
966
2019-10-08 16:56:33 작성 2019-10-08 17:07:11 수정됨
8
621

join으로 한방 쿼리를 만드는 게 좋은지, 쿼리를 여러번(테이블 별로 1번) 호출하는게 좋은지 잘 모르겠습니다


생각해보면 전 회사에서 과장님과 부장님이 싸우시던(?) 논쟁같은데


전에 부장님은 DB 여러번 다녀올 필요 없이 한방쿼리로 짜는게 좋다고 하신 말씀이 생각나고

전에 과장님께서는 데이터가 많은 DB 부하 줄이고, 차후 스케일 아웃을 생각하는 방향이 좋다고 하신 말씀이 기억나네요
(스케일 아웃 시 API서버는 작업이 쉬우나 DB는 어려우니까요)


동적 알고리즘(제가 깊게 공부해본적이 없어서 맞는 비유인지 모르겠습니다) 이란게 복잡한 문제를 쪼개서 푸는 걸로 알고있습니다

이거 처럼 복잡해질 수 있는 쿼리를 쪼개는 것도 나름 좋다고 생각하고, 쪼개진 쿼리는 재사용이 쉽다고 생각합니다

그래서 저는 전회사 과장님 생각에 조금 더 가까운거 같네요 ㅎㅎ



okky 이용자 분들께서는

매번 기능을 만들 때,

어떤 상황에서 해당 기능에 맞는 한방 쿼리를 만드는게 좋다고 생각하시고,

어떤 상황에서는 하나의 기능에 쿼리를 여러번(테이블 별로 1번) 날리는게 좋다고 생각하시는지

의견 여쭙습니다



[제 생각]

저는 DB에 데이터 양이 많아질거라고 예상되거나, 복잡한 문제는 쿼리를 쪼개는게 좋을거 같다고 생각은 듭니다

데이터가 없고 문제가 쉽다면 한방 쿼리가 좋은 것 같네요 ㅎㅎ


[추가설명]
여기서 쿼리를 쪼갠다는건 JOIN을 안쓴다는 의미입니다 
0
  • 답변 8

  • Yuu2
    2019-10-08 16:58:27 작성 2019-10-08 16:58:45 수정됨

    글쎄요 디비구조 마다 달라서

    소비된 코스트랑 시간을 비교해봐야 알거같은데... 

  • 어쩌다프로그래머
    6k
    2019-10-08 16:59:30

    이게 정답이 있나요..

    업무나 상황따라 달라지는 케바케의 경우를 너무 일반적으로 생각하시는듯

    일반화하기 어려운주제 같네요

  • jslovers
    2k
    2019-10-08 17:02:50

    한방보단 IO에 드는 데이터를 잘 필터해서 줄이고 쪼개서 가는게 좋다고 생각합니다.

    한방으로 짠 수백~수천줄 쿼리 쳐다 보기도 싫은...

  • 천발무금
    966
    2019-10-08 17:04:32

    Yuu님 답변 감사합니다

    데이터가 많다면, 대부분 메모리에서 작업하는게 빠를거라고 생각이 들고,(스케일 아웃도 상대적으로 편하기 때문에)

    데이터가 적다면, 한방쿼리가 좋을 거 같긴하네요(DB 요청, 응답 시간)


    어쩌다님 답변 감사합니다

    우문 현답이십니다

    제가 질문을 바꿔야겠네요

    저는 DB에 데이터 양이 많아질거라고 예상되거나, 복잡한 문제는 쿼리를 쪼개는게 좋을거 같다고 생각은 듭니다

    어쩌다님께서는 어떤 경우엔 어떤 선택을, 어떤 경우엔 어떤 선택을 하실 것 같나요?ㅎㅎ

  • n016omega
    792
    2019-10-08 17:05:18

    각각 장단점이 있어서 뭐가 더 좋다고 말을 못하겠어요

    저라면 해당 프로젝트에서 사람들이 하는 방식대로 따라 할 것 같아요.

    자주 사용되는 쿼리를 공통으로 사용 한다고 하면 호출해서 사용할 것 같고

    반대로 해당 테이블 내용의 쿼리는 내가 만드는 화면에서만 표현값의 방법이나

    다른 데이터가 추가로 필요하면 조인을 사용해서 사용할 것 같습니다.


  • 어쩌다프로그래머
    6k
    2019-10-08 17:08:17 작성 2019-10-08 17:11:42 수정됨

    큰 프로젝트나 큰규모의 쇼핑몰등을 하게 되면 단순히 데이터 량으로만 판단은 안하게 됩니다.

    업무의 효츌성이나 msi 같이 쪼개어 확장같은 개념이나 여러경우가 말씀하신 선택의 조건이 되요


    아무리 인덱스를 잘잡아도 데이터가 수천억 건수가 되는 테이블을 조인거는 것보다는 쪼개는게 낫듯이

    다시 답을 달아도 원하시는 쿼리의 용도나 적용할려는 시스템이 어떤것이냐에따라 100% 답은 달라질거 같습니다.


    웹에서 가장 큰비용을 담당하는 부분이 디비 커넥션 부분이므로 어떤걸 사용해야 하는걸 선택하는게 까다로울뿐이지 둘다 사용되어야 하겟죠

  • 초코쪼꼬
    6k
    2019-10-08 17:31:51

    관련 프로파일러 돌려서 최적의 쿼리를 짜시면 됩니다.


    이것을 논쟁할 거리가 될까 싶네요.

  • 아야로
    1k
    2019-10-08 18:50:14

    저 역시 궁금하네요.

    개인적으론 남이 해놓은 수백줄짜리 JOIN쿼리 수정하자면 화딱지가 나서 분리하는걸 선호합니다만,

    관리자 입장에서 빠르면 되니 개발자가 작성한 쿼리에 INDEX걸고 튜닝하다가 느리다 싶으면 분리하거나 조인하거나 변경하도록 지시하곤 하십니다.

    정말 상황 봐가면 하는듯 싶네요.

  • 로그인을 하시면 답변 을 등록할 수 있습니다.