ORM이 뭔지 쉽게 이해되는 블로그 포스트가 있었다.
영어공부할겸 오늘은 이걸 번역하면서 ORM을 배워보는 시간을 가져보기로 했다.
원문: https://blog.bitsrc.io/what-is-an-orm-and-why-you-should-use-it-b2b6f75f5e2a
비교적 프로그래밍 세계에 처음 발을 딛은 사람들은 Object-Relational-Mapper 같은 용어들은 매우 어렵게 들릴 수 있다. ORMs의 좋은 점은 보통 ORM과 친해지면 사실 코드를 쓰기 쉽게 해준다.
이번 포스트에서는 ORM은 무엇을 하는지, 그리고 ORM을 프로젝트에 사용하면서 장점과 단점은 무엇이 있는지 알아보자.
Object-Relational-Mapper가 뭔지 알아보기전에, 먼저 Object-Relational-Mapping의 개념을 이야기해보는 것이 더 좋을 것 같다.
NoSQL 데이터베이스만 계속 사용해온 유저가 아니라면, SQL 쿼리들을 많이 작성했을 것이다. 그 SQL 쿼리라는 것은 다음과 같은 모습을 가질 것이다.
SELECT * FROM users WHERE email = 'test@test.com';
Object-Realationl-Mapping은 자신이 선호하는 프로그래밍 언어의 객체 지향 패러다임을 이용해서 위와 같이 쿼리를 작성하거나 혹은 더 복잡한 쿼리를 작성할 수 있게 된다는 개념이다. (Medium에서 사람들이 많이 밑줄친 문단)
간단히 말해서, SQL을 사용하는 것 대신에 자신이 선택한 언어를 통해서 데이터베이스와 상호작용하려고 하는 것을 말한다.
여기에서 Object-Relational-Mapper가 튀어나온다. 사람들이 "ORM" 이라고 언급할 때 그 의미는 이 기술을 구현하는 라이브러리를 의미한다. 예를 들어서, 위에서 보여준 쿼리는 이제 다음과 같이 될 것이다.
var orm = require('generic-orm-libarry');
var user = orm("users").where({ email: 'test@test.com' });
자바스크립트를 이용해서 똑같은 쿼리를 실행시키기 위해서 위처럼 상상의 ORM 라이브러리를 사용하는 것을 볼 수 있다. 비단 자바스크립트 뿐만이 아니라, 자신이 알고있는 다른 언어들을 사용해서 ORM을 사용할 수 있다. 그리고 디비와의 몇몇 인터페이스 복잡성을 추상화할 수도 있다.
그런데 다른 기술과 마찬가지로, ORM을 사용하는 것에도 고려되어야 할 트레이드오프들이 있다.
이미 사용하고 있는 언어로 작성할 수 있다. 솔직하게 말하면, 우리 모두 SQL문을 쓰는 데에 능숙하진 않을 것이다. SQL은 말도 안되게 강력한 언어이다. 그러나 우리 대부분은 그것을 자주 쓰진 않는다. 쓰긴 쓰지만, 한 언어 또는 또 다른 언어를 훨씬 더 잘 사용하는 경향이 있고, 그런 점을 활용할 수 있다는 것은 대단하다.
ORM은 데이터베이스 시스템을 추상화한다. MySQL에서 PostgreSQL로 전환한다거나 또는 각자가 선호하는 것이 뭐든지 그것이 쉽게 되도록 ORM은 데이터베이스를 추상화한다.
ORM에 따라서 많은 독창적인 고급 기능들을 사용할 수 있다. 예를 들어, 트랜잭션 지원, 커넥션 풀링, 마이그레이션, 시드, 스트림 같은 많은 다른 좋은 고급 기능들을 사용할 수 있다.
작성하는 많은 쿼리들은 직접 쿼리를 짜는 것보다 더 나은 기능을 수행한다.
만약 SQL를 마스터했다면, 직접 쿼리를 작성하는 것이 더 나은 성능을 줄 수도 있다.
ORM을 사용하고자 한다면, 각 언어들의 ORM마다 배우는 데에 오버헤드가 있다.
처음 ORM 설정하는 것이 골치아플 수도 있다.
개발자로서, 밑단에서 뭐가 어떻게 동작하는지 이해하는 것은 중요하다. ORMs는 데이터베이스와 SQL을 이해하는 것을 방해하는 역할을 할 수도 있기 때문에, 이런 기술 스택에서 상대적으로 더 약한 개발자로 만들 수 있다.
위키피디아에 다양한 언어에 대한 ORM 리스트가 있다.
That list is missing JavaScript, which is my language of choice, so I will throw my hat in the ring for Knex.js.
They’re not paying me to say that, I’ve simply enjoyed working with their software and I don’t have any experience with other JavaScript ORMs. This article might provide more insightful feedback for JavaScript specifically.
불필요해서 따로 번역하지 않음.
나는 ORM을 사용하는 것을 정말 엄청 즐겼다. 전담 데이터베이스 전문가가 없는 작은 팀에서 일하는 풀스택 개발자로서, ORM은 데이터 레이어 작업을 크게 단순화했다.
몇몇 사람들은 ORM을 구성하는 과정이 힘들다 생각하긴 하지만, 일관된 인터페이스를 사용해서 서로 다른 환경들에 대해 서로 다른 데이터베이스들을 쉽게 설정할 수 있는 편안함이 나는 좋았다.
데이터베이스를 마이그레이션 하고 시드하는 것에 대한 빌트인 지원을 가지고 있는 것은 프로토타입을 더욱 빨리 만들 수 있게하고 더욱 쉽게 만들었다. 이것에 대해선 여기에서 다루었다.
전반적으로, ORM을 사용하지 않는 것이 좋다. 그렇긴 하지만, 나는 SQL 튜닝이 더욱 중요하게 되어지는 스케일에서 일을 하지 않아도 됐기 때문에, 내 의견이 매우 편향되어 있다고 확신한다.
아직 ORM을 써보지 않았다면, 한번 써보길 제안하고, 그것이자신의 개발 시스템을 위해 어떻게 작동하는지 확인해보라. 그러나 궁극적으로 누군가 데이터베이스를 정말 잘쓰는 사람은 당신에게 최고의 ORM 시스템보다 항상 더 나은 퍼포먼스를 줄 것이다.
I hope that you have learned something new today! I would appreciate it if you could drop some 👏 or leave a comment below! Also, feel free to follow me on Twitter and Medium, and Don’t forget to follow Bits and Pieces :)
언젠가 개발자로서 해외로 나가고 싶기 때문에 영어로 어떻게든지 될수있으면 소통해보려 하고 있는데.. 저번에 노션 기여에 이어서 미디엄에 있는 튜토리얼을 따라하면서 댓글을 써봤다. 기분 좋은 건 단답이 아니라서 좋았다. ㅋㅋ
https://yashodgayashan.medium.com/how-to-use-spring-jdbctemplate-dec9e4476eaa
오오 큐 멋져요👍👍👍