Computer >> 컴퓨터 >  >> 프로그래밍 >> 데이터베이스

MongoDB 활용 팁 2부: 최적화, 인덱싱부터 스키마 설계까지

이 글은 Tricore가 2017년 8월 24일에 처음 게시한 내용을 바탕으로 재구성했습니다.

이 시리즈의 1부에서는 MongoDB 사용에 도움이 되는 몇 가지 팁을 소개했습니다. 2부에서는 최적화, 성능, 속도, 인덱싱, 스키마 설계, 데이터 안전성 등 MongoDB와 관련된 더 많은 주제를 다룹니다.

팁 1: 개발 환경에서 --notablescan 옵션 활용하기 (운영 환경에서는 비권장)

MongoDB 활용 팁 2부: 최적화, 인덱싱부터 스키마 설계까지

출처: www.percona.com

MongoDB에는 --notablescan이라는 옵션이 있으며, 쿼리가 전체 테이블 스캔(full table scan)을 수행해야 할 때 오류를 반환합니다. 이 옵션은 개발 환경에서 모든 쿼리가 인덱스를 제대로 활용하는지 검증하고 싶을 때 매우 유용합니다. 다만 운영(프로덕션) 환경에서는 성능 문제를 일으킬 수 있어 사용을 권장하지 않습니다. 많은 간단한 관리 작업들이 테이블 스캔을 필요로 하기 때문입니다. 이 옵션을 사용하면 데이터베이스에서 전체 테이블 스캔이 필요한 컬렉션 목록을 한눈에 확인할 수 있습니다.

팁 2: 하나의 셸에서 모든 서버와 데이터베이스 관리하기

기본적으로 MongoDB는 localhost:27017에 연결됩니다. 시작 시 mongo host:port/database 형식으로 실행하면 원하는 서버에 바로 연결할 수 있으며, 셸 안에서 여러 서버나 데이터베이스에 동시에 연결하는 것도 가능합니다.

예를 들어, 한 애플리케이션이 딜러(dealer) 데이터베이스와 유통사(distributor) 데이터베이스를 모두 사용한다고 가정해 보겠습니다. MongoDB에서는 동일한 셸 안에서 두 데이터베이스 사이를 자유롭게 전환하며 작업할 수 있습니다.

팁 3: JavaScript 익히기

자체 셸을 갖춘 환경을 다룰 때는 JavaScript®에 익숙해지는 것이 좋습니다. MongoDB 사용자들 사이에서 JavaScript가 널리 쓰이는 이유는 정보에 가장 빠르고 효율적으로 접근할 수 있는 방법이기 때문입니다. JavaScript는 유연하고 강력한 언어로, 뛰어난 기능들을 통해 셸을 최대한 활용하는 데 큰 도움을 줍니다.

팁 4: 서버의 특정 시점 백업 생성하기

저널링(journaling)이 활성화된 데이터베이스를 백업하려면 파일 시스템 스냅샷을 찍거나, 일반적인 fsync+lock 방식으로 잠금 후 덤프를 수행하면 됩니다. 단, fsync와 잠금 없이 파일을 그대로 복사해서는 안 됩니다. 복사 작업은 순간적으로 완료되는 것이 아니기 때문입니다. 저널 파일의 복사본과 백업이 서로 다른 볼륨에 저장되면 나중에 백업이 무용지물이 될 수 있으니 주의해야 합니다.

팁 5: 단일 쿼리로 데이터 가져오기

애플리케이션 유닛(application unit)이라는 용어는 일부 애플리케이션 작업 유형을 지칭할 때 사용됩니다. 애플리케이션 유닛이란 애플리케이션이 수행하는 개별 작업 단위로, 데이터베이스 접근이 포함될 수 있습니다. MongoDB 스키마를 설계할 때는 애플리케이션 유닛당 하나의 쿼리만 수행하도록 구성하는 것이 좋습니다.

웹 또는 모바일 애플리케이션이라면 애플리케이션 유닛을 백엔드로 향하는 하나의 요청(request)으로 생각할 수 있습니다.

그 외의 예시는 다음과 같습니다:

  • 데스크톱 애플리케이션의 경우, 애플리케이션 유닛은 사용자와 클라이언트 간의 상호작용에 해당할 수 있습니다.
  • 분석 시스템의 경우, 애플리케이션 유닛은 대시보드 한 번 로드에 해당할 수 있습니다.

마무리

MongoDB는 빠르고 견고하며 높은 확장성을 자랑하는 데이터베이스입니다. 다양한 플랫폼에서 작동하며, 최적의 활용을 위한 다양한 언어 드라이버도 제공합니다.

MongoDB는 날로 인기가 높아지고 있습니다. MongoDB의 기본 개념과 올바른 활용법을 미리 익혀두는 것은 모든 개발자에게 큰 자산이 될 것입니다.

지금 MongoDB를 배우고 계신가요? 피드백 탭을 통해 여러분의 경험을 들려주세요.