깽쟈
491
2015-08-13 09:56:02
4
2686

db에서 view를 많이 만들어 놓으면 안 좋은가요?


관계형 DB에서 정규화를 통해서 테이블을 다 분리하여(목적에 맞게) 나누어 놓으면 그것을 원하는 형태의 정보로 가공하는 과정에서 반드시 join을 안할 수가 없잖아요? (JPA, Hibernate를 안 쓴다고 했을 때요)

그럼 join을 하는 시점에 대해서 생각을 해보면, view로 미리 만들어 놓고 해당 view를 select ... 로 빼오는 방법과 DAO에서 Statement로 구성해놓고 select ... 로 빼오는 방법이 딱 떠오르는데요.

view에서 미리 join 해 놓은 것은 DB가 데이터 변동이 있을 때마다 모든 view를 refresh 할 때 부담이 생길테고...

DAO에서 이용할 때는 해당 DAO가 DB에 요청할 때만 join이 이루어지니 그 때만 부담이 생길테고...

하지만 프로그래밍의 편의를 보자면 view를 미리 만들어놓고  where 절을 이용해서 가져오던지 하는게 더 편하더라구요. 항상 느끼는거지만 프로그래밍이 편하면 그것이 악습이나 안 좋은 사례가 되는 케이스가 많던데 ;;

view를 많이 만들어놓고, 만들어놓은 view에서만 정보를 추출하는 방법을 사용한다면 DB에 얼마나 부담이 갈까요? 요즘 같이 시스템 성능이 괜찮은 시대에도 안 좋은가요?

구축하려는 시스템은 제온 1 CPU, 8GB memory, SATA3 HDD 정도구요, 이 서버에 WAS + DB가 같이 들어가며, 전체 사용자는 약 200명 안팎으로 될 것 같고, 동접은 100명 안팎 정도의 규모가 될 것 같습니다.

조언 부탁드립니다.

0
  • 답변 4

  • 초보람보
    640
    2015-08-13 10:07:06

    쿨럭...

    View 는 실제 물리적으로 구성되는 것이 아니라 논리적인 녀석입니다.

    따라서 View 를 통해 호출하는 거랑 Statatement 로 join 하는 건 내부적으로 같은 겁니다.

    View 에 Select 때리면 DB 가 내부적으로 join 문장대로 실제 테이블들을 조인해서 그 때 그 때 가져오는 겁니다.

    Join SQL : View 예화

    Join SQL : 클라이언트에서 객체를 하나 생성해서 다른 객체의 생성자나 속성에 생성된 객체를 주입해는 거야. 이때 이때 생성된 객체를 전략이라 하고 다른 객체를 컨텍스트라 하지...

    View: 전략 패턴이네...

    길게 쓸 것이냐 짧게 쓸 것이냐의 문제라는 거죠.

    오라클의 경우는 Metarial View 라는 것이 있어서 좀 다르기는 하지만 다른 DB 는 지원하지 않기에..


    오라클의 Metarial View 에 관한 내용을 아래...

    http://likebnb.tistory.com/127



  • 깽쟈
    491
    2015-08-13 10:16:30
    view가 호출시점에서 연산되는거군요. 감사합니다.
  • 가을
    1k
    2015-08-13 10:41:09

    DB에 종속적으로 갈것이냐 아니냐가 문제인데..

     

    로직을 DB단에서 주로 프로시져로 처리한다면 뷰도 나쁘진않고..

    자바쪽에서 주로 연산한다면 굳이 뷰를 만들어 db에 종속적이게 할필요는 없겠죠.

     

    차후 차세대때 손이 배로 더가게 되니까요. 

  • 박근혜
    4k
    2015-08-13 10:46:37
    글쓴이가 생각하는 VIEW는 MVIEW


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