데이터베이스(DataBase)

Jaeuk Oh·2021년 8월 9일

DataBase

목록 보기
1/4
post-thumbnail
  1. 데이터베이스?
  • 데이터베이스는 개인이나 조직이 조작이 가능한 저장된 데이터의 모임 또는 집합을 의미한다

  • 일반적으로 영구적인 데이터의 모임을 말한다




  1. 데이터베이스가 왜 필요한가
  • 모든 IT 서비스는 데이터를 만들어내고, 이를 저장하는 시스템이 필요하다

    • 예를 들어, 로그인 경우에 데이터의 저장, 조회 등의 기능이 없다면 IT 서비스를 구현할 수 없다


  • 어디에 저장할 것인가

    • 프로덕션 관계형 데이터베이스(RDBMS, OLTP, OnLine Transaction Processing)

      • IT 서비스의 운영에 필요한 데이터를 저장하는 곳

      • 빠른 처리속도가 중요하다

      • 데이터를 구조화된 테이블의 집합으로 구성하여 저장하고 관리하는 시스템이다

      • 백엔드/프론트 개발자 모두 잘 알아야하는 기본기다

        • 관계형 데이터베이스의 프로그래밍 언어 SQL이라고 한다

    • 데이터 웨어하우스 관계형 데이터베이스(OLAP, OnLine Analytical Processing)

      • 주로 회사 관련 데이터를 저장하고 분석함으로써 의사결정과 서비스 최적화에 사용한다

        • BigQuery, Sparks ....
      • 처리속도보다 구조화된 큰 데이터를 처리할 수 있는가

        • Scalability에 초점을 맞춘다
        • 데이터 분석 or 모델 빌딩 등을 위한 데이터 저장
      • 데이터 직군이라면 SQL을 반드시 알아야함

      • 보통 RDBMS를 복사해서 데이터 웨어하우스에 저장


    • 데이터 순환구조

      • 사이트 방문 트랙픽과 외부 데이터(이메일, 마케팅 등)가 생성된다

      • 기업에서 데이터를 이용해서 비즈니스 인사이트를 도출하거나 개인화 등을 통한 제품 서비스 개선에 노력한다


    • 비관계형 데이터베이스

      • 구조화 되지 않은 데이터도 다룬다
      • 흔히 NoSQL 데이터베이스 라고 함
      • 주로 프로덕션 관계형 데이터베이스(RDBMS)를 보완하기 위한 목적으로 많이 사용함
      • 예시
        • MongoDB, Redis, HBase, ElasticSearch, Cassandra 등



  1. 백엔드 시스템 구성도 예제보기
  • 프론트엔드와 백엔드

    • 초기에는 웹/앱 서비스를 프론트엔드와 백엔드로 구성했다

      • 프론트엔드

        • 사용자와 상호작용하는 부분으로 보통 웹 브라우저 또는 모바일 폰에 사용자에게 노출되는 서비스
      • 백엔드

        • 사용자에게 보이지는 않지만 실제 데이터를 저장/추가하고 사용자가 요구한 일을 수행하는 서비스(여기에 다양한 DB가 사용됨)

  • 다른 직군의 등장

    • 데브옵스(DevOps)

      • 주로 백엔드에 집중하고, 서비스 운영을 책임지는 팀으로 회사가 작을 때는 백엔드 팀이 담당
    • 풀스택(FullStack)

      • 프론트엔드와 백엔드분야 모두 할 수 있는 직군으로 주로 작은 회사에서 선호
    • 데이터 직군

      • 데이터 엔지니어

      • 데이터분석가

      • 데이터과학자


  • 시스템 구성의 변화 (2 tier)

    • 클라이언트와 서버, 두 개의 티어로 구성

      • 비즈니스 로직은 주로 클라이언트에 위치한다(front-end)
      • 서버단이 데이터베이스가 됨(back-end)
    • 주로 데스크탑 응용프로그램에서 사용하는 아키텍쳐


  • 시스템 구성의 변화 (3 tier)

    • 웹 서비스에서 자주 사용되는 아키텍쳐
      • 프리젠테이션 티어(Presentation Tier) : 프론트엔드
      • 애플리케이션 티어(Application Tier) : 백엔드
      • 데이터 티어(Data Tier) : 백엔드
      • Spring Boot도 3 tier의 한 종류이다(사진 수정하자)


  • 관계형 데이터베이스(RDBMS)의 중요성

    • 어떤 구조든 DB는 꼭 필요한 컴포넌트이다
    • DB를 잘 다루는 것(SQL)이 좋은 개발자가 되기위해 필요함
    • 백엔드 개발자로서 중요한 부분
      • 데이터 모델을 잘 만들고 그걸 프론트개발자와 공유 및 협업
      • 속도 개선을 위한 쿼리 성능을 모니터링하고 필요하다면 성능 개선 작업을 수행
        • 이를 전담하는 사람이 존재하기도 함(DBA)



  1. 관계형 데이터베이스 소개
  • RDBMS(1)

    • 구조화된 데이터를 저장하고 질의할 수 있도록 해주는 스토리지

      • 엑셀 스프레드 시트 형태의 테이블로 데이터를 정의 및 저장함

        • 테이블에는 컬럼(column)과 레코드(row)가 존재


  • RDBMS(2)

    • RDBMS를 조작하는 프로그래밍 언어가 SQL

      • DDL(Data Definition Language)

        • 테이블 정의를 위해 테이블의 형식(포맷)을 정의해주는 언어
      • DML(Data Manipulation Language)

        • 테이블 안의 데이터 조작/질의를 위한 언어

        • 테이블에 레코드를 추가, 수정, 삭제, 조회 등을 위해 사용하는 언어


  • RDBMS의 구조

    • RDBMS는 2단계로 구성

      • 가장 밑단에는 테이블들이 존재

      • 테이블들은 데이터베이스(혹은 스키마)라는 폴더 밑으로 구성


    • 테이블의 구조

      • 테이블은 레코드(행)들로 구성
      • 레코드는 하나 이상의 필드(컬럼)으로 구성
      • 필드(컬럼)는 이름과 타입과 속성(primary key)으로 구성



  1. SQL 소개
  • Structured Query Language

    • RDBMS에서 데이터/테이블을 질의하거나 조작해주는 언어

    • 1970년대 초반에 IBM에서 개발


  • SQL 단점

    • 구조화된 데이터를 다루는데 최적화 되어있어서 비구조화 데이터에 대해 한계가 있음

      • 정규표현식을 통해 비구조화 데이터를 다룰 수 있지만 제약이 있음
      • 대부분의 RDBMS들은 플랫한 구조만 지원
        • 하지만 구글 빅쿼리는 nested structure 지원함
      • 비구조화 데이터를 다루는데 Spark, Hadoop같은 분산컴퓨팅 환경이 필요해짐
    • RDBMS마다 SQL문법이 조금씩 다름


  • Star schema

    • 프로덕션 관계형 데이터베이스에서 보통 스타 스키마를 사용해서 데이터를 저장한다

    • 데이터를 논리적 단위로 나눠 저장하고, 필요할 때 조인

    • 스토리지 낭비가 덜하고, 업데이트가 쉽다


  • Denormalized schema

    • NoSQL이나 데이터 웨어하우스에서 사용하는 방식

      • 단위 테이블로 저장하지 않고, 별도의 조인이 필요없는 형태
    • 스토리지 낭비가 좀 있지만, 조인이 없기에 빠른 계산이 가능하다


  • DDL

    • CREATE TABLE을 통해 primary key 속성을 지정할 수 있음

      • 성능 향상을 위해 인덱스를 지정할 수 있음

      • CREATE TABLE raw_data.user_session_channel(
        	user_id int,
            session_id varchar(32) primary key,
            channel varchar(32)
        );

    • DROP TABLEDELETE * FROM의 차이는 명령이후에 테이블이 존재하지 않느냐 있느냐 차이다

      • DROP TABLE 테이블이름; /*테이블은 존재X*/
        DROP TABLE IF EXISTS 테이블이름;
        DELETE * FROM 테이블이름; /*테이블은 존재*/
    • ALTER TABLE

      • /*새로운 컬럼 추가*/
        ALTER TABLE 테이블이름 ADD COLUMN 필드이름 필드 타입;
        
        /*기존 컬럼 이름 변경*/
        ALTER TABLE 테이블이름 RENAME 현재 필드이름 TO 새 필드 이름;
        
        /*기존 컬럼 삭제*/
        ALTER TABLE 테이블이름 DROP COLUMN 필드이름;
        
        /*테이블 이름 변경*/
        ALTER TABLE 테이블이름 RENAME TO 새 테이블 이름;

  • DML(향후 추가)

    • SELECT

      • 보통 다수의 테이블에서 조회할 때는 'JOIN'을 이용함
    • UPDATE FROM

    • DELETE FROM

      • 조건기반으로 삭제가능

      • TRUNCATE은 조건 제시 없이 삭제하는 명령어

      • 둘다 테이블을 삭제하지 않음

    • INSERT INTO

0개의 댓글