데이터 모델링

Kangho LEE·2021년 4월 6일
0
post-custom-banner

데이터 베이스

데이터 모델링에 관한 이야기
데이터 모델링은 애플리케이션 제작시 성능에 큰 비중을 차지하고 있습니다. 실제로 어떤 데이터베이스 구조를 사용할 것인지가 어떻게 문제를 해결해야하는 지에 대한 중대한 영향을 미치기 때문입니다.

주요 데이터베이스 모델로는 관계형 데이터베이스, NoSql(not only sql)이 있습니다.
관계형 데이터베이슨 워낙 유명합니다. 현재 가장 많이 쓰이고 있는 데이터베이스 형식으로 많은 장점이 있습니다. 우선적으로 하나의 엔티티에 대한 트랜잭션(일관성 보장)과 일괄처리로 비지니스 로직을 쉽게 구현할 수 있다는 점입니다. 뿐만아니라 join을 통해 다양한 기능과 데이터 유연성을 제공합니다. 뿐만 아니라 빠른 색인으로 다양한 데이터를 쉽게 가공하고 저장하고 사용할 수 있습니다.
단점으로는 현재 대부분의 애플리케이션은 객체지향 언어를 통해 제작되는데 이 객체지향과 데이터베이스를 연결해주는 orm이 있긴 하지만 여전히 전환 계층에서 오는 오버헤드는 있긴합니다.

Nosql은 이런 관계형 데이터 베이스가 많이 쓰이고 있는 지금 관계형 데이터베이스를 제외한 문서형,그래프 모델, 객체형, key-value형 등을 말합니다. 오늘은 주로 NoSql에서 언급되는 문서형을 다루도록 하겠습니다.
가장 큰 장점은 갱신, 삽입, 조회 즉 테이블 변경이 많이 없는 작업에서는 객체형 언어와 거의 일치하는 장점이 있습니다. 그렇기 때문에 일대다 관계트리를 한번에 적재하거나, 상호 연결이 많이 없는 작업에서는 관계형 데이터베이스보다 좋은 성능을 자랑합니다. 또한 대부분 여러 대의 데이터베이스 서버를 묶어서(클러스터링) 하나의 데이터베이스를 구성 할 수 있기 때문에 대규모의 데이터를 빠르게 다루기에 좋습니다.
단점으로는 관계형 데이터베이스에서 가능했던 join과 복잡해 지는 데이터 응용이 많을 수록 관계형 데이터베이스보다 성능이 떨어진다는 단점이 있습니다. 그렇기에 통계 관련 데이터는 따로 관계형 데이터베이스를 통해 가공하는 것이 좋습니다.

추가적으로 NoSql은 스키마가 비교적 자유롭다고 할 수 있습니다. 임의의 키와 값을 읽고 쓸 때 추가할 수 있습니다. 관계형과 다르게 키의 존재여부를 보장해 주지 않기 때문입니다. 다른 장점으로는 위에서 말한 ORM(객체와 데이터베이스를 연결하는 친구)를 사용할 필요하 없다는 것이 있습니다.

또 적절한 저장소 지역성을 활용해 데이터베이스 효율을 늘릴 수 있습니다. 지역성이란 데이터 접근이 시간적 혹은 공간적으로 가깝게 일어나는 것을 의미합니다. 캐시와 비슷한 개념이라고 생각됩니다.
너무 큰 데이터 테이블을 계속적으로 부른 것 보다는 저장해 둔것을 이용하것이나, 큰 데이터 테이블에서 컬럼 하나의 정보만 필요한데 테이블 전체를 저장함으로 공간이 낭비 될 수 있기 때문에 주의 해야 합니다.

두 가지의 장점이 다르니 각각 필요한 경우에 따라 혼합해서 쓰는 것이 좋습니다.
데이터 일관성이 보장되어야 하고 여러번의 join이 필요하다. (ex)통계 데이터, 고객데이터) - RDBMS
많은 양의 데이터가 빠르게 생성되고, 생성되고 거의 수정될 일도 없다.(ex) 게임 로그) - NoSql

트랜잭션 - 데이터베이스의 상태를 변화 시키기 위해 수행하는 "작업의 단위"입니다. sql을 통해 데이터베이스를 접근하는 것을 주로 의미하지만 주의해야 할 점은 질의 하나가 작업의 단위는 아니라는 것입니다. 작업 단위는 사람이 정하는 기준에 따라 다르게 됩니다.

음식 리뷰 사이트에 리뷰를 남긴다는 것을 가정하겠습니다.
제가 리뷰를 쓰는 것은 INSERT 질의와 제가 쓴 리뷰와 다른 사람들의 리뷰를 함께 가져오는 SELECT 질의가 함께 포함되어 있습니다. 두개의 질의가 있지만 하나의 작업입니다.

트랜잭션의 특징으로 4가지가 있습니다. 원자성, 일관성, 독립성, 지속성이 있습니다.
저는 "원일지독하더라~"로 외웠습니다..ㅎㅎ 실제 원일씨는 한국 전통음악을 하시는 분이 계십니다. (ACID도 있습니다. Atomicity, Consistency, Isolation, Durability)
원자성 - 트랜잭션이 데이터 베이스에 모두 반영되거나 아니면 아예 반영되지 않아야 합니다.
일관성 - 트랜잭션의 작업 처리 결과가 항상 일관성 있어야 하는 것입니다.
독립성 - 어떤 하나의 트랜잭션도 다른 트랜잭션에 끼어들 수 없다는 것입니다.
지속성 - 트랜잭션이 성공적으로 완료가 되면 영구적으로 반영이 되야한다는 점입니다.

commit 과 rollback 연산
commit - 트랜잭션이 성공적으로 끝났고 데이터베이스가 일관적인 상태에 하나의 트랜잭션이 끝났다는 것을 알려주는 연산입니다. 이 후 트랜잭션은 로그에 저장됩니다.

rollback - 하나의 트랜잭션처리가 비정상적으로 종료되어 원자성이 깨진 경우 트랜잭션을 처음 부터 다시 시작하거나 부분적으로 연산된 결과를 취소 시키는 것입니다. commit된 로그를 통해 트랜잭션 단위로 다시 commit된 시점으로 돌아가는 것도 가능합니다.

일괄 처리 - batch processing입니다. 중간에 사용자 개입이 없이 전체 작업을 처리하는 방식입니다. 수 많은 데이터를 일괄적으로 동일한 연산을 적용하는 경우 이 용어를 사용합니다.

profile
우유와 누텔라
post-custom-banner

0개의 댓글