왜 오라클을 사용했을까

허준현·2022년 9월 28일
0

Oracle

목록 보기
11/11
post-thumbnail

친구랑 이야기 하면서 각자 선호하는 DB에 이야기 한 적이 있었는데 각자 선호하는 DB가 달랐다. 누구는 Nosql인 mongoDB를 선호하는 반면에 오픈소스인 Mysql을 선호하는 것이다.

글쓴이도 학부생 시절에 처음 접한 것이 Mysql이며 프로젝트에 투입 되면서 Oracle을 사용하게 되었다.

왜 이 프로젝트에서는 Oracle을 사용했을까에 대한 궁금증으로 시작하여 Mysql, Oracle 그리고 PostgreSQL 의 차이점에 대해 이야기 해보고자 한다.

POSTGRESQL와 접하게 된 계기와 사전 지식

우선적으로 PostgreSql을 접한 것은 대용량 처리 프로세스 광고 안에 PostgreSql을 사용하는 모습을 보인것과 우형블로그 에서 처음 접하게 되었다.

Postgresql 에서는 ORDBMS 라는 기술을 사용한다. 기존의 RDBMS를 사용하는 것에 객체 관계형이 추가된 것이며 기존의 type외에 자유롭게 선언이 가능하며 부모 테이블의 레코드를 상속 받아 사용할 수 있다.
Transaction Isolation 은 Oracle과 동일한 READ COMMITTED를 사용하며 Parallel Select도 지원함과 동시에 다양한 Join 방식을 지원한다.
또한 Partial Index를 제공한다. 특정 범위에 대해서 인덱싱을 할 수 있기 때문에 관리하는 리소스도 줄일 수 있으며 업데이트 속도도 향상 시킬 수 있다.

PostgreSQL, Mysql 차이점과 공통점

Mysql멀티 쓰레드 기반인 반면에 PostgreSql멀티 프로세스를 사용한다.

또 한 PostgreSQL 에서도 MVCC 를 지원하는데 이는 Oracle, Mysql과는 다른 방식으로 적용되고 있다.
Undo Segment 를 사용하는 것이 아닌 MGA(Multi Generation Architecture) 방식을 사용하는데 이는 튜플을 Update 할 때 새로운 값으로 바꾸는 것이 아닌 새로운 튜플을 추가하여 이전 튜플은 마스킹을 하는 방식이다.
바뀐 값에 대해 인덱스가 적용되어 있다면 이에 대한 인덱스 정보도 업데이트가 필요하기 때문에 이 작업이 Mysql보다 떨어진다.

하지만 앞에서 우형 블로그를 본 것 처럼 다양한 조인 방식 지원과 select절에 parallel 지원으로 select면에서는 성능을 낼 수 있기 때문에 select, insert문을 주로 사용하는 정산 업무, 이력을 쌓는 부분에 사용하면 더 좋은 성능을 낼 것이다.

공통점으로는 둘 다 오픈소스 기반이기 때문에 참고자료나, 커뮤니티가 활성화가 되어있다는 점이다.

Oracle, Mysql 차이점과 공통점

Oracle은 DB서버가 통합된 하나의 스토리지를 공유하는 방식이면 mysql은 db서버마다 독립적인 스토리지를 할당하는 방식이다.

앞에서 언급한 것처럼 힌트절을 사용한 복잡한 조인 방식은 Oracle에서 지원하는 것이 더 많으며 Oracle은 PGA를 사용하여 멀티 프로세스를 구현하였지만 Mysql은 멀티 쓰레드 방식이다.
오라클에서는 기본적으로 오라클 모니터링 툴과 마이그레이션을 제공하며 가용성 아키텍쳐를 제공한다.

RAC은 하나의 DB에 2개의 멀티 노드로 구현 되어있는 것을 말하며
ASM은 스토리지를 이중화 구성 및 분산을 하여 분산처리 시스템에서 사용 할 수 있게 한다.
Flash Back은 테이블 및 데이터베이스 기준으로 과거 시점의 데이터를 활용할 수 있는 것이 특징이다.
ADG는 Redo Sync를 이용하여 다른 서버에 데이터를 복제할 수 있는 것을 말한다.

공통점으로는 둘다 RDMS로 관계지향형 데이터베이스라는 것이다.

오라클은 Global Partition index를 지원하지만 mysql은 Local Partition index만 지원한다.

단점으로는 오라클은 메모리 사용율이 커서 수백mb 메모리를 사용하는 것에 비해 mysql은 메모리 사용율이 낮아서 1mb 환경에서도 사용가능 하다는 점
그리고 가장 큰 단점은 오라클은 비용이 많이 든다는 점과 mysql은 오픈소스로 기업에서 사용할 때 소액의 금액만 사용하면 된다는 것이다.

문득 이렇게 보면 비용을 지불하고, 좋은 하드웨어를 사용한다면 Oracle을 사용하는 것이 좋아보이기도 한다. 그러면 모든 기업들이 Oracle을 사용할까? 물론 FaceBook, Google도 사용하지만 금융권 중에서 카카오뱅크가 mysql을 통해서 구현 한 바 있다.

오라클 db의 안정성과 성능은 검증된 바 있지만 Mysql을 채널계에 사용한 것이다.
비용적인 부분이 크겠지만 혁신적인 도전이다.
mysql에서는 RAC방식을 지원하지 않기 때문에 카카오뱅크는 로스리스 리플리케이션(Lossless Replication)이라는 기능과 MHA(Master High Availability)를 사용하여 데이터 무손실을 할 수 있었다.
로스리스 리플리케이션은 마스터에 변경이 생기면 릴레이 로그를 생성하여 마스터가 셧다운이 되더라도 슬레이브에 로그를 통해 마스터와 똑같은 데이터를 생성할 수 있고 MHA를 통해 재빠르게 복구한 다는 것이다.

Oracle, PostgreSql의 성능 비교

대규모 프로젝트에서는 이 두가지를 자주 사용하는 것처럼 보였다. 둘다 멀티프로세스 기반이면서

문든 어떤 것이 더 성능이 좋을까에서 찾아본 결과 stackOverFlow에서 찾을 수 있었다.

이곳 에서 더 자세한 결과가 있는데, 해당 실험은 2007년도에 이루어진 것이며 PostgreSql은 초당 778건의 작업을 Oracle은 874건의 작업을 완수했다는 것을 알 수 있다.

이 외에도 아래에는 Azure 에서 실시한 각 상활 별 db의 성능에 대해서 나타내고 있다.

버전업, 환경으로 인한 다른 정보도 있다.

위의 StackOverFlow의 댓글을 보면 PostgreSql8.2에 비해서 8.3에서 성능이 30~50% 향상되었다는 것과, 솔라리스 환경에서 실험해 보았다는 것으로 보아 매 시즌마다 각 db의 성능차이가 불변하지 않다는 것을 알 수 있다.
또 한 PostgreSqlOracle보다 성느이 10% 좋다고 하여도 해당 회사 개발자들이 익숙하지 않아 100퍼센트 효율을 내지 못하면 어떤 DB를 고르든 동일한 성능이 나오거나 더 떨어지는 성능을 낸다는 것이 내 개인적인 생각이다.

결국엔 정답은 없다.

항상 프레임워크를 공부하다 보면 어떤 것이 더 좋다, 나쁘다 라는 기준이 없는거 같다.
예를 들어 SpringNodejs 중 어떤 프레임워크가 더 좋냐와 같은 방식이다.
둘은 엄연히 내부에서 동작방식도 다른데 말이다.

개인적인 생각으로는 각 환경에서 더 좋은 성능을 내기 위해 노력한 다는 것과 다양하게 공부해 가면서 자신에게 맞는 DB를 찾고, 다른 사람이 보기에 해당 DB를 사용하는 것이 정답인 것처럼 보이도록 성장해나가는게 중요하다고 생각한다.

번외편) 요새 즐겨보는 Youtube 및 마무리


널널한개발자 라는 채널인데 네트워크를 이렇게 쉽게 설명이 가능한가 싶을정도로 설명을 잘하신다. 학부생 시절에 허브,모뎀,스위치, 라우터, 공유기 개념을 잘 이해하지 못하고 또 LAN, WAN은 로컬과 그냥 지역차이 아니야? 하는 정도로 이해하고 넘어갔었다. 네트워크를 자신이 처음 공부한다거나 까먹은 부분이 있다면 이분을 통해서 네트워크를 공부하는 것을 적극 추천한다.

앞으로는 오라클의 편을 마무리하고 현업에서 사용했던 mongodb, Mybatis와 Spring으로 넘어가 정리하며 학습하는 시간을 가지고자 한다.

사진 참고 : https://stricky.tistory.com/367

profile
best of best

0개의 댓글