MLOps 종류의 하나로 개발을 진행하는 AiDAOps에도 DB(Database)가 사용됩니다.
당연히 시스템을 위한 다양한 정보가 사용되니까 DB가 있어야겠죠.
일반적으로는 MySQL을 많이 사용하게 됩니다.
그러나 MySQL의 경우 오픈소스라고는 하지만 기본적으로 GPL (General Public License) 2.0을 따르고 있습니다.
GPL 2.0의 경우에는 개인적으로 그냥 사용하는 경우에는 무료이지만 상용이나 영리 목적으로 사용하는 경우에는 구매를 해야하며 또 뭔가 수정을 가하는 경우에는 소스코드를 모두 공개해야 하는 등의 다양한 제약이 따르죠.
Oracle의 MySQL 정책에 반발하여 개발된 MariaDB도 마찬가지로 GPL 2.0을 따르고 있습니다.
사실 개인적으로 사용하기 위한, 또는 개인적으로 사용할 수 있는 도구를 만들거라고는 하지만 언제 어디에서 라이센스에 발목이 잡힐지 알 수 없는 일이라서 왠만하면 MIT 라이센스나 Apache 라이센스, 또는 요즘은 잘 안보이긴 하지만 BSD 라이센스 종류를 선택하려고 합니다.
그러다보니 어떤 DB를 선택해야 할까.. 라는 고민이 생기게 되네요.
그래서 파이썬 환경에서는 어떤 DB가 많이 사용될까.. 라는 생각으로 이것저것 조사하다보니 파이썬 환경에서 많이 사용된다는 SQLAlchemy라는 것이 검색되었고 이 SQLAlchemy에서 ORM(Object-Relation Mapping)이라는 개념을 만나게 되었습니다.
이 ORM이라는 개념을 조사하면서 DB 선택을 위해 이것저것 확장해 나가면서 찾아본 내용을 살펴보겠습니다.
위의 설명에서는 조금 애매하게 나오고 있지만 ORM이라는 것은 쉽게말해서 RDB(Relational DataBase)를 객체(Object)처럼 사용할 수 있도록 객체를 구현한 클래스와 RDB의 테이블을 자동으로 매핑하도록 지원하는 방법을 말합니다.
그리고 SQLAlchemy는 바로 파이썬에서 사용하는 ORM 라이브러리인 것입니다.
그럼 SQLAlchemy는 어떤 특징을 가지는지 확인해 보겠습니다.
여러 가지 특징이 보이지만 중요한 것은 다양한 DB를 지원하며 SQL문을 작성하지 않고 DB를 이용할 수 있다는 점이군요.
그리고 여기에서 보이는 DB의 종류 중에서 제 시스템, 즉 로컬 시스템에서 사용할 수 있는 RDBMS를 살펴보면 MySQL, PostgreSQL, SQLite, Oracle, Microsoft SQL Server 등을 볼 수 있습니다.
저는 회사에 다닐때 주로 Oracle을 사용했고 프로젝트에 따라서 가끔씩 Microsoft SQL Server와 MySQL을 사용했기 때문에 해당 RDBMS가 얼마나 많은 비용이 요구되는지 알고 있습니다.
MySQL은 오픈소스이긴 하지만 상용으로 사용할때에는 역시 많은 비용이 들게 됩니다.
그래서 AiDAOps 개발과 관련해서 제가 관심을 줄 수 있는 DB로는 PostgreSQL과 SQLite를 들 수 있겠네요.
일단 PostgreSQL을 기준으로 비교를 시작해 보겠습니다.
먼저 흔히 사용되는 MySQL과 PostgreSQL을 비교해보면 어떤 결과가 나올까요?
기본적인 PostgreSQL과 MySQL의 특징 및 장단점을 잘 정리해주었습니다.
PostgreSQL이 오라클 사용자에게 친숙한 환경을 제공한다는 점은 제 입장에서는 반갑네요.
확장성이 MySQL보다 뛰어나다는 것도 환영할만한 특징입니다.
그러나 설치, 구성이 복잡하고 운영이 어려울 수 있다는 점은 큰 단점이라고 볼 수 있겠네요.
목표로 하는 시스템은 전문적인 운영담당자를 배치해서 사용할 시스템이 아니다보니 왠만하면 운영 및 관리가 쉬운 RDBMS가 좋을 것 같습니다.
이렇게 따져보니 RDBMS가 아니라 간단한 NoSQL 계열의 DB를 사용하는 것이 더 낫지 않나.. 하는 생각이 드네요.
이것도 한 번 따져보겠습니다.
상황에 따라 다를 수 있다는 아주 표준적인 모범 답안이 나왔습니다.
AiDAOps의 시스템 구성과 관리를 위한 DB로서 NoSQL을 사용할 필요는 없겠네요.
오히려 관리를 위한 DB라면 그냥 RDBMS가 더 나을 것 같습니다.
그럼 여기서 제일 처음의 주제를 다시 한 번 떠올려 보겠습니다.
처음 조사를 시작한 것은 ORM이었죠.
그럼 ORM을 적용하기 위한 내용을 한 번 살펴보겠습니다.
MySQL과 PostgreSQL 중에서 어떤 RDBMS가 ORM을 적용하기에 더 적합한가..를 따져보죠.
아마도 ORM이 객체를 이용하는 거니까 객체형 RDBMS, 즉 ORDBMS(Object-Relational DataBase Management System)으로 분류되는 PostgreSQL이 더 적합하겠죠.
의외로 크게 차이는 없나봅니다.
DB의 사용목적에 따라서 특징이 달라지기는 하지만 RDBMS냐 ORDBMS냐.. 라는 것은 크게 신경쓰지 않아도 될 것 같습니다.
그럼 이번에는 처음에 PostgreSQL과 함께 물망에 떠올랐던 SQLite에 대하여 살펴보도록 하겠습니다.
사실 단순하게 생각한다면 AiDAOps는 MLOps이니까 RDBMS에서 처리할 내용은 그리 많지 않을 것으로 보입니다.
시스템에서 사용하기 위한 기본적인 데이터들만 관리하고 ML에서 사용되는 데이터들은 DB에 넣는 것이 아니라 별도로 사용할 것이기 때문에 운영이 어렵고 복잡할 수 있는 PostgreSQL보다는 가벼운 SQLite가 적합할 것으로 보입니다.
그럼 이번에는 MySQL과 SQLite를 비교해 보도록 하겠습니다.
제가 AiDAOps에서 RDBMS를 사용하는 이유는 시스템의 관리를 위한 기능이 목적의 대부분이므로 병렬처리, 높은 트래픽 등과는 그다지 관계가 없기때문에 사실상 SQLite가 가장 적합해 보입니다.
그런데 오픈소스 소프트웨어를 사용할 때 가장 주의해야 할 것은 라이센스입니다.
이전 글에서도 몇 번 언급이 되었지만 오픈소스라고 함부로 사용했다가는 큰 일을 겪을 수 있기 때문에 언제나 신경쓰이는 부분입니다.
그럼... 어디 한 번... 무료 라이센스에 대해서도 알아볼까요?
일단 PostgreSQL는 BSD나 MIT 라이센스와 유사한 PostgreSQL 자체의 라이센스를 사용하기 때문에 소스코드의 공개도 필요없고 상용으로 사용해도 문제가 없는... 거의 아무런 제약이 없다고 볼 수 있겠네요.
특히 SQLite는 Public Domain 라이센스, 즉 공공재로 취급되는 라이센스이기 때문에 사용에 아무런 제약아 없다는 점이 가장 큰 장점으로 보입니다.
PostgreSQL과 SQLite는 안심하고 사용해도 될 것 같습니다.
그럼 이번에는 PostgreSQL과 SQLite를 비교해 보겠습니다.
지금까지 살펴보고 판단한 내용과 대체로 맞아떨어지는 비교결과네요.
어느정도 튼튼하고 확장성이 있는 구조를 가진 RDBMS를 선택하려면 PostgreSQL을 선택하고, 가벼우면서 쉽게 사용할 수 있는 RDBMS를 선택하려면 SQLite를 사용하면 될 것 같습니다.
이렇게... 시스템을 개발하기 위해 어떤 DB를 선택할 것인가.. 라는 기준으로 조사를 해 보았습니다.
대체로 알고 있는 내용들이었지만 확실히 조사를 해 보니 어느정도 명확하게 방향이 보이는 것 같습니다.
AiDAOps의 설계와 개발에 좋은 지침이 되길 바라며.... 이번 글은 여기서 맺도록 하겠습니다.
'AiDAOps개발 > 사전조사(by LLM)' 카테고리의 다른 글
LLM 모델들을 학습하기 위한 시스템 사양은 어떻게 될까? (0) | 2024.01.24 |
---|---|
작업 계획을 위한 관련 정보의 사전조사를 LLM으로 하면 편하겠다 (2) | 2024.01.24 |