Skip to content

Database

Reference

데이터베이스란?

데이터베이스란 데이터를 체계적으로 저장하고 관리하는 소프트웨어 시스템이다.
데이터의 무결성, 효율성, 보안성을 보장하고 여러 사용자가 동시에 안정적으로 데이터를 사용할 수 있다.

데이터베이스의 필요성

디비의 필요성

  • 데이터를 엄밀하게 기록해 데이터 무결성을 지킨다.
  • 용도에 맞게 데이터 쿼리를 변경하거나 동시 접근 이상을 해결하기 위해 트렌젝션 개념을 도입

데이터베이스의 종류

데이터베이스의종류

  • 관계형 데이터베이스
  • 비관계형 데이터베이스

관계형 데이터베이스

관계형데이터베이스

  • 정형화된 테이블과 데이터 구조를 쓰기 때문에 무결성 즉, 정확성, 일관성, 신뢰성을 보장한다.
  • 쿼리 언어 SQL을 사용해 데이터를 조회하고 조작할 수 있다.

종류

관계형데이터베이스 종류

  • ORACLE: 상용 관계형 데이터베이스, 대규모 기업 어플리케이션을 위해 설계되었고 고성능/고가용성/강력한 보안 기능을 제공한다. 대기업이나 정부에서 사용한다.
  • SQL Server: 마이크로소프트에서 개발한 관계형 DBMS, 윈도우즈 환경과 긴밀히 통합되어 있어 윈도우 환경에서 개발하는 경우나 C#과 같은 윈도우 기반 프로그래밍 언어와 합이 좋다.
  • MySQL: 오픈 소스 관계형 데이터베이스
  • PostgreSQL: 오픈 소스 관계형 데이터베이스, 확장성과 SQL의 표준 준수에서 강점을 보인다. 특정 기업에서 주도하지 않는 완전한 오픈형
  • SQLite: 애플리케이션에 내장되어 하나의 파일로 데이터베이스를 관리한다. 가볍고 설치가 필요없고 복잡한 설정 없이 바로 사용할 수 있다는 점이 장점이다. 모바일 애플리케이션, 임베디드 시스템 소형 웹 애플리케이션에서 주로 사용된다.

비관계형 데이터베이스

비관계형 데이터베이스

  • NoSQL 데이터베이스는 고정된 스키마가 없기 때문에 미리 정의된 구조에 얽매이지 않고 유연하게 저장할 수 있다.

종류

비관계형데이터베이스 종류

  • mongoDB: BSON형식의 문서 지향 데이터베이스, 스키마가 동적으로 변화할 수 있어 데이터 구조가 자주 바뀌는 애플리케이션에 적합하다.
  • cassandra: 분산형 컬럼 지향 데이터베이스, 높은 가용성과 확장성으로 대규모 소셜 미디어 플랫폼, 메시징 시스템, IoT 데이터 저장소와 같은 대규모 데이터 처리가 필요한 환경에서 주로 사용된다.
    넷플릭스, 인스타그램, 디스코드 등에서 사용되었다.
  • Redis: in-memory key value 데이터 저장소로 초고속 데이터 접근이 필요한 애플리케이션에 최적화되어 있다. 데이터를 메모리에 저장하기 때문에 응답속도가 빠르고 실시간 애플리케이션에서 높은 성능을 발휘한다. 캐시/세션 관리/실시간 분석/메시지 큐와 같은 용도로 사용된다.
  • Neo4j: 그래프형 데이터베이스로 노드와 엣지로 데이터를 표현, 데이터 간의 복잡한 관계를 관리하는데 최적화되어 있다. 데이터 간 관계를 직접적으로 모델링 할 수 있어 소셜 네트워크 분석/추천 시스템 경로 탐색 등 관계 중심의 애플리케이션에서 강력한 성능을 발휘한다.

데이터 모델링

데이터 모델링이란?

데이터 모델링

데이터 모델링 과정은 데이터베이스로 구현할 데이터가 무엇인지 정리하는 과정을 포함한다.
실제 데이터베이스를 쓰기 전에 개념적으로 확인할 수 있다.


데이터 모델링


데이터 모델링 과정

데이터 모델링 과정

  • 요구사항 분석: 이 단계에서 꼼꼼하게 분석해야 이후의 데이터 모델링 과정에서 잘 설계할 수 있다.
  • 개념적 데이터 모델링: 데이터의 구조를 ERD로 설계하는 단계
    각 테이블의 데이터 타입, 속성, 관계, 제약 조건 등이 어떻게 되는지 추상적으로 파악하고 시각화한다.
    🔍 ERD (ER다이어그램) 예시

    ER다이어그램

  • 논리적 데이터 모델링: 개념적 데이터 모델링의 결과를 DBMS에 맞게 변환하는 과정
    ERD로 그린 설계를 SQL로 변경하는 단계
    🔍 ERD를 SQL로 변경 예시

    ER다이어그램

  • 물리적 데이터 모델링: 실제 하드웨어나 쿼리 성능을 고려해 데이터베이스 위주의 세밀한 설정을 하는 과정

엔터티와 속성

데이터 모델링을 할때 테이블을 구분하기 위해 찾아야하는 것이 엔터티, 그 엔터티를 구성하는 게 인스턴스와 속성이다.

엔터티

엔터티

현실 세계의 모든 것이 엔터티가 될 수 있다. 어떤 것으로 다뤄야 하는 모든 것이 엔터티가 될 수 있다.


엔터티 구분

엔터티

유형 엔터티

  • 형태를 명확하게 확인할 수 있는 유형 엔터티

무형 엔터티

  • 형태를 확인할 수 없는 무형 엔터티

사건 엔터티

  • 현실 세계에서 일어나는 사건 중 대출과 같이 만들고자 하는 연관 있는 사건 엔터티

인스턴스

인스턴스

  • 엔터티의 구체적인 사례로 실질적인 데이터를 담고 있다.

엔터티

  • 엔터티: 도서관 회원
  • 인스턴스: 실제 도서관 회원 이름

속성

속성

  • 속성은 엔터티의 특징, 성질을 의미한다.
  • 엔터티에는 요구사항을 개발하기 위해 확인해야하는 특징이 있다. 예를들어 도서관 회원은 이름, 성별, 나이, 학년 등 속성이 있다. 책은 책 고유번호, 책이름, 저자 등의 정보가 있다.

속성

  • 엔터티 속성은 내가 만들 테이블의 칼럼이 무엇일지 고민해보면 쉽다.
  • 테이블을 잘 표현하는 특성을 따로 빼서 데이터로 수집하자라고 생각하면 정하기 쉽다.

속성

ER모델의 엔터티는 관계형 데이터베이스의 테이블과 같은 개념이다.


용어

속성


관계형 데이터베이스

관계형 데이터베이스관계형 데이터베이스관계형 데이터베이스관계형 데이터베이스관계형 데이터베이스

  • id: 로우를 식별 할 수 있는 값 = PK, Primary Key (기본키)

관계형 데이터베이스관계형 데이터베이스


1 Tier 아키텍처

하나의 컴퓨터 내의 데이터베이스 시스템과 데이터베이스 시스템에 접근할 수 있도록 돕는 클라이언트를 모두 갖추고 있는 구조

1티어아키텍처

  • 클라이언트: 유저가 데이터베이스에 접근하기 위해 만들어진 모든 소프트웨어 개발자나 데이터베이스 설계자 즉, DBA는 직접 DB에 접근하기 위해 관리형 클라이언트를 사용하기도 하는데 DBMS에 터미널로 실행할 수 있는 psql CLI, GUI로 실행 가능한 pgAdmin 등이 있다.
  • DBMS: 데이터 베이스 시스템

장단점

  • 초심자가 SQL과 DBMS를 학습하기에 적합
  • 구조가 간단하여 처음 시작하기 좋다.
  • 컴퓨터가 망가지면 장애 대응이 불가하다.

Supabase와 PostgreSQL로 SQL 실습 환경 구축

supabase

  • 오픈소스 BaaS(Backend as a Service)로 백엔드 개발을 위한 편의 기능을 제공한다.
  • PostgreSQL이 설치되어있는 서버 제공
  • 유저 인증, 서버리스 함수, API , SQL Explorer 등 편의 기능을 제공한다.
  • 자체적으로 클라우드를 구축해서 프로젝트 별로 하나의 로컬 환경을 가지고 있다.
  • 사용자는 Supabase의 웹 애플리케이션으로 로컬 환경을 제어할 수 있다.
  • 데이터베이스 설치, 구성, 재설정이 용이
  • 하나의 가상화 인스턴스로 볼 수 있다. 쉽게 말하면 가상의 컴퓨터를 만들고 그 컴퓨터에 PostgreSQL을 설치한다고 볼 수 있다.

PostgreSQL (DBMS)

  • 오픈소스로 무료, SQL 표준을 94% 이상 높은 수준으로 준수한다.
  • 관계형 데이터베이스가 갖추어야 할 기능을 갖추고 있다.
  • 전 세계적으로 사용량이 증가 추세에 있는 데이터베이스 시스템이다.
  • MVCC 동시성 제어 기술이나 JSON과 uuid 등 최신 개발 프로젝트가 갖추면 좋은 여러 부가기능도 제공한다.

SQL

SQL
SELECT * FROM pg_database;
  • 현재 이 데이터베이스가 가지고 있는 모든 데이터베이스를 확인할 수 있다.
  • 시스템에서 직접 사용하는 데이터베이스이기 때문에, 건드리지 않는 게 좋다.

데이터베이스 생성

SQL
CREATE DATABASE my_database;
  • CREATE DATABASE라는 명령을 통해서 이름이 my_database인 데이터베이스를 생성하는 것

  • 잘 생성이 되었는지 확인하기 위해서 SELECT * FROM pg_database;를 다시 입력!


데이터베이스 삭제

SQL
DROP DATABASE my_database;
  • 잘 삭제되었는지 확인하기 위해서 SELECT * FROM pg_database;를 다시 입력!