2017년에 시작된 올리브영 온라인몰 서비스는 매년 급격한 성장세를 보이며 국내 H&B 시장에서 독주하고 있습니다.
이에 올리브영 온라인몰은 서비스품질을 높이기 위해, 기능 개선과 신규기술 도입에 박차를 가하고 있습니다.
이번 포스팅에서는 여러 신규기술 중, 전시영역 중 메인화면에 어떻게 MongoDB를 도입하려 하는지 소개하려 합니다.
레거시 전시영역 아키텍처
올리브영 홈 영역에는 배너, 추천상품, 브랜드 등의 다수의 코너가 있고, 이는 전시 관리자에 의해 제어됩니다.
전시관리자는 각각의 코너에 필요한 데이터를 입력하게 되는데, 코너의 형태가 다양하다 보니 데이터도 비규칙적인 형태로 구성됩니다.
레거시 시스템의 문제점
레거시 시스템에서는 위와 같은 관계형 데이터베이스에서 데이터를 관리 및 추출하고 있기 때문에,
필요한 데이터마다 테이블 혹은 컬럼을 만들어서 관리하거나, 공통 개념을 추출하여 데이터 타입으로 구분하여 관리해야 했습니다.
올리브영 레거시에서는 후자의 형태로 운영 중이었고, 이러한 구조 때문에 다음과 같은 문제를 겪었습니다.
- 공통 컬럼에 데이터를 보관해야 하여 컬럼을 명확한 목적으로 사용하지 못함 (문서 혹은 주석에 의존)
- 컨텐츠 구성 변경 시 많은 공수 및 확인 절차 필요
- json 데이터로 변환 시 다량의 가공작업 필요
MongoDB 도입
관계형 데이터베이스는 수많은 세월을 거쳐 최적화된 시스템이 되었고, 조금만 검색해도 수많은 자료가 나올 만큼 레퍼런스 또한 무궁무진합니다.
그럼에도 NoSQL 중 MongoDB를 사용하는 이유는 장점이 뚜렷하기 때문입니다.
MongoDB는 NoSQL의 한 종류인 문서지향 데이터베이스입니다.
MongoDB의 장점을 검색해보면 보통 다음과 같은 내용을 찾을 수 있습니다.
1) Schema-less 구조
전통적인 테이블-컬럼 구조가 아닌 컬렉션이라는 공간 안에 json 형태로 데이터를 보관합니다. Key-Value 형태로 데이터를 보관하기 때문에 유연한 구조변경을 가능하게 하였습니다.
물론 초창기에는 이러한 json형태가 오히려 단점이었습니다. json은 텍스트기반 분석이 매우 느리고 공간을 효율적으로 사용하는 구조가 아니었기 때문입니다.
이를 bson으로 바꾸며 구조의 장점은 살리면서 읽기 효율을 높이는 구조로 탈바꿈하였습니다.
각각의 item에 접근을 가능하게 하여 문서형 데이터베이스의 기조가 되었고, 현재 효율적인 Schema-less의 데이터관리를 가능하게 하였습니다.
2) Read/Write 성능이 뛰어남
MongoDB는 읽기와 쓰기 모두 뛰어난 성능을 가지고 있지만, 특히나 메모리맵을 활용하고 b-tree구조를 통한 탐색으로 아주 빠른 읽기를 가능하게 합니다.
3) 확장성과 신뢰성이 높음
MongoDB는 안정적인 Replica Set을 구성할 수 있어 가용성을 높일 수 있습니다.
Read/Write 성능이나 확장성/신뢰성은 사용하기에 따라 MongoDB에서 큰 효과를 얻을 수 있는 부분이지만,
사용 목적이나 전략에 따라 성능이 달라질 수 있고, 다른 데이터베이스에서도 잘만 사용한다면 충분히 얻을 수 있는 이점이기 때문에 MongoDB만의 특별한 장점은 아니었습니다.
저희가 가장 주목한 부분은 Schema-less 구조로 인한 유연성입니다.
MongoDB의 유연성
관계형 데이터베이스가 고정된 형태의 테이블과 컬럼에 데이터를 저장하는 데 비해, MongoDB는 Key-Value 구조로 더 유동적인 구조를 가능하게 합니다.
전시코너가 어떠한 형태를 가지게 되던 그 형태에 맞게 문서에 저장만 하면 되므로 더욱 효율적인 데이터 보관이 가능합니다.
기존 관계형 데이터베이스에서 공통 컬럼에 다양한 데이터를 관리했던 것에 비해,
MongoDB에서는 각각의 데이터를 객체 형태로 관리할 수 있기 때문에 해당 오브젝트별로 명확한 데이터관리가 가능하게 되었습니다.
이로써, 데이터 관리의 이점을 살리며 불필요한 가공과정까지 제거하며 효율을 극대화 하였습니다.
버저닝 전략
온라인몰 전시영역에서는 코너별로 데이터가 명확하고, 가능하면 다양한 컨텐츠 표기를 위해 별도의 참조나 포함구조가 필요 없었기에
데이터 모델링에 대한 고려는 크지 않았습니다.
다만 MongoDB의 장점인 유동적인 데이터관리를 더욱 극대화하기 위해, 데이터를 버전화하여 관리하기로 하였습니다.
올리브영에 전시되는 상품이나 컨텐츠는 시간에 따라 지속해서 변하기 때문에 매번 조건에 따른 컨텐츠를 불러와야 합니다.
이에 데이터를 버전화하여 현재 활성화된 데이터를 별도의 가공이나 복잡한 탐색 없이 확인하고,
변화될 데이터를 미리 준비하거나 필요 시 롤백하여 더욱 안정적인 데이터 관리를 가능하게 하였습니다.
위 그림에서는 데이터를 크게 두 영역으로 나누었습니다.
- 현재 서비스되고 있는 안정화된 데이터를 관리하는 영역
- 이전의 기록이나 추후 서비스될 데이터를 관리하는 영역
이에 데이터를 요청하는 쪽에서는 별도의 가공 없이, 현재 안정화된 저장소만 바라보고 조회만 하면 됩니다.
버저닝 데이터 구조
버저닝 데이터는 다음 표의 내용과 같이 구성됩니다. (그림6 참조)
버전화된 데이터는 아래와 같은 형태로 사용됩니다. (그림7 참조)
버저닝 데이터 생명주기
버전화된 데이터는 아래와 같은 생명주기를 가지게 됩니다.
이 데이터들은 내용은 변하지 않고, 상태만 바뀌며 위와 같은 주기를 거치게됩니다.
롤백 수행 시에는 만료된 데이터 중 롤백할 버전을 선택하여 안정화된 데이터 영역을 대체합니다.
이와 같은 버저닝 관리를 통해 데이터의 목적을 나누어 효율적인 관리를 가능하게 하였고,
데이터에 문제가 발생하면 빠르게 이전의 데이터로 교체가 가능하여 시스템의 안정성을 높일 수 있었습니다.
앞으로의 활용 및 개선 방향
현재 MongoDB 는 전시영역에 한하여 도입되어 있습니다. 전시영역은 상품의 다양한 정보를 보여주기 위해 참조가 빈번하여,
문서지향 데이터베이스를 활용한 효율적인 관리와 빠른 속도의 API 제공 등으로 다양한 이점을 가질 수 있었습니다.
앞으로 문서지향 데이터베이스의 장점을 적극적으로 활용하기 위하여, 전시영역 외에도 상품정보나 개인화 정보 등의 타 데이터에도 문서지향 데이터베이스를 적절하게 도입하는 것을 목표로 하고 있습니다.
더불어, 레거시 데이터 구조를 개선하는 데 있어 새로운 방안으로 검토하고 있습니다.
현재 온라인몰 데이터베이스는 전시된 데이터에 대한 히스토리 추적이 불가능하고,
다양한 이슈로 생성된 비효율적인 컬럼이 다수 존재하여 구조에 대한 많은 고민이 필요한 상황입니다.
이에 MongoDB 를 통해 데이터를 가공하고 각 메뉴에 적합하고 간결한 구조의 데이터를 제공한다면, 참조할 대상 데이터만 변경하며 서비스에서는 다소 적은 영향도로 최신 버전의 안전한 데이터를 일관되게 제공할 수 있습니다.
추가로 최근 제공된 전시 영역의 히스토리 파악까지 용이하기에,
이러한 장점을 최대로 활용하여 온라인몰에서 조금 더 좋은 API 를 제공할 기회를 만들어 나가려고 합니다.
마치며
이번 포스팅에서는 올리브영 전시영역의 효율적인 데이터관리에 대한 고민과 적용사례를 확인하였습니다.
올리브영 온라인몰은 고객에게 더욱 유익한 컨텐츠를 제공하기 위해 끊임없는 고민을 이어가고 있으니 많은 관심 부탁드립니다.
감사합니다.