MongooseMongoDBORM컬렉션 이름 직접 지정ORM 사용 주의 사항

ORM 사용 시 컬렉션 이름 자동 생성 규칙과 직접 지정 방법

KUKJIN LEE
KUKJIN LEE
2024년 4월 2일
136

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의 기본 복수형 변환 동작을 무시하고, 개발자가 원하는 정확한 컬렉션 이름을 사용할 수 있습니다.

 

이는 관계형 데이터베이스 또한 마찬가지입니다.

  1. ActiveRecord (Ruby on Rails): ActiveRecord는 Ruby on Rails 프레임워크의 일부로, 모델 이름을 기반으로 복수형 테이블 이름을 자동으로 생성합니다. 예를 들어, User 모델은 users 테이블에 매핑됩니다. 이는 Rails의 "Convention over Configuration" 철학을 따르는 것으로, 개발자가 테이블 이름을 명시적으로 지정하지 않아도 되게 해줍니다.

  2. Django ORM (Django): Django는 Python으로 작성된 또 다른 인기 있는 웹 프레임워크로, 자체 ORM을 제공합니다. Django ORM도 모델 클래스 이름을 복수형으로 변환하여 관련 테이블 이름을 자동으로 결정할 수 있지만, Django의 경우는 모델 이름을 그대로 사용하고, 복수형 변환은 주로 관리자 사이트나 폼에서 사용자 인터페이스를 위해 적용됩니다. 테이블 이름은 명시적으로 Meta 클래스 내에서 db_table 속성을 통해 지정할 수 있습니다.

  3. Sequelize (Node.js): Sequelize는 Node.js 애플리케이션을 위한 비교적 인기 있는 ORM 라이브러리로, 모델 이름을 복수형으로 자동 변환하는 기능을 가지고 있습니다. Sequelize는 모델 정의 시 tableName 옵션을 제공하지 않으면 자동으로 모델 이름을 복수형으로 변환하여 사용합니다.

 

따라서 ORM 사용 시, 컬렉션(테이블)을 직접 생성해 사용할 때에는 모델에서 단수형 테이블 고정이 됐는지, 자동 생성 설정인지 확인 후 데이터 베이스를 사용해야 합니다.

 

관련 글

MongoDB Atlas에서 `Indexes`와 `Search Indexes`는 무엇이 다를까?

MongoDB Atlas를 쓰다 보면 컬렉션 화면에서 `Indexes`와 `Search Indexes`라는 두 가지 메뉴를 보게 된다. 이름이 비슷해서 같은 기능의 확장판처럼 느껴질 수 있지만, 실제로는 해결하는 문제가 꽤 다르다. 특히 검색 기능을 붙이려는 시점에는 ...

2026년 4월 10일15

[SQL 입문] 필요한 데이터만 콕 집어 가져올 수 있는 WHERE 절

사용자는 테이블에 있는 모든 데이터를 다 보고 싶어 하지는 않습니다. 오히려 특정 항목에 대한 데이터만 가져오고 싶을 때가 훨씬 많습니다. 예를 들어, 어떤 사용자의 이메일이나 ID는 알고 있는데, 그 사람이 언제 우리 앱에 가입했는지 확인하고 싶다고 가정해 봅시다...

2026년 1월 27일10

SQL에서 SELECT란 무엇인가?

데이터베이스를 거대한 서류 보관함이라고 생각하면 됩니다. 보관함 안에는 수많은 데이터가 차곡차곡 쌓입니다. SELECT는 이 보관함에서 "내가 원하는 정보를 찾아줘!"라고 요청하는 명령어입니다. 이 과정을 전문 용어로 '쿼리(Query)'라고 부릅니다. &nbs...

2026년 1월 26일10

[SQL 기초] "언제 하나씩 다 넣어?" 데이터 한 번에 넣기

개발을 하다 보면 데이터베이스(DB)에 샘플 데이터를 대량으로 넣어야 할 때가 있습니다. 메뉴 100개를 추가해야 하는데 INSERT 문을 100번 쓰고 있다면? 너무 비효율적이죠! 오늘은 SQL에서 여러 데이터를 한 번에 넣는 '다중 삽입(Multiple Inse...

2026년 1월 21일13