All ContentsCategoryAbout

Database TIL 02

22 December, 2020 - Database - 3 min read

데이터 모델링

서비스 전체 개발 과정에서 데이터베이스 관련 부분만 단계별로 나눈다면 다음과 같다.

  • 개념 설계
  • 논리 설계
  • 물리 설계
  • DBMS 구축

논리 모델링과 물리 모델링

논리 모델링

데이터베이스 종류와 무관하게 업무를 분석하고 그에 대한 데이터 집합과 그 집합 간의 관계를 중점적으로 표현하는 것이 논리 모델링

물리 모델링

논리 모델링의 산출물을 시스템으로 어떻게 표현할지를 고려하는 것이 물리 모델링

하지만, 대부분의 데이터 모델링 도구는 논리 모델과 물리 모델을 별개로 관리하지 않는다.

트랜잭션(Transaction)

데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위이다. 여기서 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다. 이론적으로 데이터베이스 시스템은 각각의 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 영구성(Durability)을 보장한다. 이 성질을 첫글자를 따 ACID 라 부른다. 그러나, 실제로는 성능향상을 위해 이런 특성들이 종종 완화되곤 한다. 어떤 시스템에서는 트랜잭션은 논리적 작업 단위(LUW, Logical Units of Work)로 불리기도 한다. - 참고: 데이터베이스 트랜잭션 - 위키백과, 우리 모두의 백과사전

예를 들어, A의 계좌에서 B의 계좌로 100원을 송금하는 기능을 만든다면,

  1. 업데이트: A계좌에서 -100원
  2. 업데이트: B계좌에서 +100원
  3. A계좌와 B계좌의 거래기록을 별도 테이블에 저장

위와 같은 절차가 필요하며, 이 모든 과정을 통틀어 하나의 트랜잭션으로 본다. 또한, 이 과정에서 만약 A계좌에서 -100원이 된 상태에서 서버가 다운될 경우 DB에는 -100원은 발생했지만 +100원은 어디에도 없는 상황이 된다. 이러한 사태를 방지하기 위해 트랜잭션에는 도중에 중단될 경우 모든 과정을 무효로 처리하는 기능이 필수적이다. 이와 유사한 사례로 하나의 테이블에 대해 두 명의 사용자가 동시에 업데이트를 진행할 경우에도 문제가 생길 수 있기 때문에 트랜잭션 락(Transaction Lock) 이라는 기능이 사용된다. - 참고: 동시성 제어 기법 — 잠금(Locking) 기법. 동시성 제어 기법으로는 대표적으로 잠금(Locking) 기법이 있다… | by 이예원 | POCS | Medium

엔터티(Entity)

물리모델에서는 테이블(Table)이라고 한다. 객체지향언어에서의 Class와 동급의 의미로 받아들여도 좋은데, 이로 말미암아 알 수 있는 것은 여러 구체적인 개념을 담을 수 있는 상위의 추상화 된 개념이 엔터티라는 것이다. 엔터티를 도출할 때 가장 중요한 것은 용어의 정의다. 변수명, 클래스명을 정할 때 보다 시멘틱하게 짓기 위해 고심해야 하는 것과 동일한 맥락이다. 해당 테이블에 포함될 데이터들을 충분히 설명할 수 있도록 포괄적이며 의미 전달이 가능한 이름이어야 한다. - 참고: 꿈꾸는 개발자, DBA 커뮤니티 구루비

그리고, 엔터티의 성격에 따라 세 종류로 구분된다.

  • 키 엔터티: 관리 대상 데이터 중 가장 최상위에 존재하는 엔터티로써 보통 메인 엔터티와 액션 엔터티를 만들어내는 부모 역할. 상품, 사원, 고객 등 현실에 존재하는 객체를 키 엔터티로 정의하는 경우가 많다.
  • 액션 엔터티: 키 엔터티에서 비롯된 엔터티로써 예를 들어 ‘회원’ 이라는 키 엔터티가 존재하고, 회원의 초대코드를 통해 가입한 ‘친구’ 라는 엔터티가 생겼을 때, ‘친구’는 ‘회원’의 액션을 통해 만들어진 엔터티이므로 액션 엔터티가 된다.
  • 메인 엔터티: 키 엔터티를 통해 발생한 액션 엔터티 중에서 유독 중요한 역할을 하는 액션 엔터티는 메인 엔터티로써 따로 분류하기도 한다.

속성(Attribute)

물리모델에서는 칼럼(Column)이라고 한다. 더는 분리될 수 없는 최소의 데이터 보관 단위 로써 하나의 엔터티는 여러 속성을 지니며, 각 속성은 다른 속성과 확연히 구분되는 독자적인 성질을 지녀야만 한다. 다시 한 번 속성이 지녀야 하는 필수적인 성질에 대해 정리하자면 다음과 같다.

  • 하나의 속성은 해당 업무 요건에 맞는 최소 단위의 값 하나만 갖는다.
  • 하나의 속성에 복수형으로 값을 저장해서는 안 된다.

정규화와 반정규화

중복된 데이터를 최소화하고 일반적으로 납득될 수 있는 모델로 만드는 과정을 정규화 라고 한다. 정규화를 하는 목적은 하나의 엔터티에 충분히 관련이 있는 속성들만 담고 이를 통해 데이터 저장 리소스를 최소화 하는 것이다. 반면에 반정규화 는 특정 엔터티와 연관성은 다소 떨어질지라도 별도의 엔터티로 두어 JOIN을 하는 것보다 하나의 엔터티의 속성으로 관리하는 편이 데이터를 불러오는 리소스가 적게 들어갈 때 주로 사용한다.

© 2023 intzzzero, Built with

Gatsby