데이터를 파일로 관리할 수 있도록 파일을 생성•수정•검색하는 기능을 제공하며, 운영체제와 함께 설치함
파일 시스템은 응용 프로그램별로 필요한 데이터를 별도의 파일로 관리함
파일 시스템은 별도의 구매 비용이 들지 않는다는 장점이 있지만 응용 프로그램마다 파일을 따로 유지하는 특징 때문에 다음과 같은 문제가 발생함
(1) 같은 내용의 데이터가 여러 파일에 중복 저장
파일 시스템은 응용 프로그램별로 파일을 유지하므로 같은 데이터가 여러 파일에 저장될 수 있음 → 데이터 중복성
데이터가 중복되면 저장 공간이 낭비될 뿐 아니라 데이터 일관성(data consistency)과 데이터 무결성(data integrity)을 유지하기 어려움
같은 고객의 연락처가 파일마다 달라 데이터 간 불일치가 발생하므로 결과적으로 데이터 일관성이 유지되지 않음
만약 고객아이디가 영어와 숫자를 섞어 5자 이상이어야 한다는 규약이 있다면 고객아이디가 포함된 파일을 이용하는 모든 응용 프로그램에서 이런 제약 사항을 확인해야 함. 그렇게 하지 않으면 유효하지 않은 고객아이디가 저장된 파일이 존재하여 데이터 무결성, 즉 정확성이 유지되지 못함
이렇게 만은 문제를 야기하는 데이터 중복성을 해결하는 방법으로 아래 그림과 같이 데이터 통합을 생각해볼 수 있음
하지만 데이터 중복 문제가 해결되더라도 파일 시스템에는 다른 문제점들이 아직 남아 있음
(2) 응용 프로그램이 데이터 파일에 종속적임
응용 프로그램은 파일에 직접 접근하여 데이터를 처리해야 하므로 사용하는 파일의 데이터를 구성하는 방법이나 물리적인 저장 구조에 맞게 작성되어야 함
그래서 사용하는 파일의 구조를 변경하면 응용 프로그램도 함께 변경해야 하는데 이러한 특징을 데이터 종속성이라 함
(3) 데이터 파일에 대한 동시 공유, 보안, 회복 기능이 부족함
일반 파일 시스템에서는 응용 프로그램 하나가 사용중 인 파일을 다른 응용 프로그램이 접근하여 사용할 수 있는 동시 공유 기능을 제공하지 않음
물론 같은 내용의 파일을 여러 개 만들어 응용 프로그램마다 제공할 수도 있음
하지만 이렇게 하면 결국 데이터가 중복되기 때문에 더 큰 문제가 발생할 수 있음
파일 시스템에서는 사용자에게 보통 파일 단위로 읽기수정실행권한을 부여하는 방식으로 데이터 접근을 통제함
하지만 데이터 보안에 대한 요구가 더욱 세분화되고 있어 파일 안의 레코드나 필드 같은 더 작은 단위에 대한 접근 통제와 더 구체적인 권한 부여가 가능해야 함
그리고 데이터가 중복된 모든 파일의 보안을 같은 수준으로 유지하기도 움어려움
(4) 응용 프로그램을 개발하기 쉽지 않음
새로운 응용 프로그램을 개발하려면 파일에서 데이터 읽기, 데이터 삽입하기, 기존 데이터 삭제하기 등의 기본적인 데이터 관리 기능을 모두 포함해야 함
2. 데이터베이스 관리 시스템의 정의
파일 시스템이 지닌 모든 문제의 근본 원인은 데이터 중복성과 데이터 종속성으로 요약할 수 있음
앞서 언급했듯이 파일 시스템이 지닌 문제를 해결하는 1차 방안은 데이터를 통합하여 저장하는 것임
하지만 통합 저장 데이터를 관리하고 모든 응용 프로그램이 공통으로 요구하는 데이터에 대한 기본 처리를 담당하면서 동시 공유, 보안, 회복 등의 복잡한 기능을 제공해주는 새로운 무엇이 여전히 필요함
그 대안으로 제시된 것이 바로 데이터베이스 관리 시스템임
DBMS(데이터베이스 관리 시스템: Database Management System)은 파일 시스템의 데이터 중복과 데이터 종속 문제를 해결하기 위해 제시된 소프트웨어임
데이터베이스 관리 시스템은 조직에 필요한 데이터를 데이터베이스에 통합하여 저장하고 이에 대한 관리를 집중적으로 담당함
데이터베이스 관리 시스템은 응용 프로그램을 대신하여 데이터베이스에 들어 있는 데이터를 삽입•수정•검색하고, 모든 응용 프로그램이 데이터베이스를 공유할 수 있게 함
데이터베이스를 생성하고 접근하며 관리하는 일은 데이터베이스 관리 시스템이 모두 담당함
사용자가 직접 또는 응용 프로그램을 통해 원하는 데이터가 무엇이며, 어떤 처리를 원하는지만 데이터베이스 관리 시스템에 요청하면 됨
데이터베이스와 관련된 작업은 데이터베이스 관리 시스템이 수행한 후 그 결과만 응용 프로그램을 통해 사용자에게 전달해주는 것임
사용자나 응용 프로그램은 데이터베이스의 물리적 저장 구조나 데이터 접근 및 처리 방법등을 자세히 알 필요가 없어 부담이 줄어듦
데이터베이스 구조나 접근 방법 등이 변경되어도, 사용자가 미리 알거나 응용 프로그램을 변경할 필요가 없어 데이터 독립성이 확보됨
1) 데이터베이스 관리 시스템이 제공하는 주요 기능
정의 기능
데이터베이스 관리 시스템은 조직에 필요한 데이터를 저장하기 적합한 데이터베이스 구조를 정의하거나, 이미 정의된 구조를 수정할 수 있음
조작 기능
데이터베이스 관리 시스템은 데이터베이스에 저장된 데이터에 접근하여 사용할 수 있는 기능을 제공한다.
사용자 요구에 따라 데이터를 삽입•삭제•수정•검색하는 연산을 효율적으로 처리함
제어 기능
데이터베이스 관리 시스템은 데이터를 여러 사용자가 공유해도 항상 정확하고 안전하게 유지하는 기능을 제공함
데이터베이스 관리 시스템은 데이터를 삽입•삭제•수정하는 연산을 한 후에도 내용이 일관되면서 무결성을 유지하게 하고, 장애가 발생해도 회복이 가능하도록 제어함
그리고 권한이 있는 사용자에게만 데이터 접근을 허용하여 보안이 유지되도록 제어함
특히, 여러 사용자가 데이터베이스에 동시 접근하여 데이터를 처리할 수 있도록 제어함
3. 데이터베이스 관리 시스템의 장단점
1) 데이터베이스 관리 시스템의 장점
(1) 데이터 중복을 통제할 수 있음
데이터베이스에 데이터를 통합하여 관리하므로 데이터 중복 문제를 해결 할 수 있음
또한 효율성 때문에 데이터 중복을 허용하는 경우에도 통제 가능하도록 중복을 최소화하므로 데이터 일관성도 유지할 수 있음
(2) 데이터 독립성이 확보됨
응용프로그램을 대신하여 데이터베이스에 접근하고 이를 관리하는 모든 책임을 지기 때문에 데이터베이스 구조가 변경되어도 응용 프로그램이 영향을 받지 않음
즉, 응용 프로그램과 데이터베이스 사이에 독립성이 확보됨
(3) 데이터를 동시 공유할 수 있음
데이터베이스 관리 시스템은 데이터베이스에 통합된 데이터를 여러 응용 프로그램이 공유하여 같은 데이터에 동시 접근할 수 있도로고 지원함
이는 데이터베이스 관리 시스템이 동일한 데이터를 각 응용 프로그램의 요구에 따라 다양한 구조로 제공해줄 수 있고, 동시 접근을 제어하는 어려운 기술을 보유하고 있어 가능한 일임
그리고 동시 공유를 지원하기 때문에 불필요한 데이터 중복을 제한할 수음있음
(4) 데이터 보안이 향상됨
조직의 중요한 데이터를 여러 응용 프로그램이 사용하기 때문에 데이터 보안은 중요한 문제임
데이터베이스를 이용해 데이터를 중앙 집중식으로 관리하므로 데이터에 대한 효율적인 접근 제어가 가능함
권한이 없는 사용자의 접근, 허용되지 않은 데이터와 연산에 대한 요청을 사전에 차단할 수 있어 철저한 보안을 제공
그리고 사용자별로 접근 가능한 데이터베이스 영역을 제한하거나 접근 수준을 차별화 할 수 있음
(5) 데이터 무력성을 유지할 수 있음
데이터 무결성은 저장된 데이터 값의 정확성(accuracy)를 의미함
예를 들어 학생의 성적이 100점인데 10점으로 잘못 저장하거나 고객의 나이를 음수로 저장했다면 무결성을 위반했다고 할 수 있음
데이터에 대한 관리를 집중적으로 수행하면서 데이터에 대한 연산이 수행될 때마다 유효성을 검사하여 데이터 무결성을 유지할 수 있게 해줌
(6) 표준화할 수 있음
데이터에 대한 모든 접근이 데이터베이스 관리 시스템을 통해 이루어지기 때문에 데이터에 접근하는 방법, 데이터 형식과 구조 등을 표준화하기 쉬움
(7) 장애 발생 시 회복이 가능함
데이터베이스 관리 시스템은 장애가 발생해도 데이터 일관성과 무결성을 유지하면서 데이터를 장애가 발생하기 이전 상태로 복구하는 회복 기능을 지원함
(8) 응용 프로그램 개발 비용이 줄어듦
데이터에 대한 모든 관리를 응용 프로그램 대신 데이터베이스 관리 시스템이 담당하기 때문에 파일 시스템을 사용할 때보다 응용 프로그램 개발 기뵹이 적게 듦
그리고 데이터베이스의 구조가 변경되어도 응용 프로그램은 변경할 필요가 없어 유지 보수비용이 파일 시스템을 사용할 때보다 줄어듦
2) 데이터베이스 관리 시스템의 단점
(1) 비용이 많이 듦
데이터베이스 관리 시스템은 따로 설치해야 하므로 구매 비용이 많이 듦
특히, 동시 사용이 허용되는 사용자 수에 따라 제품 가격도 증가함
데이터베이스 관리 시스템은 복잡하고 다양한 기능을 제공하기 위해 컴퓨터 자원을 많이 사용함
(2) 백업과 회복 방벅이 복잡함
데이터베이스는 데이터양이 많아 구조가 복잡하고, 여러 사용자의 동시 공유를 지원하므로 장애가 발생했을 때 원인과 상태를 정확히 파악하기 어려움
그래서 장애 발생 전에 데이터를 미리 백업해놓고 장애 발생 후 데이터를 원래의 일관된 상태로 회복하는 방법이 복잡할 수 밖에 없음
(3) 중앙 집중 관리로 취약점이 존재함
모든 데이터가 데이터베이스에 통합되어 있고 이에 대한 관리 책임이 데이터베이스 관리 시스템에 집중되어, 데이터베이스나 데이터베이스 관리 시스템에 장애가 발생하면 전체 시스템의 업무 처리가 중단됨
특히, 데이터베이스에 대한 의존도가 높은 시스템일수록 가용성과 신뢴성에 치명적인 영향을 받을 수 있음
데이터베이스 관리 시스틈의 여러 단점에도 불구하고 대량의 데이터는 대게 데이터베이스 관리 시스템을 이용해 처리함
데이터벵스 관리 시스템을 이용함으로써 얻는 이점이 더 많기 때문
비용을 많이 투자할 수 없거나 소수 사용자를 위한 시스템을 개발하는 경우, 데이터 구조나 내용이 자주 변경되지 않는경우에는 데이터베이스 관리 시스템을 사용하지 않는 것이 더 나을 수도 있음
그러므로 업무의 특성, 경제적인 상황 같은 다양한 요소를 고려하여 데이터베이스 관리 시스템의 사용여부를 결정해야
4. 데이터베이스 관리 시스템의 발전 과정
데이터 모델(data model)은 데이터를 데이터베이스에 저장하는 구조를 의미함
1) 1세대 데이터베이스 관리 시스템: 네트워크•계층 DBMS
1960 ~ 1970년대에 사용된 네트워크 DBMS와 계층 DBMS가 1세대에 속함
네트워크 DBMS는 데이터베이스를 노드와 간선을 이용한 그래프 형태로 구성하는 네트워크 데이터 모델을 사용함
위 그림(a)은 네트워크 데이터 모델로 구성한 회사 데이터베이스 구조의 예임
고객은 상품을 주문할 수 있고, 직원은 사움과 고객을 관리하며 부서에 소속되어 있음을 표현하고 있음
실제로는 훨씬 복잡하겠지만 단순화한 그림을 통해 네트워크 DBSM에서 관리하는 데이터베이스의 모습을 이해할 수 있을 것임
네트워크 DBMS는 간선을 이용해 데이터 간의 관계를 표현하기 때문에 데이터베이스의 구조가 복잡하고 변경하기 어렵다는 단점이 있음
대표적인 네트워크 DBMS로는 1960년대 초에 개발된 IDS(Integrated Data Store)가 있음
계층 DBMS는 데이터베이스를 트리 형태로 구성하는 계층 데이터 모델을 사용함
위 그림(b)는 계층 데이터 모델에 따라 구성한 회사 데이터베이스 구조의 예임
계층 DBMS는 네트워크 DBMS보다 구조가 단순함
하지만 복잡한 현실 세계의 모습을 부모 자식 관계까 명확한 트리 형태로 표현하기 힘들고, 구조 변경이 어렵다는 무제가 생김
대표적인 계층 DBMS로는 1960년대 후반에 개발된 IMS(Information Magaterment System)이 있
2) 2세대 데이터베이스 관리 시스템: 관리 DBMS
1980년대 초반부터 계속 사용되어 온 관계 DBMS가 2세대에 속함
관계 DBMS는 데이터베이스를 테이블 형태로 구성하는 관계 데이터 모델을 사용
위의 그림은 관계 데이터 모델에 따라 구성한 회사 데이터베이스의 고객 테이블임
고객 관련 주요 데이터를 테이블 형태로 표현하고 있음
관계 데이터 모델은 데이터베이스를 단순하고 이해하기 쉬운 구조로 구성한다는 장점이 있음
이러한 이유로 관계 데이터 모델을 사용하는 관계 DBMS가 많이 개발되었으며, 이론적인 연구도 많이 이루어졌음
1980년대에는 관계 DBMS가 데이터베이스 관리 시스템의 주류가 되었고, 1990년대에도 기술이 계속 확장되고 성능이 향상되었음
관계 DBMS는 지금도 널리 사용되고 있는데, 대표적인 관계 DBMS는 오라클(Oracle), MS SQL 서버(MS SQL server), 액세스(access), 이포믹스(informix), MySQL 등이 있음
3) 3세대 데이터베이스 관리 시스템: 객체지향•객체관계 DBMS
객체지향 DBMS와 객체관계 DBMS가 3세대에 속함
1980년대 후반에 등장한 객체지향 DBMS는 객체지향 프로그램에서 도입한 객체라는 개념을 이용해 데이터베이스를 구성하는 객체지향 데이터 모델을 사용함
객체지향 DBMS는 더 복잡한 응용분야의 데이터를 관리하려는 사용자 요구를 충족시키기 위해 제안되었음
이 시스템은 새로운 유형의 데이터를 저장하고, 데이터에 대한 복잡한 분석 및 처리를 지원한다. 대표적인 객체지향 DBMS로는 오투, 온투스, 젬스톤 등이 있음
1990년대 후반에 등장한 객체관계 DBMS는 관계 데이터 모델에 객체지향 개념을 도입한 객체관계 데이터 모델을 사용함
일반적으로 단순하고 이해하기 쉬운 구조인 관계 DBMS가 많이 사용됨
하지만 객체 관계 DBMS의 사용도 늘고 있어 2세대와 3세대 DBMS가 공존한다고 볼 수 있음
4) 4세대 이후 데이터베이스 관리 시스템: NoSQL•NewSQL DBMS
객체 지향 DBMS와 객체관계 DBMS가 등장한 뒤에도 대표적인 데이터베이스 관리 시스템은 여전히 관계 DBMS라는 인식이 일반적이었음
대부분의 기업에서는 관계 DBMS의 여러 장점을 그대로 유지하고자 했고, 새롭게 등장한 DBMS로 전환하는데 큰 매력을 느끼지 못했음
그러나 수많은 사람들이 소셜 네트워크 서비스를 폭발적으로 이용하면서 사진, 동영상, 검색 로그와 같은 비정형 데이터가 대량으로 생산되었음
이와 더불어 클라우드 컴퓨팅, 빅데이터의 개념이 등장하면서 관계 DBMS에 대한 확신이 흔들리게 되었음
관계 DBMS는 빠른 속도로 증가하는 대량의 비정형 데이터를 처리하는 데는 비효울적이므로 관계 DBMS는 그대로 유지하면서 CPU나 메모리와 같은 하드웨어 장치의 성능을 향상하는 것만으로는 문제를 해결할 수 없기 때문
이러한 시대적 흐름은 NoSQL DBMS등장을 이끌었음
NoSQL DBMS는 관계 DBMS가 강점으로 제시하던 안정성과 일관성 유지를 위한 복잡한 기능을 포기하고, 데이터 구조를 미리 정해두지 않기 때문에 비정형 데이터를 저장하고 처리하는 데 적합함
그리고 확장성이 뛰어나 여러 대의 서버 컴퓨터에 분산하여 저장하고 처리하는 환경에서 주로 사용함
NoSQL은 1998년 처음 언급되었으나 Not Only SQL, 즉 관계 DBMS를 적용하기 어려운 화경에서 선택할 수 있는 대한으로서의 의미를 가지게 된 것은 2009년 이후부터임
특히 구글, 페이스북, 트위터 같은 SNS를 제공하는 회사들이 NoSQL의 필요성을 강조하면서 더욱 주목받게 되었음
대표적인 NoSQL DBMS는 몽고디비(MongoDB), H베이스(HBase), 카산드라(Cassandra), 레디스(Redis), 네오포제이(Neo4j), 오리엔트db(OrientDB)등이 있음
NoSQL이 많은 장점을 지니고 있음에도 불구하고 관계 DBMS를 온전하게 대신하는 DBMS로 생각하는 사람은 많지 않음
일반 기업들은 관계 DBMS가 제공하는 안정성과 일관성을 여전히 중요하게 평가하고 있고, 각 기업에서 처리하는 데이터 중에 정형 데이터가 차지하는 비율이 높기 때문
따라서 정형 데이터를 정확하게 처리하기 위해서는 기존의 관계 DBMS를 그대로 유지해야 하고, 비정형 데이터를 처리하려면 NoSQL을 추가로 도입해야 하는 부담을 얻게 됨
이 같은 불편함은 NewSQL DBMS의 등장을 이끌었음
2011년에 처음 언급된 NewSQL DBMS는 안정성과 일관성을 유지하면서 SQL을 이용해 다양하고 복잡한 데이터 처리를 편리하게 요청할 수 있음
즉, 관계 DBMS의 장점과 NoSQL의 확장성 및 유연성을 모두 지원함
따라서 정형 및 비정형 데이터를 안정적이고 빠르게 처리할 수 있음
구글 스패너(Spanner), 볼트DB(VoltDB), 누오DB(NuoDB) 등이 대표적임
그렇지만 NewSQL이 관계 DBMS나 NoSQL을 완전히 대신할 것으로 생각한다면 섣부른 판단임
NewSQL은 시장에 진입한지 얼마 되지 않았으므로 앞으로 더 큰 발전이 기대되지만 당분간 관계 DBMS, NoSQL, NewSQL이 상호 보완하면서 공존할 것으로 예상됨
사용자는 저장할 데이터의 형태, 업무 처리 성격 등을 고려해서 적합한 DBMS를 선택하는 것이 중요함
상태 관리는 왜 필요한가?
웹 애플리케이션에서 상태로 분류될 수 있는 것들은 대표적으로 다음과 같은 것이 있습니다.
UI: 기본적으로 웹 애플리케이션에서 상태라 함은 상호 작용이 가능한 모든 요소의 현재 값을 의미합니다. 다크/라이트 모드, 라디오를 비롯한 각종 input, ...
과거 리액트 애플리케이션을 만들 때 Create React App이 각광받았지만 요즘은 서버 사이드 렌더링을 지원하는 Next.js 같은 프레임워크를 사용해 프로젝트를 만드는 것이 큰 인기를 끌고 있습니다.
이에 따라 리액트 개발자라면 리액트뿐만 아니라 서버 사이드 렌더링에 대해서...
Leave a comment