오늘은 웹개발과 관련된 CS 공부를 하였고, 발표 준비를 하며 찾아본 내용을 적어보았다. 내가 맡은 파트는 데이터베이스와 쿼리와 관련된 것이어서 그에 대해 정리해보았다.
1. 데이터베이스
1-1. 데이터란?
데이터베이스에 대해 알려면 먼저 데이터에 대해 알아야 한다. 데이터는 어떠한 의미나 목적 없이 단순히 수집된 순수한 자료를 뜻한다. 데이터를 정보와 혼동하기 쉽지만 데이터는 정보보다 더 작은 개념이다. 이런 데이터가 모여서 의도나 목적에 따라 분석되어 의미가 부여되면 정보가 된다.
특정 지역에서 날마다 측정한 온도 자료를 예를 들어 설명할 수 있다. 날마다 측정한 섭씨 온도 그 자체는 모두 데이터이다. 데이터 자체에는 어떤 의미 부여 없이 사실 그 자체만 반영되어 있다. 이 데이터들이 모이면 이를 바탕으로 통계를 내거나 흐름을 분석해서 정보를 얻을 수 있다. ‘여름의 온도는 겨울보다 높다’와 같이 데이터를 기반으로 얻어낸 것을 정보라고 할 수 있다.
1-2. 데이터베이스(Database)란?
데이터베이스는 간단하게 말하면 많은 양의 데이터를 한데 모아놓은 곳을 말한다. 데이터베이스는 전산상에 저장되는 구조화된 정보 또는 조직화된 데이터 모음으로 소프트웨어를 통해 데이터를 저장하고 읽고 수정하거나 삭제할 수 있는 형태의 데이터 집합이다.
하나의 데이터베이스는 하나의 프로그램만이 아니라 여러 프로그램에서 활용될 수도 있다. 그렇기 때문에 데이터베이스는 특정 프로그램에 종속되지 않은 독립된 소프트웨어로 구축된다.
예를 들어 영화에 관한 정보들을 담고있는 데이터베이스가 있다고 하면 영화 예매 어플, 영화 스트리밍 서비스, 영화 관람 기록 어플 등 여러 서비스에서 이 데이터베이스를 활용할 수 있을 것이다.
1-3. DBMS(DataBase Management System, 데이터베이스 관리 시스템)이란?
DBMS는 많은 양의 데이터를 효과적으로 관리하기 위한 여러가지 기능을 갖춘 데이터베이스 관리 프로그램이다.
DBMS는 특정 데이터를 저장, 조회, 삭제, 수정할 수 있을 뿐 아니라 데이터가 중복되거나 잘못된 형식으로 저장되는 것을 방지하여 양질의 데이터베이스를 유지할 수 있게 한다. 또한 외부의 접근을 통제하고 사용자마다 권한을 지정해서 보안을 유지할 수 있으며, 허용된 사용자가 원하는 대로 데이터를 살펴보고 조작할 수 있도록 여러가지 인터페이스를 제공한다.
1-4. DBMS의 종류들
대표적인 DBMS들을 표로 정리해보았다.
DBMS | 제작사 | 작동 운영체제 | 데이터베이스 모델 | 기타 |
Oracle | Oracle | Unix, Linux, Windows | 관계형 | 비싸다 |
MySQL | Oracle | Unix, Linux, Windows, Mac | 관계형 | 오픈 소스 |
MongoDB | MongoDB Inc. | Unix, Linux, Windows, Mac | 비관계형 | |
Redis | Redis Labs | Linux, Mac | 비관계형(키-값) | 오픈 소스 |
SQL Server | Microsoft | Windows | 관계형 |
2024년 3월 현재 가장 많이 쓰이는 DBMS를 아래 사이트에서 확인할 수 있다.
https://db-engines.com/en/ranking
DB-Engines Ranking
Popularity ranking of database management systems.
db-engines.com
1-5. 관계형 데이터베이스(Relational Database)
관계형 데이터베이스는 엑셀과 유사한 방식으로 데이터를 저장하는 방식이다. 테이블(표)에 데이터를 저장하는 방식으로 데이터베이스를 관리한다. 테이블은 열과 행으로 이루어져 있다. 각 열에는 텍스트를 넣을지, 숫자 또는 날짜를 넣을지와 같은 형식을 미리 설정하기 때문에 잘못된 데이터가 입력되는 것을 방지한다. 관계형 데이터베이스를 RDBMS라고도 부른다.
관계형 데이터베이스들의 공통적인 특징은 SQL을 사용한다는 것이다. 때문에 SQL을 사용하지 않는 데이터베이스를 통상적으로 NoSQL이라고 부른다. (관계형 데이터베이스가 아니면서 SQL 기능이 있는 DBMS도 있고, SQL을 쓰지 않으면서 관계형 데이터베이스인 DBMS도 있기는 하지만 매우 드물기 때문에 통상적으로 관계형이 아닌 DBMS를 NoSQL이라고 부른다.)
현재 가장 많이 쓰이는 DBMS 순위를 보면 최상위를 차지하고 있는 DBMS들 모두 관계형 데이터베이스임을 볼 수 있다.
1-6. 관계형 데이터베이스의 종류
- 오라클
대형 기업에서 가장 많이 사용되는 RDBMS. 은행, 대기업에서 사용할만큼 강력한 기능과 안전성을 자랑하며 다양한 운영체제에서 사용이 가능하다. 거대 IT기업인 오라클에서 만든 데이터베이스이다.
- MySQL
오라클과 달리 주로 스타트업이나 소기업 혹은 개인 용도로 많이 사용되는 데이터베이스. 소스 코드가 공개된 오픈 소스이고 용도에 따라서 무료로 이용할 수 있다. 2010년에 오라클에 인수되었다.
- 마이크로소프트 SQL 서버
마이크로소프트에서 만든 RDBMS로 윈도우 서버에서만 구동이 가능하고 C#과 높은 호환성을 가지는 것이 특징이다.
- PostgreSQL
MySQL처럼 무료로 사용할 수 있는 오픈소스 데이터베이스이다. 다양한 데이터 타입을 지원하고 객체지향 프로그래밍을 적용할 수 있는 등 개발자에게 편리한 기능을 갖추고 있다.
- MariaDB
역시 오픈 소스 무료 데이터베이스이다. MySQL이 오르칼에 인수되면서 오픈 소스 사용이 불확실해짐에 따라 등장한 오픈 소스 무료 데이터베이스이다.
- SQLite
SQLite는 위의 RDBMS들처럼 서버에서 작동하는 것이 아니라 클라이언트에서 작동하는 용도로 만들어졌다. 비교적 가벼운 데이터베이스로, 안드로이드와 iOS에 기본적으로 포함되어 있다. 응용 프로그램 실행에 필요한 데이터를 기기 내에서 관리하는데 사용된다.
1-7. 비관계형 데이터베이스(NoSQL)
일반적으로 데이터베이스 사용에 있어서 관계형 데이터베이스가 가장 효과적인 방식이긴 하지만 서비스나 프로그램에 따라서는 관계형 데이터의 기능과 제약이 불필요한 비용으로 작용하거나 관계형 방식이 효율적인 운영에 적합하지 않을 수도 있다. 이럴 때 비관계형 데이터베이스를 사용한다.
1-8. 비관계형 데이터베이스의 종류
- 문서 데이터베이스
문서 데이터베이스는 데이터를 문서의 형태로 저장한다. JSON과 비슷한 형태의 문서로 저장하기 때문에 일관성이 필요한 종류의 데이터에는 부적합하지만 유연성이 강점이다.
MongoDB와 CouchDB 등이 문서 데이터베이스이다
- 키-값 데이터베이스
키와 값의 쌍만을 저장하는 단순한 형태의 데이터베이스이다. 기능은 한정되어 있지만 실행 속도가 빠르고 용량이 부족할 경우 다른 서버와의 분담이 용이한 수평 확장성을 가지고 있다. 보통은 세션을 구현하기 위애 세션 아이디(Key)와 사용자 번호(값)을 메모리에 저장하는 용도로 사용한다.
레디스(Redis), 아마존 다이나모 DB 등이 키-값 데이터베이스이다.
- 그래프 데이터베이스
관계도처럼 각 구성원을 뜻하는 여러 노드(node)와 그들 간의 관계를 뜻하는 엣지(edge)로 구성된 자료 구조를 뜻한다. 노드, 엣지와 더불어 노드의 정보인 프로퍼티를 데이터로 저장한다. 인스타그램, 페이스북 같은 SNS에서 사용자 간의 친구 관계를 구현하는 용도로 유용하게 사용된다.
Neo4j, JanusGraph 등이 그래프 데이터베이스이다.
2. 쿼리(Query)
질의 라는 뜻으로 데이터베이스에서 정보를 검색하기 위해서 요청하는 것을 말한다. 사용자는 데이터베이스(서버)에 명령문을 통해 질의를 하게 되고 데이터베이스는 결과를 사용자에게 보내준다.
명령문은 실행하거나 에러를 띄우거나 취소하거나 결과를 띄우는 개념이지만 질의문은 데이터베이스(서버)에서 질문을 하는 개념이다. 만약 사용자가 권한이 없다면 서버에서 질의를 거절할 수도 있다.
3. 오늘 알게 된 것
- 정작 SQL을 매일 복습하고 있었지만 데이터베이스나 그에 관련된 지식은 잘 모르고있었구나 하고 반성하게되었다.
- 단순히 CS 지식만을 공부할 때는 잘 이해되지 않았던 것들이 코딩을 하다가 다시 되돌아가 이론을 살펴보면 잘 이해되는 경우도 있었다. 둘을 적절히 병행하면 효율적인 공부를 할 수 있을 것 같다.
'오늘 배운 것' 카테고리의 다른 글
24-03-27 Kotlin 컬렉션 집계하기 (2) (0) | 2024.03.27 |
---|---|
24-03-26 Kotlin 컬렉션 집계하기 (0) | 2024.03.26 |
24-03-24 라이브러리와 프레임워크, 플러그인 (0) | 2024.03.24 |
24-03-23 SQL UNION과 UNION ALL (0) | 2024.03.23 |
24-03-22 SQL Having과 Where (0) | 2024.03.22 |