본문 바로가기

ORM(SQLALCHEMY)에서 그냥 SQL로 하게된 이유 -제가 생각하는 ORM의 단점

ironwhale 2022. 4. 10.

시작하며

파이썬의 SQLALCHEMY, Flutter drift(Moor)와 같이 쉬게 데이터베이스를 사용 할수 있게 해주는 ORM들이 많습니다. 

저는 플라스크를 접하면서 SQLALCHEMY에 대해 알았고 플러터를 접하면서 drift(Moor)를 알았습니다. 

이런 ORM은 파이썬이나 다트 언어만 알고 있으면 SQL을 모르더라도(?) 어느정도 기능 구현, 사용은 가능하다는 장점이 있습니다. 

 

하지만 저는 그냥 이제부터 파이썬으로 MySQL을 사용하여 서비스를 개발할때 ORM 사용을 줄이려고 합니다. 

지금 부터 그 이유에 대해 써보려고 합니다. 

 

가장 큰 이유는 자료가 많이 없다. 

 공식문서를 보면 좋겠지만 당장 내가 필요한 기능을 찾기에는 공식문서를 다 볼수도 없고, 구글링을 해봐도 쓰는 사람이 적어서 그런지 자료가 상당히 부족한것이 현실이더군요. 이런 기능을 구현하기 위해 정말 많은 검색을 했지만 그냥 SQL 문법으로 하는것은 많이 나오는데 SQLALCHEMY를 이용해서 구현하는 것은 잘 나오지 않더군요... 

그 대표적인 예가 아래 링크에 있는 [SQL] Postgres에서 중복도 제거하고 다른 컬럼 기준으로 정렬하기 이것을 해결하느라고 정말 시간을 얼마나 잡아 먹은지 모르겠습니다. 결국에는 해결책을 찾긴 했지만요... 

https://jh-industry.tistory.com/36

 

[SQL] Postgres에서 중복도 제거하고 다른 컬럼 기준으로 정렬하기(DISTINCT, ORDER BY, subquery

SQL(Postgres)로 해보기 //Postgres SELECT * FROM ( SELECT DISTINCT ON (중복을 제거할 컬럼명) * FROM 테이블명 WHERE name='a') as foo ORDER BY id DESC; // 정렬할 컬럼 python SQLAlchemy로 해보기 from sq..

jh-industry.tistory.com

 

정말 사람들이 많이 쓰는 언어의 장점은 내가 모르는것이 있을때 물어볼곳이나 해답이 많다는 것입니다. 

 

어차피 SQL도 어느정도 알아야 한다. 

네 어차피 ORM을 쓰려고 해도 내가 사용하려는 데이터 베이스의 개념은 어느정도 알고 있어야 되는거 같습니다.  둘다 아는것이 강점이 될수도 있지만 아직 저는 초보 개발자이기 때문에 한가지라도 제대로 하는것이 중요할거 같아 그냥 ORM을 쓰지 보다는 SQL 문법을 온전히 익혀 PyMySQL을 통해 MySQL을 다루는 것이 좋을거 같다는 생각이 들었습니다. 

그러면 ORM을 몰라고 SQL문법 만으로도 서비스를 구현하는데 자료 찾기도 쉽고, 하나만 공부하면 되기 때문에 부담도 덜하고 1석 2조 네요 사실 "[SQL] Postgres에서 중복도 제거하고 다른 컬럼 기준으로 정렬하기" 이것을 해결 할때도 SQL 문법으로 한것을 보고 꺼꾸로 ORM으로 어떻게 바꾸면 되지라고 생각하여 해결한 사례입니다. 

 

이처럼 ORM만으로 서비스를 구현할 수도 있지만 저처럼 ORM에 능숙하지 않은 사람에게는 그냥 SQL 한가지만 제대로 알고 서비스를 구현하는게 더 나은 선택인거 같습니다. 

 

 

준비 과정이 필요하다

간단하게 되지는 알기 위해 ORM은 준비 과정이 많습니다. 테이블을 정의해야 되고 세션이라는 것도 생성해야 되고 정말 간단한 프로젝트에 경우 배보다 배꼽이 큰 경우도 있더군요 그냥 PyMySQL를 통해 쿼리를 날리면 쉽게 구현되는 것도 세션도 만들고, 테이블도 정의해야 되고 사용하기전 살짝 귀찮은 과정이 있습니다. 

 

이상 제가 ORM에서 그냥 SQL을 쓰기로 한 이유에 대해 적어 보았습니다. 

 

 

댓글