dev_dtr
168
2022-04-29 11:36:42
12
1109

ORM은 꼭 필요한가요?


안녕하세요 Django 주니어 주니어 개발자입니다.

Django 개발 중인데 대부분의 예시 코드를 보면 ORM을 통해 db table을 model화 시키고 ORM을 통해 조작을 해서 return 하더라구요.

근데 전 그 로직이 가독성이 떨어지는 것 같아서 백과 프론트 분리한다음 settings에서 DB 연결 설정 하고 SQL Query 문을 통해 데이터를 출력한 뒤 Json 송신하는 방법을 사용하는데 틀린 방법일까요?

0
  • 댓글 12

  • 인성 절구로 빻음
    2k
    2022-04-29 11:48:07

    프로그램밍에 정답이 어디있겠습니까

    틀린 방법이라는 것은 없습니다.

  • dev_dtr
    168
    2022-04-29 11:49:19

    인성 절구로 빻음  초보 개발자이다 보니 뭔가 로직적인 문제가 있을까봐 무섭습니다 ㅋㅋㅋ;

  • 개발 까마귀
    314
    2022-04-29 11:55:14

    기본적인 CRUD는 ORM으로 하고 복잡하고 확장성있는 유연한 쿼리가 필요하면 생 쿼리 쓰는 경우가 많습니다.

  • 시인들
    2k
    2022-04-29 11:57:39

    꼭 필요한 건 아니구연;; sql 문 쓰시면 점점 정형화하기 힘들어지거든욘...그걸 방지하기 위함인데...가독성이라기 보다는...아마 불편해서 그런 걸 겁니다..프로그래밍 규칙 같은 느낌이졍;; 

  • skill
    576
    2022-04-29 12:05:45
    도메인이 다르면 join은 안 쓰는게 유연한 구조를 위해서 필수적이라 보기 때문에 orm 활용도가 생각보다 크진 않다고 생각합니다. 그냥 선택사항 아닐지.
  • 왕왕
    3k
    2022-04-29 12:12:55
    장단이 있긴한데 SQL 위주로 가면 한방쿼리가 되고 진짜 남의 쿼리 알아보질 못하는 상황이...
  • mipo59
    605
    2022-04-29 12:46:22

    Django에선 선택사항이 아닌 거의 필수예요

    ORM 만 쓰는 경우와 섞어쓰는경우는 봤어도

    Django를 쓰면서 RawSQL로 작업하는경우는 본적이 없어요..


    Django db가 장고에서 큰 부분을 차지한다고 생각해요

  • 캰미
    481
    2022-04-29 12:48:51 작성 2022-04-29 12:50:44 수정됨

    제가 예전엔 자바나 마이바티스 쓰고 다른 분야 개발하다가

    지금은 이직하고 django 쓰고 있는데

    데이터베이스나 SQL에 대한 이해도가 낮은 상태에서 ORM을 쓰고 서비스 규모를 키워나가면

    DB서버 폭파시키기 딱 좋을거 같더라구요.

    너무 비효율적으로 데이터베이스를 활용하는 케이스가 좀 있어서

    이게 디비 이해도가 있으면 개선해서 사용할 수 있는데, 모르면 개선할 생각 조차 못할것 같습니다.

    초보자들은 기능 구현은 되니까 막 쓰다가 터질 것 같은 느낌...

  • kmksk
    1k
    2022-04-29 12:52:57

    (이 글은 저 개인의 해석일뿐이니 참고만 해주세요)


    객체지향 개발을 선호하지 않는다면 안써도 무관.

    대부분의 비즈니스 로직이 DBMS 상의 query 로 해결이 가능하다면 ORM 으로 복잡한 쿼리를 구현하는것은 고역일 것입니다.(여기서 개발자로 칭하는것은 사실상 DBA)

    하지만 ORM 을 쓴다는것은, 객체지향 개발에 있어서 필요한 것 입니다. query 는메인 언어와 다른 언어 체계이며 컴파일 과정이 없으며 타입을 채크할수도 없습니다. 물론 IDE 에 따라 지원하기도 합니다만 핵심은 메인 언어체계와 개발 패턴이 다르다는것입니다. 결국 객체지향이라는 큰 틀을 깨는샘.  (파이썬으로 개발을 하다가 갑자기 특정 코드에서는 자바로 개발한다고 생각해보세요. 일관성이나 패턴이 무너지게됩니다.)

    ORM 에서의 DB 는 단지 영속화를 위한 저장소일 뿐 복잡한 로직을 대신 처리해주는 곳이 아닙니다.

    ORM 을 쓴다는 것은 복잡한 쿼리를 걷어내고 많은 일을 어플리케이션에서 처리하도록 구조를 변경하는 일이기도 합니다. 테이블 구조부터 달라진다고 생각해야합니다.

    객체지향 개발에 대해 필요성을 느끼지 못하고 그렇게 개발하고 싶지 않다면 쓰지 않는것을 권합니다.


  • 제타건담
    8k
    2022-04-29 12:53:58

    ORM 으로 하는 이유는 어플리케이션의 모델 설계와 DB의 설계가 서로 맞지 않기때문에 이를 맞추기 위해 ORM 으로 하는 편입니다..

    이것이 장기적으로 봤을때는 좋은점이 어플리케이션 모델과 DB 모델의  같음으로 인해 현실적인 모델 구조는 이런 구조인데 단지 DB의 퍼포먼스 향상을 위한다는 이유로 다르게 설계되어 전반적은 구조의 효율이 떨어지는 부분을 막을수 있죠(물론 퍼포먼스에 너무 치명적으로 영향을 끼치면 DB 우선으로 하고 ORM 설계 부분을 바꿔줘야 하긴 합니다)

    예를 들어 orm 으로 설계할 경우 주소라는 모델 객체를 만들어서 거기에 우편번호, 주소1, 주소2 멤버변수를 만들어서 넣는 식으로 해서 마치 현실 생활에서 우리가 주소 쓰듯이 주소 모델만 사용해서 할 수 있지만 DB 는 주소 모델을 만드는게 아니라 주소모델을 구성하는  우편번호, 주소1, 주소2 이렇게 쪼개서 관리해야 하기 때문에 현실과는 차이가 있죠..

    그러나 ORM은 학습곡선이 높기 때문에 초보자가 공부하는데 쉽지는 않습니다..먼저 객체지향과 DB 쪽에 대한 선지식을 요구하고 이 둘을 섞는것이 ORM 이거든요..

    빠르게 개발해야 할때는 DB 쪽 중심으로 가는게 빠를수는 있겠습니다만..개발과정이나 또는 운영과정에서 위에서 언급했던 이유들로 인해 좀 불편해지는 부분들도 있습니다..

    일단은 ORM 은 본인이 객체지향설계와 DB 쪽에 대한 선지식을 어느정도 갖춘뒤에 진행하세요..



  • dev_dtr
    168
    2022-04-29 13:41:46

    다들 좋은 답변 감사합니다! 오늘도 하나 알아갑니다

  • scwon77
    2k
    2022-04-30 23:38:54

    ORM.. JPA의 경우.. 막판에 몰아서 C,U,D를 합니다. (로직에서 모아놨다가 마지막에 한방에 진행.)

    일반 INSERT 쿼리의 경우 EXECUTE 할때마다 DB에 가서 실행을 하고 Commit을 할때까지 잡아 놓고요.

    나중에 시스템에 엄청나게 많은 사람들이 집중되면 성능 차이가 나타나기 시작할 겁니다.

    조회의 경우는 똑같은 쿼리를 10번을 던졌을 경우 나머지 9번은 db 서버에 안 들립니다.

    서버와 DB를 왔다갔다 하는 것도 트래픽을 무시하지 못합니다.

    그래서 개발하기 짜증나도 JPA를 씁니다.

    일반 SI에서는 되도록 추상화도 적게 해야하고 로직도 눈에 보기 좋아야 유지보수가 편하죠.

    근데 성능은 JPA가 좋을 수 밖에 없습니다.

    DB Lock이 잘 안 걸린다고 보시면 되요. DB 성능에 도움이 됩니다.

    러닝커브가 꽤 있으니 SI에서는 비추합니다. 물론 잘 알고 쓰면 일반 INSERT 쿼리보다 개발이 빠릅니다.

  • 로그인을 하시면 댓글을 등록할 수 있습니다.