팀 수석님께서 데이터 모델링을 주제로 사내교육을 진행하셔서 참여할 수 있는 기회가 생겼다. 참여형 실습도 있고 완전 유익하고 재밌는 교육이라고 하셔서 기대를 잔뜩 하고 갔다.

학교에서 데이터베이스 설계 수업 때 배운 내용도 새록새록 생각이 나고 최근에 계속 모델링 작업을 하고 있어서 내용이 더 잘 들리기도 하고, 현업 포인트까지 알 수 있는 값진 시간이었다.

다른 부서분들을 만나는 자체도 재밌었는데 다들 잘 참여해주시고, 얘기도 잘 통해서 즐거운 시간이었다. 특히 실습에서 작은 모델들이 모여서 마지막에 하나의 모델로 탄생할 때 감동이었다..🥺 (수석님 존경합니다..)

 

데이터 표준화의 기본

데이터가 중요하다!

  • 비즈니스의 목적이 바뀌지 않는 한, 중요 데이터는 변하지 않는다.
  • 데이터 구조를 만드는게 개발의 도구일까?
  • 데이터가 목적일 수 있다. 비즈니스 데이터가 그만큼 중요하다.
  • 모델링을 할 때 어떤 점을 주안점으로 둘까?
    • 전략과 프로세스가 바뀌어도 데이터는 변하지 않는다
    • 데이터만 봐도 업무 규칙을 알 수 있게
      예) 고객 상품 주문 결제 계약 -> 프로세스나 툴이 바뀌어도 모델 구조가 바뀌지 않게 -> 독립적이고 안정적이게

 

데이터 모델링의 목적

  • 일관성, 무결성, 정확성이 보장된 신뢰할 수 있는 고품질 데이터
  • 가치 있는 정보, 최상의 성능
    • 데이터 규칙에 대한 명시적인 의사소통의 도구
      예) 만약 내 집을 짓는다면...? 정확한 제대로 된 설계 도면 인력 물량 공사진행 시공

 

데이터 모델링의 절차

개념

  • 논리 모델링(비즈니스 중심)
  • 물리 모델링(성능 중심) : DBMS 특성을 고려해서 성능, 주요 인덱스 및 파티션 설계
  • DB구축 : DDL 작성, 물리 DB 구축, 마이그레이션

데이터 표준 (용어, 도메인, 코드)

 

데이터운영팀에서 검수 중인 것

  • 논리와 물리 모델링의 결과에 표준화를 적용 -> DA (사람과 가깝고 좀 더 논리적인 부분)
  • 인덱스 설계, 파티션 설계 ~ DB 구축 -> DBA (DBMS와 가까운 사람들, 좀 더 물리적인 부분)

 

논리 모델링의 기본

검수 시 가장 말씀 드리는 3가지

  • 시간적으로 달라지는 절차적 사고보다는 집합적 사고
  • 중복과 불일치는 NO
  • 애매함 < 명확함

 

논리 모델의 구성 요소 - 1

  • 엔터티 : 업무가 다루는 어떤 것
  • 관계 : 업무가 다루는 것들 사이에 존재하는 연관
  • 속성 : 각 사물(엔터티)이 가지고 있는 상세한 특성

 

논리 모델의 구성 요소 - 2

  • 예) 은행
    • 엔터티 : 고객 계약 상품 직원
    • 관계 : 계약의 주체, 계약의 대상, 상품담당자, ...
    • 속성 : 세부 속성들이 필요하고

 

논리 모델의 구성 요소 - 3

  • ERD를 그린다면
    • 체크리스트를 확인해야 함
      예) 엔터티 : 서비스에서 관리할 필요가 있나? 관리하려는 데이터의 범위는 어디까지? 엔터티인지 속성인지 관계인지

 

논리 모델링의 기본

  • ERD 표기법
    • 사내에서 사용하는 툴 : PowerDesigner (IE법 사용, ER-Win도 있음)
    • Barker법 툴 : DA# (집합 개념을 조금 더 나타낸다는 점)

 

관계의 표현 - 1

  • 카디널리티(1:1, 1:다, ...), 식별성(식별자 상속, 일반속성 상속), 선택성(0개 nullable 설정)
  • 계층, 순환, BOM / Barker법 : 배타관계

 

관계의 표현 - 2

  • 부서와 사원 관계의 예시
    • 식별 상속 : 한 명의 사원은 여러 부서에 소속될 수 있음 (사원 엔터티의 도출 필요)
    • 비식별 상속 : 한 명의 사원은 하나의 부서에 소속될 수 있음

겸직 부서 - 사원소속부서 - 사원

 

관계의 표현 - 3

  • 직접 종속 관계 만을 표현, 간접 종속 관계는 표현하지 않음 (부모-자식 간만 표현하면 됨)
  • 두 엔터티 간에 둘 이상의 관계가 존재할 수 있음 -> 관계명 표현, 컬럼명 수식어(역할 명 role name) 사용
  • 가능한 모든 관계를 표현
  • 너무 많은 관계선은 피하기 위해 뺄 수도 있음 (공통코드 테이블 등)

데이터 표준화의 기본

  • 일관성 유지
  • 가독성 강화
  • 명확하고 신속한 의사소통, 원하는 시기에 정확한 정보 전달 (개발까지) // 데이터 활용도 증가 정제 비용 감소, 데이터 품질 향상
  • 표준화는 대형 시스템에서는 표준화 담당자가 따로 있을 정도로 어려운 부분

 

단어

표준 단어

  • DB 오브젝트의 이름 부여 시 사용하기 위한 원자 단위(최소 의미 단위)의 표현을 미리 정해 놓은 것
  • 우리 회사는 전사 표준이 따로 있지는 않음, 우리 회사의 경우 다양한 서비스가 있기 때문에 전사 표준 관리는 어려움, 우리 회사 특성상 서비스 별 표준, 조직별 표준이 있음
  • 표준 단어(영문, 한글)에는 띄어쓰기, /, _ 등 특수 문자 사용 금지
  • 영문 단어는 약어 혹은 full 단어로 정하여 사용
    • 오라클 쓸 때는 컬럼명 길이 제한이 있어서 약어를 많이 썼는데, 요즘엔 mysql 쓰니까 full 단어로 씀
  • 복합 단어는 두 개 이상의 단어를 결합하여 하나의 단어로 사용(blacklist, zipcode)

 

표준 용어

  • 표준 단어를 조합하여 엔터티명(테이블명)과 속성명(컬럼명)에 사용되는 용어를 구성함
  • 동일한 데이터 집합은 동일한 용어를 사용
  • 용어의 마지막에는 분류어에 속하는 단어를 사용 (수 count, 일자 date ymd, datetime ymdt 등)

 

도메인

  • 속성에 대한 성질을 그룹핑한 개념
  • 동일 성질을 가진 컬럼의 데이터 타입 및 데이터 길이를 일관되게 관리함
  • 여러 시스템에서 사용되면 공통 도메인을 선정해서 쓰기도 함
  • 텍스트, 숫자 도메인은 최대한 통합

분류어 -> 도메인 -> 데이터 타입(길이)

 

코드

  • 특수도메인
  • 특정 도메인 값(코드 값)이 미리 정의되어 있는 도메인
  • 공통코드와 목록성코드(조직코드,...)
    • 3개 이상의 구분 값을 사용하는 경우 '코드' 도메인 사용
    • Yes/No 혹은 True/False의 2가지 값 만을 사용하는 경우 '여부' 도메인 사용
    • 기본 : Not Null, default 값 정의를 권장함

 

명명 규칙

  • 엔터티 명명
    • 단수형
    • 부모 엔터티와 강하게 엮인 자식 엔터티는 가급적 부모 엔터티의 이름을 상속받음 (게시물첨부파일, 게시물스크랩)
    • 관계 엔터티의 경우, 두 엔터티의 이름을 상속받아 명명(주문 상품 -> 주문상품)
    • 통계성 테이블의 경우, 통계 주기와 기준이 나타나도록 명명
    • 엔터티 명 마지막 단어에서 엔터티의 유형을 나타내도록 정함
    • 바람직하지 않은 예 : 회원리스트, 주문처리, 급여관리, 쿠폰목록 -> 데이터 관점에서 생각하고, 기능이나 화면의 이름은 필요없음
  • 속성 명명
    • 단어의 뒤를 먼저 보면 되도록 명명
  • 표준 용어 사전
    • 각 서비스에 해당하는 단어, 도메인, 코드 표준이 정의되면 이를 바탕으로 표준 용어를 구성 함
    • 업무적으로나 DBMS 적용 상 무리가 없는지 검토
    • 누락된 단어 및 도메인, 코드 등이 없는지 확인하고 추가 보완 작업을 수행 함

 

물리 모델링을 하다가 마주치는 고민들

정규화 vs. 반정규화

  • 정규화 : 중복을 안 만들고자 하는 구조
  • 반정규화
    • 물리모델링 시 정규화된 논리모델을 조정하여 반정규화를 하는 경우가 있음
    • 조상테이블 속성을 자식테이블에 갖다놓는..
    • 테이블의 통합/분리, 속성의 추가, 관계의 중복 등이 포함
    • 데이터의 정합성과 무결성의 유지를 위한 방안과 노력이 반드시 필요함
    • 조회의 성능과 개발의 편의를 위해 반정규화를 한 경우, 그에 따라 변경 작업시의 성능이 저하되는 경우가 많으므로 트레이드-오프를 따져서 적용해야 함

방법

테이블 반정규화

  1. 테이블 통합
  2. 1:1, 1:N, 수퍼타입/서브타입
  3. 테이블 분할
    수직, 수평
  4. 테이블 추가
    통계, 이력, 부분-업데이트가 자주 발생하면 따로 떼어내기, 복제-저장소가 다른 경우 원격지에 있는걸 가져다 놓기

컬럼 반정규화

  1. 중복컬럼 추가
    테이블 간의 조인을 감소시키기 위해서, 그 컬럼이 잘 바뀌지 않는다는 가정 하에
  2. 추출(derived)컬럼 추가
    매번 계산되지 않도록 미리 계산해서 갖다놓기(주문총금액)
  3. 이력테이블 컬럼 추가
    최근 값에 대한 컬럼을 미리 추가해놓기

관계 반정규화

  • 관계의 중복
  • 하기 전에
    • 다른 방법이 있는지 고려해보고 도저히 안 되면 반정규화하기
  • 하고 나서
    • ERD 등에 해당 내용을 공유하기

통합 vs. 분리

논리모델에서 설계한 수퍼타입과 서브타입을 물리모델로 전환할 경우 트랜잭션 패턴 및 생성되는 데이터 건수 등에 따라 테이블의 통합 혹은 분리를 검토하여 결정

 

트랜잭션 유형에 의한 결정

  1. 개별 트랜잭션 발생 유형
    공용 컬럼을 최대한 도출해서 수직분할 (결제수단코드- ...) or 통합 (모든 값을 한 테이블에, join이나 union all이 너무 많이 발생할 것 같을 때)
  2. 수퍼타입+서브타입 트랜잭션 발생 유형
    수평분할 (주문번호 - 카드결제내역 / 휴대폰결제내역 / 계좌이체결제내역) 결제번호가 겹치는 문제가 있을 수 있음

통합을 고려해 보게 되는 경우

  1. 식별자가 동일 할 때
  2. 관리하는 정보가 유사할 때
  3. 자주 join 되거나 union all 되는 경우
  4. ARC 관계로 정의되는 경우, 상속이 계속 된다면 부모 테이블의 통합이 가능한지 검토

 

인조 키 vs. 본질 키

인조 키 vs. 본질 키 - 1

PK 선정

  • 그 중 식별자 정의, 생성 주체의 단위를 정하는 것
  • 본질식별자 혹은 인조식별자 사용 여부도 논리 모델링 단계에서 결정하는 것이 바람직함
  • 특징
    • 유일성
    • 안정성 : 절대 변경되지 않아야 함(~명 등 텍스트 성 정보는 하지 않기)
    • 최소성 : 복합 식별자로 구성된 경우 유일성에 기여하지 않는 속성은 제외하고 최소의 조합으로 함
    • 활용성 : 업무에서 가장 많이 사용되는 속성 선택, PK는 자식 테이블에 상속이 됨
    • 보안성 : 주민등록번호, 여권번호 등

 

인조 키 vs. 본질 키 - 2

본질식별자

  • 해당 엔터티의 의미상의 주어, 인스턴스를 유일하게 식별하는 최소한의 속성 조합
  • 집합의 인스턴스가 생성되는 단위

인조식별자

  • 쿼리 복잡도 감소
  • 검색에 활용 불가 -> 반정규화의 원인이 되는 경우가 있음
  • 중요 데이터의 중복 가능성


인조 키 vs. 본질 키 - 3

  • 본질식별자 사용을 먼저 고려
  • 인조식별자를 사용한다면, 하위 엔터티에서 다수의 조인이 발생하거나, 반정규화의 원인이 되기도 함
  • 인조식별자를 선택하는 경우
    • 본질식별자가 식별자의 조건에 부합하지 않는 경우(로그 성격의 데이터를 보관하는 테이블, 본질식별자를 종종 수정해야 하는 경우)
    • 상속 시 식별자의 증가로 복잡도가 지나치게 증가하는 경우(mysql의 경우는 PK의 개수가 성능에 영향을 미침)
    • 타 영역에서 자주 참조하는 주요 엔터티의 식별자인 경우 인조 식별자의 사용을 검토해야 함
  • ~번호, ~일련번호, ~ID를 구분해서 쓰기도 함

 

시스템 속성의 관리

  • 모든 테이블에 공통으로 추가하여 관리할 필수 속성을 정의하는 것
  • 데이터 추적 관리 용도, 마이그레이션 작업 시, 데이터 분리 보관 작업 시 등 중요한 기준 정보로 활용됨
  • 주의 사항
    • 업무 용도로 사용하지 않는 것을 권장함(등록일시:데이터의 실제 Insert 일시와 가입일시는 구분해서 쓰기..)

 

이력의 관리의 형태

이력 관리의 형태 - 1

  • 이력 관리 모델
    데이터 복구나 추적이나 고객 응대를 위해서
  • 형태
    • 시점이력(변경된 시점에 대한..) 선분이력(유효시작일자, 이런 식으로 구간 관리)
    • 분리형 통합형
    • row column subject

 

데이터 모델 검수

앞을 내다보고, 나중에 관리 측면까지 고려함

6장. 구매 및 상담

24 구매 및 상담

구매처 선정

방문 목적

업체 선정

비교 견적

도입 테스트

해외 구매

 

25 자산 관리

자산 관리 대상

자산 관리 방법

재고

감가상각

재고 조사

폐기 처리

5장. 스토리지

 

21 스토리지

  • 스토리지 : 데이터를 저장하는 장치
    • 로컬 스토리지 : 서버 내부의 저장 영역
    • 외부 스토리지 : 서버 외부의 저장 영역
      • DAS : 서버에 직접 연결하는 것
      • NAS : 네트워크를 통해 연결하는 것

 

로컬 스토리지

서버 내부에 디스크를 설치해서 이용하는 저장 영역

외부 스토리지를 사용하지 않으므로 설치 공간을 절약할 수 있음

대신, 설치할 수 있는 디스크 개수와 확장성이 줄어듦

 

외부 스토리지

서버 외부에 준비한 스토리지 장치, 영역

 

1. DAS

  • Direct Attached Storage, 서버에 직접 연결하는 스토리지
  • 로컬 스토리지만으로 용량이 부족할 때 사용
  • DAS에는 많은 디스크를 설치할 수 있으므로 스트라이핑 수가 많은 RAID로 구성하여 디스크 I/O 성능을 높임
  • OS는 DAS와 내장 디스크를 구분하지 않고 다룸
  • DAS 선택시 고려 항목 : 필요한 실제 용량, 성능, 내장애성 및 확장성
  • 형태
    • 서버에 RAID 컨트롤러 보드를 꽂아 연결하는 형태 : RAID 컨트롤러 보드가 RAID 구성을 관리
    • HBA(Host Bust Adaptor)보드를 꽂아 연결하는 형태 : 스토리지에 내장된 RAID 컨트롤러가 RAID 구성을 관리
  • 트렌드
    • 매년 하드디스크가 대용량화 되면서 랙 마운트 형 서버에서도 탑재할 수 있는 디스크 개수가 증가함
    • 굳이 DAS를 사용하지 않고 로컬 스트로지를 선택하는 사례도 늘고 있음
    • DAS를 사용하지 않으면 장비 구매 비용과 데이터 센터의 랙을 절약할 수 있음

 

2. NAS

  • Network Attached Storage, 네트워크를 통해 여러 대의 서버가 액세스할 수 있는 스토리지
  • 여러 대의 서버에서 데이터를 공유할 때나 발생하는 백업 및 로그 파일을 한 군데에 모으는 용도로 사용됨
  • 서버와 NAS 간에는 NFS, SMB/CIFS, AFP와 같은 프로토콜을 이용해서 통신함

 

3. SAN

  • Storage Area Network, 블록 단위의 데이터 스토리지 전용 네트워크
  • 고속 고품질 환경을 요구하는 환경에서 이용됨
  • FC-SAN
    • Fibre Channel SAN, 파이버 채널 기반으로 구축된 고속 고품질 스토리지 전용 네트워크
    • 중요한 데이터를 다루는 환경에서 이용됨
    • HBA 보드를 설치하여 SAN 스위치를 통하거나 SAN 스토리지를 직접 연결함
  • IP-SAN
    •  Internet Protocol SAN, 통신 부분에 이더넷을 이용해서 SAN보다 저렴하게 구축함
    • iSCSI(서버와 스토리지 통신에 사용하는 SCSI 커맨드를 IP 네트워크를 통해 송수신하는 프로토콜) 스토리지가 주로 이용됨
    • 서버와 iSCSI는 모두 L2/L3 스위치 등을 통해 연결함

 

RAID와 핫스페어

  • 볼륨 : 인클로저 안에 탑재된 여러 개의 디스크로 RAID를 구성해 사용하는 큰 스토리지 영역
  • 핫스페어 : 다른 디스크가 망가졌을 때를 위해 대기하는 스탠바이 디스크
    • 자동 활성화 : 스토리지 인클로저가 디스크 고장을 감지
    • 고장난 디스크 대신 RAID 그룹에 들어감
    • 망가진 디스크는 고장 상태로 처리되어 시스템에서 분리되고 새 디스크가 핫스페어로 대기
    • 몇 개든 할당할 수 있으므로 넉넉하게 할당

 

22 외부 스토리지 이용

  • 저장 영역 확보
  • 디스크 I/O 성능 향상
  • 스토리지 통합 집중 관리
    • 복수의 스토리지를 통합 스토리지로 집약하면, 저장 영역을 낭비하지 않고 유용하게 활용 가능
  • 복수의 서버에서 데이터 공유
    • NAS 이용시 데이터베이스 클러스터링 환경에서 어느 서버든지 같은 데이터에 쉽게 액세스 가능

 

23 | 스토리지의 고급 기능

씬 프로비저닝

  • Thin Provisioning, 물리 스토리지 용량보다 많은 논리 볼륨을 할당할 수 있는 기능
  • 실제로 필요한 물리 스토리지만 준비할 수 있어 투자 비용 억제 가능
  • 가상 서버 환경처럼 게스트 운영체제마다 논리 볼륨을 만드는 환경에서 특히 효과적

 

자동 계층화

  • 서로 다른 디스크를 조합해서 데이터 이용 빈도에 따라 장비를 할당하는 기능
  • 구현 방식
    • 미리 특정한 규칙을 설정해두는 방법
    • 각 파일의 이용 상황을 스토리지가 스스로 판단해서 자동으로 적절한 계층으로 이동시키는 방법

 

디둡

  • De-duplication, 스토리지 백업 시 먼저 저장된 데이터는 복사하지 않는 기능, 중복 제거 기능
  • 디둡을 구현한 제품 대부분이 데이터 압축 기능도 탑재되어 있음

 

스냅샷

  • 어떤 순간의 파일 시스템의 정지점을 순간적으로 보존해 두는 기능
  • 파일이 갱신될 때마다 갱신 이력 + 갱신 전의 파일 -> 스냅샷용 스토리지 공간에 기록
  • 그 시점의 모든 파일을 복사하는 것이 아니라, 갱신 이력 정보를 함께 관리함

7장 데이터 센터

26 데이터 센터를 사용한다

데이터 센터 냉각 시스템

1. 이중 마루 냉각 방식

2. 열 복도/냉 복도 냉각 방식(배열 흡인 방식)

3. 외기 냉각 방식

 

데이터 센터 선정 포인트

  1. 입지
  2. 서버 설치 대수
  3. 랙 반입 or 대여
  4. 이용 가능한 전원
  5. 무거운 하중에 대한 대응
  6. 방재 수준
  7. UPS(무정전 장치)와 발전기 성능
  8. 폐기물 처리
  9. 반입 공간과 주차장 유무
  10. 리모트 핸드 서비스 유무
  11. 사용자 룸 유무
  12. 케이지 유무
  13. 네트워크 회선의 커넥티비티
  14. 비정기적 요구
  15. 물품 대여의 유연성
  16. 매점과 숙박 시설 유무
  17. 비용

 

27 랙에 장비를 설치한다

  • 네트워크 장비 설치
    • 랙의 맨 위나 중간에 설치
  • 공기 흐름
  • 전력 용량 문제

 

28 자체 서버 룸을 사용한다

자사 서버 룸 설치 포인트

  1. 면적
  2. 전력 용량
  3. 냉각
  4. 내하중
  5. 지진 대책
  6. 먼지 대책
  7. 법정 점검 대책
  8. 보안
  9. 비품 보관장소

 

CentOS 7.9 환경에 PostgreSQL 8.4.0 버전을 설치하는 중 ./configure를 실행하니 다음과 같은 에러가 발생했다.

checking for gcc... no
checking for cc... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.

 

gcc나 cc가 없어서 나는 에러인 것 같다.

 

아래 코드를 실행해 필요한 컴파일러를 설치해준다.

sudo yum install gcc glibc glibc-common gd gd-devel

 

설치 후 다시 configure를 해보면 잘 실행된다!

 

 

참고링크

https://sojinhwan0207.tistory.com/90

+ Recent posts