기술면접_데이터베이스와 ORM(Object-Relational Mapping)에 대해서

reggias·2023년 5월 11일
0

기술면접

목록 보기
13/18

데이터베이스

데이터베이스(Database)는 데이터를 구조화하여 관리하는 시스템

ORM

ORM(Object Relational Mapping)은 객체와 관계형 데이터베이스(테이블) 간의 데이터를 매핑하기 위한 기술입니다. ORM은 객체 지향 프로그래밍에서 사용되는 객체와 관계형 데이터베이스에서 사용되는 테이블 간의 차이를 해결하기 위해, 객체와 데이터베이스 간의 매핑을 자동으로 수행합니다.

ORM을 사용하면, 데이터베이스와의 상호작용을 위한 SQL 쿼리를 직접 작성하지 않아도 됩니다. 대신, ORM 프레임워크에서 제공하는 API를 사용하여 객체를 데이터베이스에 저장하고, 검색하고, 갱신할 수 있습니다.

ORM을 사용하면, 개발자는 객체 지향적인 코드를 작성하고, 데이터베이스와의 상호작용에 대한 복잡한 부분을 ORM 프레임워크가 처리하므로, 생산성을 높일 수 있습니다. 또한, ORM을 사용하면 데이터베이스와의 상호작용이 더욱 추상화되므로, 데이터베이스를 변경해도 코드를 변경하지 않아도 됩니다.

Hibernate: Java 언어로 작성된 ORM 프레임워크로, Java Persistence API(JPA) 표준을 구현합니다.
Sequelize: Node.js 언어로 작성된 ORM 프레임워크로, MySQL, PostgreSQL, SQLite, MSSQL과 같은 다양한 데이터베이스와 상호작용할 수 있습니다.

ORM을 사용했을 때, 일어날 수 있는 문제점

  1. 성능 문제: ORM은 객체와 데이터베이스 간의 변환 작업을 수행하기 때문에 처리 시간이 느릴 수 있습니다. 또한 ORM이 생성하는 쿼리가 복잡하고 비효율적일 수 있어서 성능 문제가 발생할 수 있습니다.
  2. 데이터베이스 기능 사용의 어려움: ORM은 데이터베이스에 있는 모든 기능을 지원하지 않을 수 있습니다. 특정 데이터베이스에서 사용 가능한 기능을 사용하려면 ORM에서 지원하지 않는 쿼리를 직접 작성해야 할 수도 있습니다.
  3. 학습 곡선: ORM은 쉽게 사용할 수 있지만, 이를 배우는 데 시간이 걸릴 수 있습니다. ORM이 제공하는 모든 기능을 이해하려면 많은 시간과 노력이 필요할 수 있습니다.
  4. 데이터베이스 성능과 일관성 문제: ORM을 사용하면 데이터베이스의 성능과 일관성에 영향을 미칠 수 있습니다. 예를 들어 ORM에서 수행하는 쿼리가 불필요하게 많아져서 데이터베이스 서버의 부하가 증가할 수 있습니다. 또한 ORM이 제공하는 캐시 기능을 잘못 사용하면 데이터베이스와 일관성이 깨질 수 있습니다.
  5. 운영체제 차이로 버전을 낮춰야하는 경우가 생김

ORM과 SQL의 차이점

ORM은 객체 지향 프로그래밍에서 사용되는 클래스, 객체와 관계형 데이터베이스의 테이블, 레코드와의 매핑을 자동화하는 도구이고, SQL은 데이터베이스 관리 시스템에서 사용하는 쿼리 언어이다. ORM은 객체를 중심으로 데이터를 다루며, 객체 간의 관계를 쉽게 처리할 수 있다는 장점이 있지만, SQL에 비해 성능 저하나 복잡성 증가 등의 문제점도 존재한다.

또한 보안적인 측면에서는 ORM과 SQL은 서로 다른 방식으로 데이터베이스에 접근하므로 차이가 있습니다. SQL은 일반적으로 쿼리에 직접 값을 전달하고 쿼리가 데이터베이스에 직접 전송되므로 보안 취약점이 존재할 수 있습니다. 반면에 ORM은 애플리케이션 코드 내에서 쿼리를 생성하고 실행하기 때문에 쿼리 인젝션 등의 보안 취약점이 줄어들 수 있습니다. 그러나 ORM을 잘못 사용하면 보안 문제를 발생시킬 수도 있으므로 개발자는 적절한 방법으로 ORM을 사용해야 합니다.

SQL에 비해 성능 저하나 복잡성 증가 등의 문제점에 대해서

ORM은 객체와 데이터베이스 간의 매핑 작업을 자동화하기 때문에 생기는 오버헤드 때문에 SQL에 비해 성능 저하가 일어날 수 있습니다. 또한, ORM을 사용할 경우 복잡한 쿼리를 작성하는 것이 어렵기 때문에 특정한 상황에서는 SQL을 사용하는 것이 더 유리할 수 있습니다. 또한 ORM을 사용할 경우, 객체 간의 관계를 매핑하는 작업이 필요하기 때문에 복잡성이 증가할 수 있습니다. 이러한 이유로 ORM을 사용할 때는 성능 및 복잡성 증가 문제를 고려하여 적절한 사용 방법을 선택해야 합니다.

ORM을 사용하는 것이 반드시 유리한가? 그렇지 않으면 어떤 상황에서 ORM을 사용하지 않을 것인가?

ORM은 편리하게 데이터를 다룰 수 있도록 해주지만, 모든 상황에서 사용하기에는 제한적이다. 대규모 시스템에서는 ORM이 성능 이슈를 야기할 수 있으며, 복잡한 쿼리를 다루는 경우에는 직접 SQL을 작성하는 것이 더 효과적일 수 있다. 또한, 데이터베이스의 특정한 기능을 이용해야 하는 경우나 이미 SQL을 사용하고 있는 프로젝트에 ORM을 도입하기에는 부담이 큰 경우에는 ORM을 사용하지 않을 수 있다.

대규모 시스템에서는 ORM이 성능 이슈를 야기할 수 있다는 점에 대해서
ORM을 사용할 경우에는 데이터베이스와 객체 간의 매핑 작업이 필요하고, 이 작업이 커다란 시스템에서는 성능 이슈를 야기할 수 있습니다. 또한 ORM은 데이터베이스에 직접 쿼리를 보내는 것이 아니라 중간에 ORM 라이브러리가 존재하기 때문에, 이 라이브러리에서 발생하는 오버헤드가 성능을 떨어뜨릴 수 있습니다. 이러한 이유로 대규모 시스템에서는 직접 SQL을 작성하는 것이 성능 개선에 더 도움이 될 수 있습니다.

객체 지향 프로그래밍 언어와 관계형 데이터베이스 간의 데이터 변환을 자동화하는 프레임워크 이외에도, 다른 데이터베이스 관련 프레임워크가 있을까요? 그런 프레임워크들의 장단점은 무엇인가요?

ORM 외에도 데이터베이스 관련 프레임워크로는 데이터베이스 마이그레이션 프레임워크나 캐싱 프레임워크 등이 있습니다.

데이터베이스 마이그레이션 프레임워크는 데이터베이스 스키마 변경 시 스키마 자동으로 변경하고 데이터 이전 작업을 수행해주며, 데이터베이스 변경으로 인한 잠재적인 불안정성과 성능 저하가 발생할 수 있습니다.

캐싱 프레임워크는 데이터 조회 시 캐시에 저장된 데이터를 빠르게 반환함으로써 데이터베이스 부하를 줄일 수 있습니다. 캐시가 메모리를 많이 사용하므로, 시스템 리소스 관리가 중요합니다.

마이그레이션 프레임워크의 장단점은 다음과 같습니다.

장점:

  • 데이터베이스 스키마를 쉽게 변경하고 업데이트할 수 있습니다.
  • 다양한 데이터베이스 시스템 간에 데이터를 이전하고 병합할 수 있습니다.
  • 오류가 발생했을 때 롤백이 가능합니다.

단점:

  • 데이터베이스 마이그레이션 스크립트를 작성하는 데 시간이 걸릴 수 있습니다.
  • 데이터베이스 변경으로 인한 잠재적인 불안정성과 성능 저하가 발생할 수 있습니다.

캐싱 프레임워크의 장단점은 다음과 같습니다.

장점:

  • 빠른 응답 시간을 제공하여 웹 응용 프로그램의 성능을 향상시킵니다.
  • 데이터베이스에서 쿼리를 수행하지 않고도 데이터를 제공할 수 있으므로, 데이터베이스 서버의 부하를 줄일 수 있습니다.
  • 분산 캐시를 사용하여 여러 서버 간에 데이터를 공유할 수 있습니다.

단점:

  • 캐시 무효화 및 갱신 문제를 관리해야 합니다.
  • 캐시가 메모리를 많이 사용하므로, 시스템 리소스 관리가 중요합니다.
profile
sparkle

0개의 댓글