ORM 사용 시 컬렉션 이름 자동 생성 규칙과 직접 지정 방법
KUKJIN LEE • 7개월 전 작성
ORM (Object-Relational Mapping) 라이브러리를 사용할 때 데이터베이스 내에서 자동으로 생성되는 컬렉션 이름이 모델 이름의 복수형으로 설정되는 것은 매우 일반적인 동작입니다. MongoDB와 같은 NoSQL 데이터베이스에서 ORM 또는 ODM (Object-Document Mapping) 라이브러리를 사용하는 경우, 컬렉션 이름은 종종 모델 이름을 기반으로 자동으로 결정되며, 많은 라이브러리가 단수형 모델 이름을 복수형으로 변환하여 컬렉션 이름으로 사용합니다. 예를 들어, User
모델은 users
컬렉션으로, Tech
모델은 teches
컬렉션으로 변환될 수 있습니다.
이러한 이름 변환은 ORM 또는 ODM 라이브러리가 데이터베이스 내에서 자동으로 관리하는 데이터 구조를 더 쉽게 이해하고 조직화하기 위해 수행합니다. 예를 들어, Mongoose와 같은 MongoDB를 위한 ODM 라이브러리는 기본적으로 모델 이름을 복수형으로 변환하여 컬렉션 이름을 결정합니다.
컬렉션 이름 직접 지정하기
원치 않는 경우, 모델 또는 스키마를 정의할 때 컬렉션 이름을 직접 지정할 수 있는 옵션을 제공합니다. 예를 들어, Mongoose를 사용하는 경우 다음과 같이 컬렉션 이름을 명시적으로 지정할 수 있습니다.
const techSchema = new mongoose.Schema({
// 스키마 정의
}, { collection: 'tech' }); // 명시적으로 컬렉션 이름 지정
const Tech = mongoose.model('Tech', techSchema);
코드에서 { collection: 'tech' }
옵션을 통해 Tech
모델이 tech
컬렉션에 저장되도록 지정하고 있습니다. 이렇게 하면 Mongoose의 기본 복수형 변환 동작을 무시하고, 개발자가 원하는 정확한 컬렉션 이름을 사용할 수 있습니다.
이는 관계형 데이터베이스 또한 마찬가지입니다.
-
ActiveRecord (Ruby on Rails): ActiveRecord는 Ruby on Rails 프레임워크의 일부로, 모델 이름을 기반으로 복수형 테이블 이름을 자동으로 생성합니다. 예를 들어,
User
모델은users
테이블에 매핑됩니다. 이는 Rails의 "Convention over Configuration" 철학을 따르는 것으로, 개발자가 테이블 이름을 명시적으로 지정하지 않아도 되게 해줍니다. -
Django ORM (Django): Django는 Python으로 작성된 또 다른 인기 있는 웹 프레임워크로, 자체 ORM을 제공합니다. Django ORM도 모델 클래스 이름을 복수형으로 변환하여 관련 테이블 이름을 자동으로 결정할 수 있지만, Django의 경우는 모델 이름을 그대로 사용하고, 복수형 변환은 주로 관리자 사이트나 폼에서 사용자 인터페이스를 위해 적용됩니다. 테이블 이름은 명시적으로
Meta
클래스 내에서db_table
속성을 통해 지정할 수 있습니다. -
Sequelize (Node.js): Sequelize는 Node.js 애플리케이션을 위한 비교적 인기 있는 ORM 라이브러리로, 모델 이름을 복수형으로 자동 변환하는 기능을 가지고 있습니다. Sequelize는 모델 정의 시
tableName
옵션을 제공하지 않으면 자동으로 모델 이름을 복수형으로 변환하여 사용합니다.
따라서 ORM 사용 시, 컬렉션(테이블)을 직접 생성해 사용할 때에는 모델에서 단수형 테이블 고정이 됐는지, 자동 생성 설정인지 확인 후 데이터 베이스를 사용해야 합니다.