파일 시스템은 운영 체제에서 데이터를 저장하고 검색하는 방법을 컨트롤하기 위한 data structure이다. 파일 시스템의 원리는 도서관에서 흔히 볼 수 있다.

내가 만약 '파인만의 여섯가지 물리 이야기'란 책을 찾고 싶으면 '400 자연과학' > '420 물리학' 순으로 찾아갈 것이다. 트리 구조이다. 운영 체제에서도 마찬가지다. 어떤 파일을 찾고 싶을 때 경로를 통해 찾을 수 있다.

특히 운영체제에서는 내가 편한대로 이 경로를 설정하고 파일들을 저장하기 때문에 사용자 친화적이다. 오늘날까지 계속해서 사용되고 있는 이유중에 하나이다. 하지만 파일 시스템엔 치명적인 단점이 있다. 데이터를 의미있게 가공하여 정보처리하는데에 있어서 상당히 비효율적이다. 하나하나 일일히 바꿔줘야하기 때문이다. 이 문제를 해결하는 것이 스프레드 시트이다.
마이크로소프트 액셀, 구글 시트같이 표 형식이로 데이터를 분석하고 저장하는 애플리케이션을 말한다. 스프레드 시트도 파일 시스템의 일종이다. 확실히 행과 열을 통해 표 형식으로 계산을 수행하기 때문에 데이터를 조작하기 편해진다.
그러나, 스프레드 시트도 데이터를 공유하는데에 있어서 어려움이 있다는 단점이 있다. (공유 기능이 있는 구글 시트는 예외) 그 외에도 여러가지 세부적인 단점들이 존재한다. 그렇다면 그 단점을 극복하는 데이터베이스의 특징을 파일시스템과 종합적으로 비교해보면서 알아보자.
파일은 하드디스크의 파일시스템에 저장된다. 그렇다면 데이터베이스는 어떨까?? 똑같다. 데이터베이스도 하드디스크의 파일시스템에 저장된다. 단지 관리를 누가하냐의 차이이다. 파일은 파일시스템이 관리하지만 데이터베이스는 DBMS(Data Base Management System)을 통해 데이터를 관리한다.
파일 시스템은 Unstructed data를 저장한다. Unstructed Data에는 문서, 사진, 동영상과 같이 정해진 규칙이 없는 데이터를 말한다.
데이터베이스는 Structed data를 저장한다. 정의가 되어 있는 데이터이기 때문에 다루기(질의)가 매우 편해진다.
그런데 정해지지 않아도 괜찮지 않을까?? 혼자 사용하는건 괜찮을 수 있다. 그러나, 공유를 할 때는 정의가 되어있어야 한다. 예를 들어, 날짜의 경우 영국은 일-월-연도순이지만 미국은 월-일-연도순이다. 날짜 표기 형식을 정의하지 않으면 11-12-2024인 데이터가 있으면 영국은 2024년 12월 11일로 미국은 2024년 11월 12일로 볼 수 있어 혼란을 초래한다.
파일 시스템은 file location을 알아야 저장할 수 있다. 그러나, 데이터 베이스는 어디에 저장되어 있는지 모른다. 어디에 저장되어 있는지 모르면 안좋은거 아닌가??
쿠팡에서 어떤 물건을 살 때 이 물건의 데이터가 어디에 있는지 몰라도 접근이 가능하며 구매가 가능하다. 즉, 일부러 저장 위치를 모르게 하여 모든 사람들이 접근 가능하게 한 것이다.
15시 부산행 KTX 좌석을 예약하기 위해 빈좌석이 몇석인지 검색한다고 하자. 만약 이 정보가 파일로 되어 있으면 15시뿐만아니라 나머지 시간대도 전부 포함되어 있는 파일 그자체를 봐야한다.
한편, 데이터베이스는 그냥 15시 부산행 KTX 빈좌석수의 데이터만 보면 된다.
임의의 숫자로 예를들면 내가 1kb 크기의 데이터를 보기 위해서 파일 시스템은 20gb 크기의 데이터를 꺼내와야 되지만 데이터베이스는 1kb를 읽어올 수 있다.
위의 case를 다시 보면 파일 시스템은 1. 시간이 15시인 데이터를 저장하고 컴파일 2. 부산행인 데이터를 저장하고 컴파일 3. 빈좌석수 저장하고 컴파일 이렇게 각각 파일이 컴파일되어야만 볼 수 있다.
그러나, 데이터베이스는 그냥 쿼리한줄이면 원하는 정보를 볼 수 있다.
| 학번 | 이름 | 학과명 | 성별 | 성적 |
|---|---|---|---|---|
| 20041201 | 김철수 | 컴퓨터 | 남 | 85 |
| 20050423 | 이영희 | 수학 | 여 | 95 |
| 20043433 | 홍길동 | 물리 | 남 | 88 |
| 20043423 | 이영희 | 컴퓨터 | 여 | 97 |
| 20045433 | 박희동 | 수학 | 남 | 80 |
파일 시스템에선 이 테이블에서 '성별'을 제외한 정보를 보고 싶다면 '성별'열을 제외한 정보들을 새로 만들고 저장해야한다. 또 '성적'을 제외한 정보를 보고 싶다면 그 열을 제외한 정보들을 새로 만들고 저장해야한다. 이렇게 되면 벌써 학번, 이름, 학과명 이 세 열이 중복되게 된다.
'김철수'가 컴퓨터학과에서 화학과로 전과를 했다고 하자. (파일 시스템으로 정보들을 처리한다고 가정) 철수가 컴퓨터학과에서 화학과로 정보를 고쳤다. 학생 관리처에서는 모르고 영희의 과를 화학과로 고쳐버렸다. 이렇게 되면 철수의 과는 어느쪽에선 화학과이고 어느쪽에선 컴퓨터학과가 되어버려서 정보의 불일치가 발생해버린다.
DBMS에는 동시성 접근 프로토콜을 가진다. 그러나, 파일 시스템은 이 프로토콜이 없기 때문에 동시성 문제가 생길 수 있다.
파일시스템이 관리하는 정보들은 unstructed data이기 때문에 무결성이 보장되지 않는다.
데이터베이스는 사용자 권한을 설정하여 보안에 안정하다. 반대로 파일 시스템은 보안에 취약하다.
redundancy의 문제를 해결하는 것과 consistency는 데이터베이스의 특징이 아니라 엄밀히 말하자면 관계형 데이터 베이스의 특징이다.
1969년, IBM에 있던 E.F.CODD 박사가 발표한 A Relational Model of Data for Large Shared Data Banks 를 읽어보면 알 수 있다.
이 논문이 나오기 전에 IBM의 제품인 IMS(Information Management System)이 시장을 장악하고 있었는데 파일 시스템과 비슷하게 계층형 구조, 즉 트리 구조로 되어 있었다. 하지만 대용량이 되어 버리면 관리하기가 수월하지 않다. 이 문제를 해결한게 바로 Codd박사의 관계형 모델이다.
그에 따르면 데이터는 프로그램 로직과 관계가 있으면 안되며 파일 시스템처럼 계층 구조가 되어서도 안되고 테이블과 같은 2차원의 형태로 되어야 한다. Codd박사가 주장한 논문에서 핵심은 중복 제거이다.
정규화를 통해 중복을 제거하여 불필요한 데이터를 없앤다. 데이터의 일관성을 향상시켜 정확성과 무결성을 유지한다.