본문 바로가기
취대넓얕

[기술면접] 11일차 문답 | ORM

by 째깍단 2023. 8. 2.

ORM에 대해서 설명하시오

Object Relational Mapping, 객체-관계 매핑

객체와 관계형 데이터베이스(RDBMS)의 데이터를 자동으로 매핑해주어 RDB 테이블을 객체지향적으로 사용하게 해주는 기술

  • 객체 지향 프로그래밍OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 관계형 데이터베이스 DB(Relational DataBase)에서 쓰이는 데이터인테이블 자동으로 매핑(연결)하는 것
  • 객체와 관계형 데이터베이스 사이에 존재하는 패러다임 불일치를 해소
  • 반복적인 CRUD SQL을 알아서 처리해줌
  • 객체 모델링을 손쉽게 하도록 도움

⇒ 객체와 관계형 데이터 베이스는 지향 목적이 달라 기능과 표현방식도 다르다.

  • 상속, 연관관계, 객체 그래프 탐색, 비교 등에서 차이가 있다(추가 공부가 필요)

Django에서는 model에서 테이블을 설정해 orm을 매핑합니다.

https://gmlwjd9405.github.io/2019/02/01/orm.html https://live-everyday.tistory.com/229

 

 

 

 

Django ORM의 장단점은 무엇입니까?

 

장점 : 쉬운 디버깅, 버전 관리, 이력 추적 및 여기에서 따라오는 생산성

  • 객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 도와준다
    • SQL 쿼리 대신 직관적인 코드로 데이터를 조작
    • 객체지향적 접근으로 생산성이 증가한다
  • 재사용 및 유지보수의 편리성이 증가한다
    • ORM은 독립적으로 작성되어있고 객체를 재활용 할 수 있다
    • ERD 의존성 낮춤
  • 보안
    • 내부적으로 쿼리를 생성해 SQL Injection과 같은 보안 취약점을 줄일 수 있다.
      ** SQL Injection : 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위
  • DBMS에 대한 종속성이 줄어든다
    • 대부분의 ORM솔루션은 DB에 종속적이지 않음
    • 객체에 집중해 DBMS를 교체하는 거대한 작업에도 비교적 적은 리스크와 시간이 소요됨

 

단점 :

  • ORM으로만 서비스 구현은 어려움
    • 사용은 편리하지만 설계가 신중해야함
    • 프로젝트의 복잡성이 커질 경우 난이도 올라감
    • 잘못 구현된 경우 속도저하, 일관성이 무너지기도 함
  • 프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어렵다
    • 객체→데이터 변환 필요, 생산성 저하나 리스크가 많이 발생

 

 

 

 

** ORM 객체 관계 맵핑 프레임워크

: 객체와 RDBMS의 테이블 구조를 맵핑해주는 역할

 

개발자가 쿼리를 별도로 작성할 필요가 없음 DB와 관련된 비즈니스 로직은 모두 코드에서 처리 쿼리문은 프레임워크에서 생성, DB의 종류에 독립적

 

 

 

** 프로시저 Stored Procedure

: 미리 준비된 SQL 코드를 데이터베이스에 저장해놓고 이를 함수처럼 호출하는 방식

 

DB 구조같은 내용이 외부로 노출될 위험이 적어 보안성에서 좋음 DB에서 저장된 코드를 불러내여 실행하기 때문에 실행 속도가 매우 빠름 로직을 DB 자체에서 처리하여 성능적 장점을 크게 얻기는 힘듦

 

 

⇒ 둘을 함께 사용할 수 있지만 일관성이 떨어져 유지보수성이 나쁨

⇒ 개발 환경에서 협업의 중요성이 날이 갈수록 중요해지고 있기에 협업 환경에 불리한 프로시저 방식은 잘 사용되지 않음

 

 

 



추가+ SQL기술에 대해 아는 바가 있는지?

  • SQL Statements : String으로 작성한 쿼리를 이용해 직접 DB를 다루는 방법 (SQL injection에 취약)
  • SQL Mapper : DB의 쿼리문을 객체지향 형태의 함수로 맵핑해주는 기술
  • Stored Procedure : 미리 준비된 SQL 코드를 데이터베이스에 저장해놓고 이를 함수처럼 호출하는 방식
  • Object-Relation Mapping : 객체 - DB관계 매핑

 

⇒ 참고 문서 : https://kayuse88.github.io/database-logic/

 

 

ORM (Object Relational Mapping)의 사용 이유, 장단점

https://eun-jeong.tistory.com/31