Part 1. Postgresql, 내가 널 왜 써야 하니?

김상헌·2023년 2월 12일
0

데이터베이스

목록 보기
2/6
post-thumbnail

업무적으로 사용하는 Database 는 Postgresql 입니다. 입사 이후로 사용해와서, 왜 우리는 Postgresql 을 사용하나? 라는 고민을 던져본 적이 없었던 것 같네요. 그래서 오늘은 이 부분에 대한 고민을 해보려 합니다.

먼저 다양한 데이터베이스 타입 중 왜 RDB 인가, RDB 의 장점이 무엇인가에 대해 알아보겠습니다.

Relational DataBase

우선 Relational Database의 장점을 정리해보겠습니다.

Structured Data Storage

Table, Row, Column 을 사용한 구조화된 데이터 저장
이를 통한 체계적이고 효율적인 방식으로 데이터를 구성, 검색 및 조작이 가능

Scalability

필요에 따라 대용량 데이터를 효과적인 방법으로 Scale Up, Down 이 용이. 대부분의 Database 는 Scale up, down 이 어렵진 않음.

Data Integrity

Data Integrity, Accuracy 을 보장하기 위해 제약 조건과 규칙을 적용하는데, 이를 통해 Data 의 Inconsistency 와 error 을 방지

Queryability

SQL 을 통한 유연하고 효과적인 데이터 조작 및 검색

Data Normalization

Data Normalization 프로세스를 따름으로 Data Redundancy 을 줄이고, Data Consistency 을 개선

Mature Technology

수십년동안 신뢰성, 안정성이 개선되어 왔고, 많은 회사에서 사용하고 있음이 성숙한 기술임을 입증

Postgresql

왜 Postgresql 을 써야 하나? 어떤 이점이 개발자들이 Postgesql 을 선택하게 할까요?

  • 복잡한 쿼리에 탁월
  • 대용량 데이터 관리에 적합
  • Catalog 기반임으로 확장이 용이
  • Table, Column 에 단순히 데이터를 저장만 하지 않고, 데이터 형식, 인덱스 형식, 함수형 언어를 정
  • ORDMBS
  • MVCC
  • ACID 를 준수
  • 동시 연결성이 높음
  • NoSQL 및 다양한 데이터 형식 지원 (JSON, hstore, XML 포함해서 등등)
  • 커뮤니티 활성 Level 이 높음
  • 높은 안정성과 신뢰성을 제공

여기서 모르는 내용이 몇가지 있어 정리해보겠습니다.

1. 다른 Database 에 비교해서 왜 복잡한 쿼리에 탁월한가?

Postgresql 은 복잡한 쿼리를 어떻게 실행하기에 다른 DBMS 에 비해 탁월하다고 평가할까요?

  • Query Optimizer
  • Indexing
  • MVCC
  • Cost-Based Optimization
  • User-Defined Functions

Query Optimizer

PostgreSQL에는 쿼리를 분석하고 가장 효율적인 실행 계획을 결정할 수 있는 강력한 Query Optimizer Tool 이 있습니다. Optimizer Tool 은 테이블의 데이터 분포, 인덱스의 존재 및 여러 작업의 비용과 같은 다양한 요소를 고려하여 쿼리를 실행하는 가장 좋은 방법을 결정합니다.

Indexing

PostgreSQL은 B-tree, Hash, GiST, GIN, SP-GiST 를 포함한 광범위한 인덱스 유형을 지원하므로 효율적인 데이터 검색이 가능합니다. Query Optimizer Tool 는 이러한 인덱스를 사용하여 쿼리를 실행하는 데 필요한 데이터를 신속하게 찾을 수 있으므로 데이터 검색에 필요한 시간을 줄일 수 있습니다.

MVCC

PostgreSQL은 MVCC를 사용하여 데이터에 대한 동시 액세스를 관리하므로 여러 트랜잭션이 동일한 데이터에 동시에 액세스하고 수정할 수 있습니다. 그래서 다른 트랜잭션에 의해 차단되지 않고 여러 행과 테이블에 액세스해야 하는 복잡한 쿼리를 지원합니다.

Cost-Based Optimization

Postgresql 은 Cost-Based Optimization model 을 사용하는데, 이 model 은 서로 다른 작업을 실행하는 데 드는 비용을 추정하고 추정 비용이 가장 낮은 계획을 선택합니다. 따라서 데이터 크기, 인덱스 존재 및 테이블의 데이터 분포와 같은 요인을 고려하여 쿼리 실행 방법에 대한 정보에 입각한 결정을 내립니다.

User-Defined Functions

PostgreSQL은 User-Defined Functions 을 지원하며, User-Defined Functions 와 쿼리에서 사용할 수 있는 Function 를 만드는 데 사용할 수 있습니다. 이를 통해 사용자는 데이터베이스의 기능을 확장하고 특정 사용 사례에 최적화된 Custom Function 을 만들 수 있습니다.

2. Catalog 기반

Postgresql 의 Catalog 는 Database Object 를 정의하고 관리하는 필수적인 요소입니다. 개발자는 Catalog 를 통해서 custom data type, index type, custom function 등 다양한 customization 이 가능하고, 이는 postgresql 을 더 확장성 있게 사용할 수 있도록 합니다.

3. ORDBMS

데이터 모델링 유연성: ORDBMS는 배열, 집합, 객체와 같은 복잡한 데이터 유형을 사용할 수 있게 하여 데이터 모델링에 더 많은 유연성을 제공합니다.

상속: ORDBMS는 상속을 지원하여 개발자가 객체의 클래스와 하위 클래스를 정의할 수 있게 함으로써 데이터 구성을 개선하고 중복성을 줄일 수 있습니다.

성능 향상: ORDBMS는 특정 유형의 데이터에 대해 쿼리를 최적화하고 조인 및 기타 복잡한 작업의 필요성을 줄여 성능을 향상시킬 수 있습니다.

확장성: ORDBMS는 사용자 지정 데이터 유형, 기능 및 연산자를 정의하고 관리하기 위한 프레임워크를 제공하므로 데이터베이스의 기능을 쉽게 확장할 수 있습니다.

객체 지향 프로그래밍과의 통합: ORDBMS는 객체 지향 프로그래밍 언어와의 자연스러운 통합을 제공하여 개발자가 데이터베이스에서 직접 객체를 저장하고 검색할 수 있도록 합니다.

Conclusion

Postgresql 이 장점을 고려해보니, 내가 속해있는 조직이 Postgresql 을 사용하는 이유는 딱히 명확하지 않습니다. Postgresql 을 사용한다고 해서 큰 이점을 얻고 있다 라는 생각이 드는 부분이 없다고 판단이 들기 때문입니다.

복잡한 데이터 구조를 사용하나? 아니요
특정한 데이터 타입을 정의해서 사용해야 하나? 아니요
객체 지향적인 모델을 사용하여 데이터베이스와 통합하나? 아니요

하지만, Postgresql 의 라이센싱 비용이나, 높은 수준의 커뮤니티 활성화는 Postgresql 을 메인 DBMS 로 선택함에 있어 큰 요인으로 작용했을거라 생각한다.

References

profile
배움을 즐기는 개발자입니다.

0개의 댓글