데이터베이스 - DB와 SQL

지우·2023년 1월 26일
0

CNU SW 아카데미 2기

목록 보기
9/10

데이터베이스 소개

필요성

모든 서비스는 데이터를 만들어내고 저장을 필요로 하기 때문에 기록되어야 한다.

유형

프로덕션 관계형 데이터베이스 (RDBMS)

어떤 서비스의 운영에 필요한 데이터를 저장하는 곳.

ex ) MySQL, PostgreSQL, …

  • 빠른 처리 속도가 중요 (vs 데이터 웨어하우스 관계형 데이터베이스)
  • 데이터를 구조화된 테이블의 집합으로 구성하여 저장하고 관리
  • 프로그래밍 언어 - SQL

데이터 웨어하우스 관게형 데이터베이스

  • 회사 직원이 사용하는 다양한 서비스에서 발생하는 데이터 → 수집하여 저장
  • 회사 관련 데이터를 저장하고 분석 → 의사결정과 서비스 최적화에 사용
  • 구조화된 큰 데이터를 처리하는 것이 중요

→ 관계형은 구조화된 데이터를 다룬다. (기본)

데이터 순환 구조

  1. 웹 서비스, 모바일 앱에서 생성되는 다양한 데이터 → 프로덕션 관계형 DB에 저장 (회원 가입, 구매내역, 마케팅 등). 속도가 중요.
  2. 데이터 팀으로 이동
    외부 + 내부 데이터를 데이터 웨어하우스에 저장
  3. 비즈니스 파악, 분석
  4. 데이터 기반 서비스 개인화, 선호도에 따른 개선

백엔드 시스템

정의

사용자에게 보이지는 않지만 실제 데이터를 저장/추가하고 사용자가 요구한 일을 수행하는 부분. 다양한 DB가 사용된다.

시스템 구성의 변화

2 tier

클라이언트 - 서버, 두 개의 tier로 구성, 비즈니스 로직

클라이언트 : 사용자의 UI, 프론트엔드

서버 : DB, 백엔드

3 tier (현재)

웹 서비스에서 많이 사용된다.

프리젠테이션 티어 : 프론트엔드

애플리케이션 티어 : 백엔드 (= Application 서버), 비즈니스 로직

데이터 티어 : 백엔드 (= DB 서버)

예시 : Spring Boot

  • 기본적으로 3 tier 구조
  • 백엔드 frame work (자바 기반) 중 하나. 개발과 운영이 편리해짐.

→ DB를 잘 다룰 줄 알아야 한다.

→ 데이터 모델을 잘 만들고 공유 및 협업 필요

→ 속도 등의 성능 모니터링 및 개선 작업 필요

관계형 데이터베이스

정의

구조화된 데이터를 저장하고 질의할 수 있도록 해주는 저장소

엑셀 스프레드시트 형태의 테이블로 데이터 저장 및 정의 (row와 column)

이를 조작하는 프로그래밍 언어 : SQL

  • 테이블 정의를 위한 DDL - 테이블 포맷을 정의해주는 언어
  • 테이블 데이터 조작/질의를 위한 DML - DDL로 정의된 테이블에 추가, 수정, 삭제, 읽기 등을 위해 사용하는 언어

구조

2단계 : 테이블 (엑셀의 시트) + 테이블로 구성된 DB라는 디렉토리 (엑셀의 파일)

테이블 스키마 = 테이블 구조

  • 테이블 : 레코드 (행) 들로 구성
  • 레코드 : 하나 이상의 컬럼 (열) 으로 구성
  • 컬럼 : 이름 + 타입 + 속성 (primary key, 식별자) 으로 구성 → 이메일, 전화번호 등처럼 유일한 컬럼으로 레코드 구분 가능.

SQL 소개

정의

관계형 DB에 있는 데이터(테이블)를 질의하거나 조작해주는 언어

  • DDL
  • DML

구조화된 데이터를 다루는 한 데이터 규모와 상관 없이 쓰인다.

단점

구조화된 데이터에 최적화 → 비구조화 데이터에는 제약이 심함

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

Star schema

  • 프로덕션 DB용 관계형 데이터베이스에서 저장을 위해 사용
  • 데이터를 논리적 단위로 나눠 저장하고 필요시 join
  • 저장소 낭비가 적고 업데이트 쉬움
  • ex ) 매방, 직원, 기간, 제품, … → 매출

Denormalized schema

  • NoSQL or 데이터 웨어하우스에서 사용
  • 단위 테이블로 나누지 않으므로 별도의 join이 필요 없는 형태
  • 저장소를 더 사용하지만 join이 필요 없기에 빠른 계산 가능

언어

  • 다수의 SQL문 실행 → ; 로 분리 필요
  • 주석
    • -- : 한 줄자리 주석 ( == //)
    • /* -- */ : 여러 줄에 걸친 주석
  • 키워드 → 대소문자 등 팀끼리의 포맷팅 규칙 필요
  • 테이블/필드 이름의 명명규칙 중요
    • 단수형 vs 복수형
    • 언더바 vs 대문자로 구분

DDL - 테이블 구조 정의 언어

CREATE TABLE

  • Primary key 속성 지정 가능 → 유일키 보장
  • 성능 위해 인덱스 지정 가능
CREATE TABLE raw_data.user_session_channel (
	userid int,
	sessionid varchar(32) primary key,
	channel varchar(32)
);

raw_data : 넣고자 하는 폴더

user_session_channel : 생성하려는 테이블 이름

필드 : 컬럼

DROP TABLE

DROP TABLE table_name; -- 오류 가능성
DROP TABLE IF EXISTS table_name; -- 존재하면 지워라

테이블 삭제

ALTER TABLE

테이블 수정 (컬럼 추가, 이름 변경, 제거, 테이블 이름 변경 등…)

DML - 테이블 조작 언어

레코드 질의 언어 : SELECT

테이블에서 레코드 or 필드를 읽어오는데 사용 등…

이 외 레코드 추가/삭제/수정 언어

profile
기록용

0개의 댓글