Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

어플리케이션 레벨에서 쿼리에관련된 TestCase 작성을 쉽게하고 또한 실제 작동되는 SQL문도 체크할수 있습니다.

소모적 반복적 SQL문 작성시간을 줄이고, 수많은 케이스를 유닛테스트로 전환될수 있을 가능성을 확인할수 있습니다.

Image Removed

있으며

이것은 데이터중심에서 메시지중심으로의 설계를 가능하게합니다. 

Image Added

SQL문은 약간의 조건만 바뀌어도 쿼리를 새롭게 작성해야하며( 똑똑한 공통 SQL빌드가 없다고 가정)

그리고 약간의 기능차이로 인해 매번 새로운 SP를 DBMS에 등록하고 관리해야합니다.

형상관리가 비교적 쉽지 않은 SP를 장기간 운영하면, 심각하게는 30%이상이 사용되지 않는 코드가되며

그누구도 사용되지 않는 코드를 정리하지 못한채 존재하게 됩니다.  


warning
Expand
titleORM사용의논쟁 : 개인적인 주관이 반영되었습니다.

JPA가 직접 SQL문을 수행합니다. 여기서 중요한 논쟁점이 생길수 있습니다.

Insert/Update때 트랜잭션은 누가 처리하는가? 왜 위험하게 어플리케이션이 직접 SQL문을 날리는가?

기존 개발정책이 SP만 사용하고, 트랜잭션처리가 SP내에서만 있어야된다란 정책이 있다고하면

수많은 논쟁이 발생할수 있습니다.

  • A : SQL문을 어플리케이션에서 Type세이프(QueryDSL)하고 효율적인 방법으로 사용할수 있는 방법을 도입하였으며 DB호출을 방지하기위해 분산처리시켰습니다. 그런데 작동을 안합니다.
  • B: 쿼리튜닝에 관여할수 없으며 DBMS에서 관리할수 없으니, SELECT 권한이 없습니다.어플리케이션은 SP로만 사용해주세요 SP방식이 무조건 성능이좋습니다.
  • A : 운영 데이터가 꼬인것같습니다. A,B테이블에서 X조건이되는 게 문제인듯보입니다. 다른사람이 만든 SP에서 뭔가 잘못된거같습니다. 데이터 검증부탁드립니다.
  • B: 제가 왜 여러분이 만든문제를 일일이신경쓰야합니까? 알아서 찾으십시오
  • A : 형상관리가되는 어플리케이션을 통해 문제를 자동으로 찾고싶습니다. 어플리케이션에 Select권한을 주십시오
  • B: 정책상 어플리케이션이 쿼리를 하면 안됩니다. 운영처리해야하니... 개인계정을 추가하고 임시 Select권한을 드릴테니 직접 문제를 찾으십시오
  • A: 이문제를 찾는 SP를 작성하였습니다. 직접 호출하여 문제를 분석할테니 개인에게 SP실행권한을 주십시오
  • B: 정책상 개발자에게 SP 실행권한을 줄수 없습니다. 정상 디플로이된 어플리케이션을 통해 실행하십시오


개발자가 직접 운영DB에 접근을 해야하는 문제와 ,어플리케이션은 SP로만 작성되어야한다란 문제에서 충돌 과정입니다.

다소 극단적으로 상황을 만들어 냈지만.....이것은 DBMS의 차이로 정채이 그렇게되어야 한다고 결론내리는 DBA분도 계십니다.

MSSQL은 SP방식이 올바른거임, 오라클은 SP안쓰는게 올바른거임

본질적인 차이는

  • MSDBMS에서는 SP를 관리하는툴이 시각적으로나 튜닝적요소로 발전을 해왔고
  • 오라클에서는 성능개선점을 쿼리튜닝에 포인트를 두면서 발전을 해왔습니다.

그래서 어플리케이션에서 MSDB를 사용하면 SP를 사용해야하고 오라클을 사용하면 쿼리방식을 사용해야했습니다.

이것은 데이터 중심적 개발도 아니고... DBA중심적 개발방식입니다. 결코 오라클이나 MS가 결정한 사항이 아니란것입니다.


사실 JAVA진영은 오픈진영이기때문에 표준으로 자리잡는데 까지 시간이 오래걸립니다.

JAVA ORM 스펙정의는 10년이상 진행해왔고..,이제는 안정적으로 자리를 잡았으며

JPA로 완성단계이 이르렀습니다.


MS도 살펴보면 LINQ와 함께 ORM(Entity라이브러리) 의 스펙정의및 라이브러리화는

이미 오래전에 진행되었고 Asp.net에 EnterPrise Entity 를 자연스럽게 통합하고

Asp.net 개발자는 SP개발을 EnterPrise 라이브러리를 통해 SP맵핑을 사용해왔습니다.

그렇기때문에 MSSQL은 SP로만 사용해야해 라고 오판하고 있습니다. 사실 MS진영에

ORM을 LINQ와 함께 사용하는것은 JAVA에 JPA를 추가하는것보다 훨씬 쉽습니다.

이미 내장화가 되어있으니까요... EnterPrice Entity 는 말그대로 ORM을 구현하겠다란 네이밍입니다.

https://msdn.microsoft.com/en-us/library/aa937723(v=vs.113).aspxJPA는 SP와 상호작용도 가능하지만, 이 비율이 100%일때 이점이 있는가? 에대해서는 고민을 해야할듯보입니다.


실행계획 조사하기

Trace된 SQL문을 그대로 복사하여, 실행계획을 조사합니다. 매번 이러한 과정을 거칠필요는 없을듯보이며

...

Warning

논란의 소지가 있지만, JPA를 학습하면서 느낀점입니다.

  • JPA(ORM)은 SQL문을 모르고 RDB를 이해못해도 편리한 개발을 하기위해서 존재하는것이 아니다.
  • 객체관점에서 데이터를 접근하려면 ERD를 완전하게 이해하고 그것을 Entity에 반영을 해야한다.
  • 선행단계가 되고나면.., 반복적인 SQL문작성을 안해도되기때문에 좀더 디테일한 메시지 중심 설계가 가능해진다
  • MyBatis류는 ORM을 흉내낸 SQLMapper이다
  • .
  • MyBatis를 ORM이다라고 정의할수도 있지만, 정확하게 JAVA ORM 표준 스펙에 들지 않는다. ( ORM이아닌 SQLMapper라고 정의하기도합니다.)


SPRING BOOT를 SPRING BOOT을 통해 자연스럽게 JPA를 권장해서 접근이 쉬운기술이다라고 접근을 하였는데오판을 하였지만

기존에는 일반적으로 성능의 대부분의 문제를 쿼리튜닝및 데이터중심적 설계로 해결을 하였습니다.

하지만 ORM에서 성능문제는 어플리케이션에서 OOP의 영속성을 관리해야하며 최종 RDB에 저장되기때문에

성능 해결포인트가 다른곳에 있으며 이것을 이해하는것은 RDB와 JPA내부에서 작동되는것을 둘다 알아야됨을 의미합니다외래키가 없는 복합키 맵핑이란 문제를 ORM으로 풀려고 하다보니 더 깊은 RDB의 공부가 필요했습니다.

http://wikiwonwoo.webnoriml/index.comphp/pages/viewpage.action?pageId=10387481post/997



이 부분은 개념과함께 구체적인 사용사례가 필요한 부분이며, 샘플을 좀더 준비할예정입니다.

...