ORM

1 minute read

안좋은 추억.

ORM은 첫 이직 후 레거시 서버에서 사용되던걸 이어서 사용해본게 전부다. 전략적으로 관계형 데이터베이스를 일 단위 백업하며 사용하고 있는데 외래키가 잡혀있으면 피곤한 상황이 발생하므로 해당 필드를 유니크 인덱스등으로 대체 사용하고 있었다.(이게 요즘 트랜드라고도 하는것 같다.) 내가 볼 땐 ORM에 정을 붙이지 못한 이유가 이것 때문인것 같다. 샘플코드로 예를 들면 아래와 같은 상황이다.

Django ORM 샘플 코드

model_a = ModelA.objects.filter(user_id=user_id,~~)
model_b = ModelB.objects.filter(user_id=user_id,~~)
...(model_a와 model_b를 지지고 볶고.. 이하 생략)...

조인 한 번이면 될걸 각자 따로 데이터를 추출해서 필요한 값을 세팅하는 코드를 짤 땐 우울했다. 전략적으로 외래키를 지정하지 않은 탓에 모델간 조인을 할 수 없었던 것이 원인이었다. 이렇게 써놓고 보니, ORM을 미워할게 아니고 전략을 미워해야 했구나.

ORM (Object Relational Mapping)

객체지향 프로그래밍에서 쓰이는 클래스와 관계형 데이터베이스의 테이블을 연결해주는 것을 ORM이라고 한다. 하지만 클래스와 테이블은 애초에 상호관계를 고려해서 설계되지 않았기 때문에 불일치가 발생하는데, 이것을 패러다임 불일치라 한다. 이를 해소하기 위해 ORM을 사용하며 따로 SQL를 작성하지 않아도 객체를 통해 데이터베이스를 조작할 수 있다.

ORM 장점

  1. SQL을 직접 작성할 필요가 없다.
    1. 객체지향 프로그래밍에 집중 가능
    2. 가독성 향상
    3. 부수적인 코드 감소
  2. ORM은 데이터베이스에 종속적이지 않다.
    1. 대규모 마이그레이션 작업에서 유리하다.
    2. 이식성이 좋다.
    3. 객체는 재사용이 가능하다.

ORM 단점

  1. 특정 데이터베이스 고유 함수 사용 불가(사실, 단점은 아님)
  2. ORM으로 모든걸 해결할 순 없다.
  3. 초반 세팅작업이 살짝 번거롭다.
  4. SQL을 작성하지 않아도 되는거지, SQL을 작성할 줄 모른다면 성능 이슈가 존재한다.

Tags:

Categories:

Updated:

Leave a comment