데이터베이스

Purple·2021년 11월 11일
0

TIL

목록 보기
52/73

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

  • In-memory 로 저장하면, 프로그램이 실행될 때만 존재한다. 엑셀시트나 CSV같은 파일형태는 In-memery에 비해 적절해보이지만, 데이터가 필요할 때마다 전체 파일을 읽어야하고 파일의 크기가 커질수록 작업이 버겁다. 그리고 파일이 손상되거나 여러개의 파일들을 동시에 다뤄야하는 복잡한 상황에서는 사용이 어렵다.
    ==> 그래서 사용하게 된것이 관계형 데이터베이스이다.
  • 관계형 데이터베이스는 하나의 CSV 파일이나 엑셀 시트를 한개의 테이블로 저장할 수 있다. 한번에 여러개의 테이블을 가질 수 있기 때문에 SQL 을 활용해 데이터를 불러오기 수월하다.

2. SQL

  • SQL이란, Structured Query Language의 약자로 데이터베이스 언어이다. 주로 관계형 데이터베이스에서 사용한다. 예를 들어, MySQL, Oracle, SQLite, PostgreSQL 등 다양한 데이터베이스에서 SQL 구문을 사용할 수 있다.

  • 데이터베이스에 쿼리를 보내 원하는 데이터를 가져오거나 삽입할 수 있다. 그리고 이름에서 유추할 수 있듯이, SQL은 데이터가 구조화된 테이블을 사용하는 데이터베이스에서 활용할 수 있다.

  • SQL을 사용할 수 잇는 데이터 베이스와 달리, 데이터의 구조가 고정되어있지않은 데이터베이스를 NoSQL이라고 한다, 관계형 데이터베이스와 달리, 테이블을 사용하지않고 데이터를 다른 형태로 저장한다. NoSQL의 대표적인 예시는 MongoDB와 같은 문서 지향 데이터베이스 이다.

  • 이처럼 데이터베이스 세계에서 SQL은 데이터베이스 종류를 SQL이라는 언어단위로 분류할 정도록 중요한 자리를 차지하고 있다. 그리고 SQL을 사용하기 위해서는 데이터 구조가 고정되어있어야한다.

  • 쿼리란, 저장되어 있는 데이터를 필터하기 위한 질의문으로 볼 수 있다.

3. ACID

  • 데이터베이스 내에서 일어나는 하나의 트랜잭션의 안정성을 보장하기 위해 필요한 성질이다.

3.1 Atomicity(원자성)

  • 원자성은 하나의 트랜잭션에 속해있는 모든 작업이 전부 성공하거나 전부 실패해서 결과를 예측할 수 있어야한다.
  • 원자성을 지켰다면, 두가지 작업 수행시 두 작업이 모두 성공하거나, 둘중 하나의 작업이라도 실패한다면, 하나의 단위로 묶여있는 모든 작업을 실패하게 만들어 기존 데이터를 보호한다.

3.2 Consistency(일관성)

  • 데이터베이스의 상태가 일관되어야한다는 성질이다. 하나의 트랜잭션 이전과 이후, 데이터베이스의 상태는 이전과 같이 유효해야한다. 다시말해, 트랜잭션이 일어난 이후의 데이터베이스는 데이터베이스의 제약이나 규칙을 만족해야한다는 뜻이다.

3.3 Isolation(격리성, 고립성)

  • 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야한다는 뜻이다. 실제로 동시에 여러개의 트랜잭션들이 수행될 때, 각 트랜잭션은 고립(격리)되어있어, 연속으로 실행된 것과 동일한 결과를 나타낸다.

3.4 Durability (지속성)

  • 하나의 트랜잭션이 성공적으로 수행되었다면, 해당 트랜잭션에 대한 로그가 남아야한다. 만약 런타임 오류나 시스템 오류가 발생하더라도,해당 기록은 영구적이어야 한다는 뜻이다.

4. SQL (구조화 쿼리 언어) vs NoSQL (비구조화 쿼리 언어)

  • 데이터베이스는 크게 관계형 데이터베이스와 비관계형 데이터베이스로 구분한다. 이 둘은 만들어진 방식, 저장하는 정보의 종류, 그리고 저장하는 방법 등에 차이가 있다.

4.1 SQL (관계형 데이터베이스)

  • 관계형 데이터베이스에서는 테이블의 구조와 데이터 타입 등을 사전에 정의하고, 테이블에 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 있다. 관계형 데이터베이스는 행(row)과 열(column)로 구성된 데이터를 저장한다. 각 열은 하나의 속성에 대한 정보를 저장하고, 행에는 각 열의 데이터 형식에 맞는 데이터가 저장된다. 특정한 형식을 지키기 때문에, 데이터를 정확히 입력했다면 데이터를 사용할 때에는 매우 수월하다.관계형 데이터베이스에서는 SQL을 활용해 원하는 정보를 쿼리할 수 있다. 이 말은 관계형 데이터베이스에서는 스키마가 뚜렷하게 보인다는 말과 같다. 다시말해, 관계형 데이터베이스에서는 테이블 간의 관계를 직관적으로 파악할 수 있다.

4.2 NoSQL (비관계형 데이터베이스)

  • NoSQL 기반의 비관계형 데이터베이스는 보통 다음과 같이 구성된다.
    • key-value타입
    • 문서형(Document) 데이터베이스
    • Wide-column 데이터베이스
    • 그래프(graph) 데이터베이스

4.3 차이점

4.3.1 데이터 저장(storage)

  • NoSQL은 key-value, document, wide-column, graph 등의 방식으로 데이터를 저장한다.
  • 관계형 데이터베이스는 SQL을 이용해서 데이터를 테이블에 저장한다. 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이터를 저장한다.

4.3.2 스키마(Schema)

  • SQL을 사용하려면, 고정된 형식의 스키마가 필요하다. 다시말해, 처리하려는 데이터 속성별로 열(column)에 대한 정보를 미리 정해두어야한다. 스키마는 나중에 변경할 수 있지만, 이 경우 데이터베이스 전체를 수정하거나 오프라인(down-time)으로 전환할 필요가 있다.
  • NoSQL은 관계형 데이터베이스보다 동적으로 스키마의 형태를 관리할 수 있다. 행을 추가할 때 즉시 새로운 열을 추가할 수 있고, 개별 속성에 대해서 모든 열에 대한 데이터를 반드시 입력하지 않아도 된다.

4.3.3 쿼리(querying)

  • 쿼리는 데이터베이스에 대해서 정보를 요청하는 질의문이다. 관계형 데이터베이스는 테이블의 형식과 테이블 간의 관계에 맞춰 데이터를 요청해야한다. 그래서 정보를 요청할 때, SQL과 같이 구조환된 쿼리 언어를 사용한다.
  • 비관계형 데이터베이스의 쿼리는 데이터 그룹 자체를 조회하는 것에 초점을 두고 있다. 그래서 구조화되지 않은 쿼리 언어로도 데이터 요청이 가능하다. UnQL(Unstructured Query Language)라고 말하기도 한다.

4.3.4 확장성(Scalability)

  • 일반적으로 SQL 기반의 관계형 데이터베이스는 수직적으로 확장한다. 높은 메모리, CPU를 사용하는 확장이라고도 한다. 데이터베이스가 구축된 하드웨어의 성능을 많이 이요하기 때문에 비용이 많이 든다. 여러 서버에 걸쳐서 데이터베이스의 관계를 정의할 수 있지만, 매우 복잡하고 시간이 소모된다.
  • NoSQL로 구성된 데이터베이스는 수평적으로 확장한다. 보다 값싼 서버 증설, 또는 클라우드 서비스 확장이라고도 한다. NoSQL 데이터베이스를 위한 서버를 추가적으로 구축하면, 많은 트래픽을 보다 편리하게 처리할 수 있다. 그리고 저렴한 범용 하드웨어나 클라우드 기반의 인스턴스에서 NoSQL 데이터베이스를 호스팅 할 수 있어서, 수직적 확장보다 상대적으로 비용이 저렴하다.

4.4 SQL 기반의 관계형 데이터베이스를 사용하는 케이스

  • 데이터베이스의 ACID 성질을 준수해야하는 경우 : 예를들어 전자상거래를 비롯한 모든 금융서비스를 위한 소프트웨어 개발 -> SQL을 사용하면 데이터베이스와 상호작용하는 방식을 정확하게 규정할 수 있기 때문에, 데이터베이스에서 데이터를 처리할 때 발생할 수 있는 예외적인 상황을 줄이고, 데이터베이스의 무결성을 보호할 수 있다.
  • 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우

4.5 NoSQL 기반의 비관계형 데이터베이스를 사용하는 케이스

  • 데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터를 저장하는 경우
  • 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
  • 빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트 하는 경우
profile
다시 보면, 더 많은 것들이 보인다.

0개의 댓글