멋사 프론트엔드 부캠 플러스에 다니게 되었는데, 이번 주에 데이터베이스 모델링을 배웠다. 데이터베이스는 개발 공부에 도움이 될 거라고 생각은 했지만 엄두가 나지 않아 공부하지 못했던 부분이었는데 이 기회로 배울 수 있어서 좋았다. 생소한 부분이라 어렵게 느껴졌지만, 배운 내용들을 정리하면서 차근차근 이해해 보려고 한다. 👩🏻💻
단순히 "Data+base"가 아니라, 정규화된 데이터를 체계적으로 저장하고 관리하는 시스템이다. 특히 중복을 최소화하고 데이터의 일관성을 유지하는 것이 핵심이다.
역할자(액터)들이 모여 특정 목적을 위해 함께 작동하는 구조이며, 각 역할자가 명확한 책임과 기능을 가지는 체계적인 구조이다. 이는 마치 잘 짜인 연극에서 각자의 배역이 있는 것과 같다.
특정 업무나 목표를 달성하기 위한 조직화된 체계이다. 예를 들어, 병원 시스템에서는 접수자, 의사, 간호사, 행정담당자 등이 각자 역할을 맡아 작업한다. 이들은 각자의 업무 영역에서 특정 데이터를 생성하고 활용한다.
업무시스템을 지원하고 의사결정을 돕는 시스템으로, 전체 시스템을 감독하고 통제하는 역할을 한다. 예를 들어, 병원의 경영진이 환자 수, 수익, 비용 등을 분석하여 의사결정을 내리는 것이 관리시스템의 일부라고 볼 수 있다.
그런데 여기서 의문이 들었던 게 이 시스템들이 데이터베이스랑 무슨 관련이 있는 건지 이해가 잘 안됐다. 그래서 데이터베이스와 시스템의 관계를 찾아보았다.
업무시스템과 관리시스템은 모두 다양한 업무와 프로세스를 수행하는 과정에서 데이터를 생성하고, 읽고, 수정하고, 삭제한다(CRUD 작업). 이러한 데이터를 효율적으로 저장하고 관리하는 곳이 바로 데이터 베이스이다.
예를 들어, 병원 시스템에서 접수자가 환자 정보를 입력하면, 그 정보는 데이터베이스의 [환자]테이블에 저장된다. 의사가 진료 기록을 작성하면, 그것은 [진료내역]테이블에 저장된다. 이렇게 시스템의 각 구성원이 생성하는 데이터는 데이터베이스를 통해 체계적으로 저장되고 관리된다.
개념 설계(Concept Design): 시스템 분석을 통해 어떤 데이터가 필요한지 파악한다.
예를 들어, 소모품 관리 시스템에서는 소모품, 구매내역, 배급내역 등의 데이터가 필요하며, 레스토랑 시스템에서는 메뉴, 주문, 회원 등의 데이터가 필요하다. 이러한 데이터 요구사항은 실제 시스템의 운영 방식과 필요한 기능을 분석함으로써 도출된다.
데이터의 흐름은 양방향으로 이루어진다.
☝🏻 데이터 생성 및 저장
업무시스템/관리시스템 ▶︎ 데이터 생성 ▶︎ 데이터베이스에 저장
✌🏻 데이터 조회 및 활용
업무시스템/관리시스템 ◀︎ 데이터 조회 ◀︎ 데이터베이스에서 읽기
소모품 관리 업무시스템의 경우
📍 역할자들: 소모품 담당자, 구매자, 배급자
📍 생성되는 데이터: 소모품 목록 테이블, 구매 내역 테이블, 배급 내역 테이블
📍 각 테이블의 관계: 소모품(1)<->구매내역(N), 소모품(1)<->배급내역(N)
병원 관리 시스템의 경우
📍 역할자들: 접수자, 의사, 행정간호사, 행정담당자
📍 생성되는 데이터: 환자 테이블, 진료 내역 테이블, 처방전 테이블, 입원 내역 테이블, 수납 내역 테이블
📍 각 테이블의 관계: 환자(1)<->진료내역(N), 진료내역(N)<->처방전(N), 환자(1)<->입원내역(N), 진료내역(1)<->수납내역(1)
업무/관리 시스템 설계 -> 데이터베이스 설계
시스템 분석을 통해 필요한 데이터를 식별하고, 그 데이터를 저장할 데이터베이스를 설계한다. 효과적인 시스템 구축을 위해서는 먼저 업무 프로세스를 정확히 이해하고 필요한 데이터 요소를 파악해야 한다.
데이터의 흐름
시스템에서 발생하는 데이터는 데이터베이스에 저장되고, 시스템은 데이터베이스에서 필요한 정보를 불러와 다양한 업무에 활용한다. 이는 데이터 생성부터 활용, 보관, 폐기까지의 전체 생명주기를 관리하는 과정이다.
시스템 기능 구현의 기반
데이터베이스의 구조가 시스템의 기능과 효율성에 직접적인 영향을 미친다. 잘 설계된 데이터베이스는 시스템의 성능과 확장성을 보장하며, 반대로 부실한 데이터베이스 설계는 시스템 전체의 성능 저하와 오류 발생의 원인이 될 수 있다.
즉, 업무시스템과 관리시스템은 "무엇을 할 것인가"의 관점이고, 데이터베이스는 "그 과정에서 필요한 데이터를 어떻게 저장하고 관리할 것인가"의 관점이다. 두 시스템이 원활하게 작동하려면 필요한 모든 데이터가 효율적으로 저장되고 접근 가능해야 하므로, 시스템 설계와 데이터베이스 설계는 밀접하게 연결되어 있다. 마치 신체의 기관과 혈액 순환 시스템이 서로 분리될 수 없는 것처럼, 시스템과 데이터베이스는 함께 작동하며 전체 비즈니스 프로세스를 지원한다.
데이터베이스 구축의 핵심은 모델링 과정이다. 이는 마치 건축가가 건물을 지을 때 설계도를 그리는 것과 같다. 데이터 모델링은 크게 3단계로 진행된다.
ex) 레스토랑 시스템에서 웨이터, 손님, 요리사, 메뉴, 주문, 결제 등의 개체와 행위를 파악하고, 각 개체에 필요한 속성(예: 메뉴의 이름, 가격, 설명)을 식별한다.
ex) 메뉴, 회원, 주문, 결제 등의 테이블 구조를 설계하고, 각 테이블 간의 관계(예: 주문(1)<->주문상세(N))를 정의한다. ERD(Entity-Relationship Diagram)를 통해 이러한 구조를 시각화한다.
ex) MySQL, Oracle, SQL Server 등 특정 DBMS에 맞게 테이블 생성 스크립트를 작성하고, 인덱스를 설정하여 조회 성능을 최적화한다.
데이터베이스를 생성, 관리, 사용할 수 있게 해주는 소프트웨어 시스템이다. 즉, 데이터베이스를 효율적으로 관리하고 사용자가 데이터를 쉽게 저장, 접근 조작할 수 있도록 도와주는 프로그램이다.
관계형 데이터베이스와 통신하기 위한 표준 언어로, 마치 데이터베이스와 대화하는 방법이라고 볼 수 있다. SQL은 크게 세 가지로 나뉜다.
DDL (Data Definition Language): 구조 정의하기
데이터베이스 객체(테이블, 인덱스, 뷰 등)의 구조를 정의하고 변경하는 명령어
CREATE: 새로운 객체 생성ALTER: 기존 객체 구조 변경DROP: 객체 삭제DML (Data Manipulation Language): 데이터 다루기
데이터를 조작(입력, 조회, 수정, 삭제)하는 명령어
SELECT: 데이터 조회INSERT: 새 데이터 추가UPDATE: 기존 데이터 수정DELETE: 데이터 삭제DCL (Data Control Language): 접근 제어하기
데이터베이스 접근 권한을 관리하는 명령어
GRANT: 특정 사용자에게 권한 부여REVOKE: 권한 취소처음에는 데이터베이스가 생소하고 어렵게 느껴졌지만, 이번 기회로 데이터베이스에 다가갈 수 있어서 정말 좋았다. 앞으로 프론트엔드 개발자로서 프로젝트를 진행할 때, 이러한 데이터베이스 지식은 백엔드 개발자와의 효과적인 협업을 위한 중요한 기반이 될 것 같다. 비록 직접 데이터베이스를 설계하고 구현하지 않더라도, API를 통해 어떤 데이터를 어떻게 주고받는지 이해하는 데 큰 도움이 될 것 같다!