1) 데이터베이스 기초 및 소개

Hyoin Jeong·2022년 7월 11일

1. 데이터베이스의 필요성

  • 모든 서비스는 데이터를 만들어내고 이는 기록되어야함(ex) 카카오톡 - 사용자 정보, 친구리스트, 채팅기록, 쿠팡 - 회원 정보, 구매정보, 추천을 위한 상품정보)
  • 어디에 저장? → 우리는 관계형 데이터베이스 사용
✅ 프로덕션 관계형 데이터베이스(RDBMS)
  • 정의 : 관계형 데이터베이스 중 웹 또는 앱 운영에 필요한 정보를 저장해주는 관계형 데이터베이스
  • 서비스 운영에 필요한 데이터를 저장하는 곳(MySQL, PostgreSQL,..)
  • 빠른 처리속도 중요(vs 데이터 웨어하우스 관계형 데이터베이스 - 처리속도 보다 얼마나 많은 양을 처리할 수 있는지가 중요)
  • 데이터를 구조화된 테이블들의 집합으로 구성하여 저장하고 관리

→ SQL : 관계형 데이터베이스의 프로그래밍 언어

✅ 데이터 웨어하우스 관계형 데이터베이스
  • 정의 : 사용자보다 회사 내 직원들을 위한 데이터베이스(BigQuery, Snowflake, …)
  • 처리속도 보다 얼마나 많은 양을 처리할 수 있는지가 중요
  • 데이터 엔지니어, 데이터 분석가, 데이터 과학자

데이터 순환 구조 : 프로덕션용 데이터베이스와 데이터 웨어하우스

  1. 웹 또는 앱에서 추출된 데이터(방문 트래픽, 외부 데이터)를 프로덕션 데이터베이스(MySQL)에 저장(데이터 엔지니어)
  2. MySQL에 저장된 데이터들을 추출하여 데이터 웨어하우스에 저장 후 지표를 설정 후 시각화(데이터 분석가)
  3. 데이터 웨어하우스의 데이터를 기반으로 사용자 기반 추천기능 등 제품 서비스 개선(데이터 과학자)

데이터베이스의 종류

  1. 관계형 데이터베이스 : 구조화된 데이터
    1. 프로덕션용 관계형 데이터베이스
    2. 데이터 웨어하우스용 관계형 데이터베이스
  2. 비관계형 데이터베이스 : 비구조화 데이터 + 구조화된 데이터
    1. NoSQL 데이터베이스
    2. 보통 프로덕션용 관계형 데이터베이스를 보완하기위한 용도
    3. 크게 4종류
      1. Key/Value Storage: Redis, Memcache, ...
      2. Document Store: MongoDB,
      3. Wide Column Storage: Cassandra, HBase, DynamoDB
      4. Search Engine: ElasticSearch

2. 백엔드 시스템 구성도 예제

직군

  1. 프론트엔드 : 사용자와 인터랙션을 하는 부분 → 웹 또는 모바일 사용자에게 노출되는 서비스
  2. 백엔드 : 실제 데이터를 저장/추가하고 사용자가 요구한 일을 수행하는 부분
  3. 풀스택 : 개발 속도를 내기 위해 프론트엔드&백엔드 모두 할 수 있는 개발자
  4. 데브옵스(DevOps) : 주로 백엔드에 집중해서 서비스의 운영을 책임지는 팀(모바일이나 웹을 모니터링해서 운영) → 회사가 작으면 보통 백엔드 담당
  5. 데이터 직군 : 데이터의 중요성이 증대되면서 등장(보통 코딩을 하지 않음)
    1. 데이터 엔지니어: 사실상 소프트웨어 개발자로 데이터 웨어하우스와 관련일을 담당
      ▪ MLOps라는 직군이 나타나기 시작
    2. 데이터 분석가: 데이터 웨어하우스를 기반으로 다양한 지표설정과 분석 수행
    3. 데이터 과학자: 수집된 과거 데이터를 기반으로 미래를 예측하는 모델링 혹은 개인화 작업으로 서비스의 만족도를 높이고 프로세스의 최적화를 수행

시스템 구성의 변화(3 tier를 자주 씀)

✅ 2 tier
  • 데스크탑 응용프로그램에서 사용되는 아키덱쳐
  • 클라이언트와 서버 2개의 티어로 구성
    - 클라이언트(client) : 사용자가 사용하는 UI가 됨 (front-end)
    ▪ 비지니스 로직은 보통 클라이언트에 위치
    - 서버(server) : 데이터베이스 (back-end)
✅ 3 tier
  • 웹 서비스에서 많이 사용되는 아키덱쳐
  • 프리젠테이션 티어 (Presentation Tier): 프런트엔드
  • 애플리케이션 티어 (Application Tier): 비즈니스 로직 - 백엔드
  • 데이터 티어 (Data Tier): 백엔드

시스템 구성 예(Spring Boot)

  • 기본적으로 3 tier구조
  • 백엔드 프레임워크 중 하나(파이썬 - Django/Flask, 자바스크립트 - Node.js)
  • 프론트엔드는 React
  • Data Tier : Database Layer와 Persistence Layer(관계형 데이터 읽고 쓰는 것)은 하나의 Layer
  • Application Tier : Business Layer
  • Presentation Tier : Presentation Layer

관계형 데이터베이스의 중요성

  • 데이터베이스는 꼭 필요함
    • 이 데이터베이스를 잘 다룬 것이 좋은 개발자가 되기 위해 필요
  • 기본은 SQL을 잘 아는 것
  • 백엔드 개발자로써 중요한 부분
    • 데이터 모델을 잘 만들고 그걸 프런트 개발자와 공유/협업
    • 속도 개선을 위한 쿼리 성능 모니터링 & 필요시 성능 개선 수행
      ▪ 어떤 경우에는 이를 전담하는 사람이 존재 (DBA - DataBase Administrator)

3. 관계형 데이터베이스

관계형 데이터베이스란?

  • 구조화된 데이터를 저장하고 질의할 수 있도록 해주는 스토리지
    • 엑셀 스프레드시트 형태의 테이블로 데이터를 정의하고 저장
      ▪ 테이블에는 컬럼(열)과 레코드(행)이 존재
  • 관계형 데이터베이스를 조작하는 프로그래밍 언어가 SQL
    • DDL (Data Definition Language) : 테이블 정의를 위한 언어
      ▪ 테이블의 포맷을 정의해주는 언어
    • DML (Data Manipulation Language) : 테이블 데이터 조작/질의를 위한 언어
      ▪ DDL로 정의된 테이블에 레코드를 추가, 수정, 삭제 혹은 읽어들이기 위해 사용하는
      언어

대표적 관계형 데이터베이스

  • 프로덕션 데이터베이스: MySQL, PostgreSQL, Oracle, …
    • OLTP (OnLine Transaction Processing)
    • 빠른 속도에 집중. 서비스에 필요한 정보 저장
    • 우리는 MySQL을 사용
  • 데이터 웨어하우스: Redshift, Snowflake, BigQuery, Hive, …
    • OLAP (OnLine Analytical Processing)
    • 처리 데이터 크기에 집중. 데이터 분석 혹은 모델 빌딩등을 위한 데이터 저장
      ▪ 보통 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장

관계형 데이터베이스의 구조(2단계로 구성)

  1. 데이터베이스(or 스키마) : 테이블들은 데이터베이스 밑으로 구성 - 폴더와 같은 역할(엑셀에서는
    파일)
  2. 테이블 : 가장 밑단에 존재 (엑셀의 시트에 해당)
  • 테이블의 구조 (테이블 스키마)
    • 테이블은 레코드들로 구성 (행)
    • 레코드는 하나 이상의 필드(컬럼)로 구성 (열)
    • 필드(컬럼)는 이름과 타입과 속성(primary key)으로 구성됨

4. SQL

SQL 소개

  • SQL: Structured Query Language
    • 관계형 데이터베이스에 있는 데이터(테이블)를 질의하거나 조작해주는 언어
  • SQL은 1970년대 초반에 IBM이 개발한 구조화된 데이터 질의 언어
  • 두 종류의 언어로 구성
    • DDL (Data Definition Language): 테이블의 구조를 정의하는 언어
    • DML (Data Manipulation Language)
      ▪ 테이블에서 원하는 레코드들을 읽어오는 질의 언어
      ▪ 테이블에 레코드를 추가/삭제/갱신해주는데 사용하는 언어

SQL의 장점

  • 구조화된 데이터를 다루는한 SQL은 데이터 규모와 상관없이 쓰임
  • 모든 대용량 데이터 웨어하우스는 SQL 기반(Redshift, Snowflake, BigQuery, Hive)
  • Spark이나 Hadoop도 예외는 아님
    • SparkSQL과 Hive라는 SQL 언어가 지원됨
  • 백엔드/프런트엔드/데이터 분야에서 반드시 필요한 기본 기술

SQL의 단점

  • 구조화된 데이터를 다루는데 최적화가 되어있음
    • 정규표현식을 통해 비구조화된 데이터를 어느 정도 다루는 것은 가능하나
      제약이 심함
    • 많은 관계형 데이터베이스들이 플랫한 구조만 지원함 (no nested like JSON)
      ▪ 구글 빅쿼리는 nested structure를 지원함
    • 비구조화된 데이터를 다루는데 Spark, Hadoop과 같은 분산 컴퓨팅 환경이
      필요해짐
  • 관계형 데이터베이스마다 SQL 문법이 조금씩 상이

SQL만으로는 비구조화 데이터를 처리하지 못함

데이터 모델의 구조 2가지

1. Star schema(프로덕션 DB에서 주로 사용)

  • Production DB용 관계형 데이터베이스에서는 보통 스타 스키마를 사용해 데이터를 저장
  • 데이터를 논리적 단위로 나눠 저장하고 필요시 조인
  • 장점 : 스토리지의 낭비가 덜하고 업데이트가 쉬움
  • 단점 : 조인할 때 속도 저하

2. Denormalized schema(NoSQL 또는 데이터 웨어하우스에서 사용)

  • NoSQL이나 데이터 웨어하우스에서 사용하는 방식
    • 단위 테이블로 나눠 저장하지 않음 → 별도의 조인이 필요 없는 형태
  • 장점 : 빠른 계산
  • 단점 : 스토리지를 더 사용하고 업데이트가 어려움, 다양한 정보에 접근하는 것이 제약

0개의 댓글