PHP 용 ORM 에 대한 고찰 > 서버관리자

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!

서버관리자

서버관리자 모임 게시판 입니다.

PHP 용 ORM 에 대한 고찰 정보

PHP 용 ORM 에 대한 고찰

본문

제목만 그럴싸한 이야기가 될까봐 우려가 깊습니다.

우선 옆동네 okjsp (지금은 오키로 바뀌었죠?) 에서 ORM 과 JPA 로 한참 이슈가 되고있을때

(정치적인 이슈와 DBA 와의 관계등등으로 이슈가 많죠) 

정작 PHP 군은 너무 조용하고 또 변화에 크게 놀라운 기색이 없음에 또 한번 놀래고 나름 이거저거 

분석도 해보고 고심을 해서 글을 적어봅니다.

사실 서버관리자 그룹과 맞는 글인가? 에 대한 고민도 더러 했습니다만..

추후 ORM 을 사용하게 된다면 고심을 할 여지는 있지 않을까 하는 마음에 남겨봅니다.

우선..

ORM 이 무엇이냐? 라는 질문부터 풀어가야겠죠

꽤 오래 전 공부를 하면서 들은 ORM 이란 단어 object-relational mapping 라는 단어로 시작했었습니다.

관계형.. 참 많이 듣고 많이 쓰이고 있죠

불과 얼마 전 OOP 에 대한 가치있는 이야기를 주고 받으면서 알게된 객체..

이 객체를 언어단에서만이 아닌 DB 에서도 사용하자 라는 관점에서 시작되었습니다.

DB 에 의존하는 방식이 아닌 비지니스 로직을 집중함으로서 DB의 의존도를 줄이게 되었죠

즉 하나의 DB 에 의존하지 않고 다양한 DB 환경에서도 내가 만든 로직이 돌아가게 한다.

이게 핵심입니다.

 

실제 예로 현재 ORM 들은 mysql, oracle, postgres 등의 다양한 DB 연결을 지원합니다. 

따라서 mysql 에서 개발한 것을 postgres 로 변경한다고 하여서 생기는 고충이 줄어든다는 이점이 존재하죠.

 

PHP 에는 다양한 ORM 이 존재합니다. Propel, Doctrine, Eloquent, Redbean
이름이 다를 뿐 이들 모두 기능상으로는 같은 방향을 추구하고 있기에 사용상 어려움이 없습니다.

저 또한 Propel 을 사용하다 최근에는 Eloquent 를 사용하면서도 문제없이 이용가능하였으니까요.

간단히 어떤 테이블에서 무엇을 가져와야 한다고 했을 경우 이걸 쿼리를 작성해서 구동을 하는

작업을 많이 하셨을 것입니다.

SELECT id FROM `table` ~

등으로 쿼리를 작성 후 그걸 call 하는 방식으로 많이 개발하시죠.

 

아래는 Eloquent 에서 사용하는 방식의 예제 입니다.

 

// get all apples
$apples = Apple::all();
 
// find a particular Apple by id
$bear = Bear::find(1);
 
// find an apple by a particular color
$appleSpec = Apple::where('color', '=', 'Yellow')->first();

 

간결하고 의미도 분명합니다. 적어도 코드를 이해하는 사람이 보았을 때, 이 사용자가

무엇을 가져와서 어떤 작업을 할려는지 의도를 알 수 있죠.

물론 DB 쿼리를 잘 모르는 사람도 이정도면 이해가 될 정도입니다.

 

이처럼 개발의 속도를 증가시켜주고 접근성을 향상해주는 ORM..

뭐 저는 장점만 열심히 적었습니다만 단점도 있습니다. 

가장 큰 이슈로 적용되는 부분이 바로 프로젝트의 고도화로 인한 복잡성에 대응이 어려워진다는 것이죠.

잘 짜여진 DB 관계에서는 ORM 이 효과적일것입니다. 하지만 통계와 정산이 들어간 부분에서의

ORM 은 어쩌면 독이 될 여지가 높겠지요. 사실 ORM 을 어디부터 어디까지 적용하라 라는 부분에 대해서도 어느정도 공감을 하고 실제로 저 또한 많은 부분에 ORM 을 반영하진 않습니다.

하지만 이 부분은 정확히 나누어야 하는 부분이라 보여집니다. 

필요에 의해서는 Native SQL 이 답이 되는 부분도 있습니다. (통계의 복잡도를 위의 예제처럼 풀어가기엔 사실 무리가 많지요)

그러한 이슈로 인해서 각각의 ORM 에서는 Native SQL 을 제공합니다만.. 저는 이러한 부분은 별도로 사용되는게 더 낫다 라는 입장입니다.

 

뭐 길게 이런저런 정리가 잘 안되는 글을 적었습니다만 ORM 말로만 좋다 싫다 라고 하기보다는

자신의 환경 또는 프로젝트에 어울리는것을 찾아 반영해보는것도 답이지 않을까 싶습니다.

 

아래 링크는 PHP ORM 에 대한 설명과 사용 예시가 있는 웹 사이트 입니다.

http://www.gajotres.net/best-available-php-orm-libraries-part-1/

아마 저보다 더 잘 풀어 설명을 해주리라 봅니다 (영어라는게 함정인건가요 ;)

다소 정리가 되지 않은 글을 읽어 주셔서 감사합니다. 

 

 

 

 

공감
0

댓글 1개

전체 637 |RSS
서버관리자 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT