마이의 개발 블로그

[Spring] ORM(Object-Relational Mapping)을 사용하는 이유 본문

개발지식/Spring

[Spring] ORM(Object-Relational Mapping)을 사용하는 이유

개발자마이 2023. 10. 12. 03:17
반응형

배경

ORM의 장단점을 알아보고, 어떤 상황에서 사용되는지 알아보려고 합니다.

ORM의 장점

- 객체지향적 접근: 객체와 DB를 맵핑시켜 객체지향 언어로 DB를 조작할 수 있게 됩니다.

- 추상화: DB를 추상화하여 접근하므로 구체적인 SQL 지식 없이 간편한 DB 조작이 가능해집니다.

- 자동화: 반복적인 CRUD 작업을 자동화할 수 있습니다. 매번 직접 SQL을 작성할 필요가 없기 때문입니다.

- 유지보수성 향상: DB 모델이 변경되거나 하는 경우 변경된 부분들에 대한 수정이 상대적으로 용이해집니다.

- DB 독립성: ORM을 거쳐 DB에 접근하여 DB에 대한 의존도가 낮아집니다. 만약 DB 벤더가 변경되더라도 그에 따른 제반 작업(SQL 수정 등)을 할 필요가 없어집니다.

- 성능 향상: 쿼리 최적화나 캐싱이 기본적으로 제공되어 성능상의 이점을 얻을 수 있다는 장점이 있습니다.

 

-> ORM을 사용하면 개발자가 DB와 연관된 작업에 신경을 덜 쓰게 되어 높은 생산성을 얻을 수 있습니다.

ORM의 단점

- 높은 학습 곡선: ORM을 이해하고 사용하기까지의 학습 기간이 필요합니다. ORM을 적절하게 사용하기 위해서는 SQL과 ORM 둘 다를 잘 알아야 합니다. 직관적인 SQL에 비해 ORM에는 눈에 보이지 않는 영역에서 이루어지는 동작이 많습니다.
- 복잡한 쿼리 작성의 어려움: 상황에 따라 복잡한 쿼리의 경우 직접 SQL을 사용하는 것이 더 효과적입니다.
- 성능 문제: 잘못된 사용 시 성능 문제가 발생할 수 있어 주의를 기울일 필요가 있습니다.

 

-> 학습곡선이 높고, 복잡한 쿼리를 다룰 경우 ORM이 커버하지 못하거나 성능 문제가 발생될 수 있습니다.

ORM 도입할 때 생각해볼만한 질문들

프로젝트 수행과 기술적인 제약 둘 다를 고려하여 ORM의 도입이 적절한 선택인지를 고민해야 합니다. 

 

프로젝트 수행 관점:

- 팀에게 ORM 개발 역량이 있는지?

- 향후 유지보수에 필요한 인력 수급이 용이한지?

- 학습에 필요한 시간적 여유가 주어지는 프로젝트인지?

- 고객 요구사항의 변경(에 따른 DB의 변경)이 잦은 프로젝트인지?

 

기술적인 제약을 고려한 관점:

- 극한의 성능을 이끌어내야하는 프로젝트인지?

- 복잡한 쿼리가 많이 필요한 프로젝트인지?

- DB 벤더에 종속적인지? 특정 DB벤더에서만 제공하는 기능을 사용해야하는지?

ORM을 사용하는 이유

위의 내용들을 종합해보면, ORM의 사용 이유는 한 마디로 생산성 향상일 것입니다. 학습 곡선이 조금 높을 수는 있지만 잘만 사용한다면 불필요한 작업을 줄여주어 비즈니스 로직에 집중할 수 있게되고 개발 시간을 단축시킬 수 있기 때문입니다. 쿼리를 직접 작성하지 않기 때문에 실제로 작성되는 코드의 양도 적어지고 개발속도가 더 빨라지는 경험을 할 수 있습니다. 그리고 ORM으로만 해결하기 어려운 문제는 네이티브 SQL을 사용하여 보완이 가능하기 때문에 위에 언급된 단점들을 상쇄시킬 수 있습니다. 오히려 '이 프로젝트에 ORM이 얼마나 적합한지?'의 문제를 판단하는 일이 더 어려운 문제라고 생각됩니다.

Note

- 많은 채용공고들이 ORM 사용 경험을 필수 요건으로 꼽는다. 이미 전세계적으로 활발히 사용되던 기술이었고 한국에 조금 늦게 퍼진 감이 없지않아 있는 듯하다.

- N+1 문제, 지연로딩과 즉시로딩, 캐싱 등은 별도 정리 예정

- 한 번쯤 보면 좋을 ORM에 대한 갑론을박(8년 전 김영한님 작성글): https://okky.kr/questions/286812

반응형
Comments