logo

데이터베이스

데이터를 체계적으로 관리하기

48 조회

0 추천

1,129 단어

6분 예상

2025. 02. 03. 게시

2025. 02. 10. 수정

luasenvy 작성

CC BY-NC-SA 4.0

데이터베이스

정적 파일만을 제공하는 웹 서비스를 구성하는 것이 아니라면 데이터를 취합 관리하고 다자간의 동일한 데이터를 보장하기 위해서는 데이터를 관리해야할 방안이 필요하다. 단순히 파일만으로 관리하는 것도 방법 중 하나이며, HTML 문서 자체에 메타데이터를 실어 데이터로 활용하는 방식의 기법도 존재한다.

그러나 이렇게 다양한 방식의 데이터 관리기법은 학습하기에 너무나 방대하며 개별적으로 관리하는 방식을 취할경우 개발시 상호간 생산성이 크게 차이가 나기도 하고 개발자 입장에서 재활용이 불가능한, 불필요한 학습비용이 소모된다. 그래서 대부분 데이터를 관리할 때에는 잘 알려진 DBMS를 선택하여 데이터를 관리하는 것이 보편적이다.

DBMS

DBMS에 대한 설명은 데이터베이스란? 문서에 정리하였으니 한 번 읽어보기를 추천한다. 용어에 대한 부분도 함께 있어서 이 문서를 읽는데 도움이 될 것이다. 이 문서에서는 쉽게 사용할 수 있는 오픈소스 Postgresql을 대상으로 설명하겠다.

SQL

SQL은 표준으로 정해진 DBMS 명령어이다. 다양한 DBMS가 난립하더라도 표준 SQL을 지원하면 어떤식으로 데이터를 관리하든 개발자는 SQL 하나만 알면 다양한 DBMS를 사용할 수 있다. 최근에는 이런 SQL 방식 외에 Restful 방식의 쿼리나 JSON으로 구성된 쿼리, 또는 graphql과 같은 차세대 언어 등 다양한 접근 방식이 제공되고 있다.

하지만 여전히 DB라고 한다면 가장 보편적인 명령이며 DB라고 하는 것의 기본 원리를 이해하기 위해서라도 꼭 짚고 넘어가야할 항목이다.

  SELECT id
       , username
    FROM users
   WHERE id = '1'
ORDER BY id DESC;

위는 아주 간단한 검색 SQL이다. 일반적인 프로그래밍 언어와는 전혀 다른 모양을 가지고 있기 때문에 나도 그랬지만 이해하기가 어렵거나 흥미가 떨어지는 경우가 있었다.

const rows = users
  .filter(({ id }) => '1' === id)
  .toSorted(({ id: a }, { id: b }) => b.localeCompare(a))
  .map(({ id, username }) => ({ id, username }))

그러나 조금만 생각해보면 어차피 함수와 입력값을 읽을 수 있는 문장형태로 펼쳐놓은 것일뿐 크게 다를 것이 없다.

이러한 SQL의 문법을 자세히 다루기에는 문서가 너무 방대해지기 때문에 몇가지 핵심만 소개하고 넘어가겠다.

CRUD

업계에서 데이터 조작에 대해 CRUD라는 표현을 사용하는데 생성, 조회, 수정, 삭제의 앞글자만 따서 CRUD라 한다.

테이블

데이터 행들을 하나의 단위로 묶은 집합을 테이블이라고 한다. 쉽게 생각하면 우리가 흔히 사용하는 엑셀, 또는 표라고 생각하면 된다. 행과 열로 이루어진 2차원 행렬로 행 번호와 열 번호를 알면 쉽게 데이터를 특정할 수 있기 때문에 널리 사용된다.

JOIN

고유한 키를 구분자로 두 테이블의 관계를 설정하는데 관계형 데이터베이스를 나타내는 핵심 기능이라고 할 수 있다. 하나의 행에 고유한 id를 부여하고, 다른 행이 이 id값을 가지고 있는 것으로 데이터간 관계를 나타내는 방식을 취한다.

  SELECT p.id as post_id
       , a.id as author_id
    FROM post p
    JOIN author a
      ON p.author_id = a.id

left join 사진: ChatGPT 자체생산

JOIN은 이렇게 관계를 가지고 있는 행들의 집합들, 즉 두 테이블이 공통적으로 가지고 있는 키를 기준으로 집합병합된 결과를 얻을 수 있다. 집합 방식에 따라서 LEFT, RIGHT, INNER, OUTER 등 다양한 명칭이 존재한다. 일반적으로 JOIN이라고 하면 LEFT JOIN을 말한다. 키가 매치되는 두 행을 하나의 행으로 합쳐 사용할 수 있다.