
컴퓨터에 데이터를 저장하고 이러한 데이터들을 불러오기 위해서는 데이터베이스가 필요하다. 특히 백엔드 개발자는 데이터들을 CRUD하는 등 다양한 비즈니스 로직을 처리하기 위해서는 데이터가 필수적이므로 본격적인 개발에 들어가기에 앞서 '데이터를 어떻게 저장할지를 계획'해야 하는 선행 작업이 필수적이다.
설령 같은 내용의 데이터일지라도 여러 방식으로 데이터가 저장될 수 있고 이러한 테이블 안에 들어 있는 데이터는 모두 각 컬럼당 이름, 데이터 타입, 제약 조건 등의 여러 중요한 특징들을 갖고 있다.
개발자는 본격적인 코드 작성에 앞서 데이터를 어떤 테이블들로 구성할지, 각 테이블은 어떤 컬럼으로 구성할지, 각 컬럼은 어떤 제약조건들로 구성될지를 등을 정해나가야 하는데 이러한 데이터베이스 구성과 관련한 결정들을 해나가는 과정들을 데이터 모델링이라고 한다.
데이터 모델링은 크게 두 가지로 나눌 수 있다.
논리적 모델링: 테이블과 컬럼을 어떻게 나눌지, 테이블 사이의 연결관계를 어떻게 설정할 것인지 등의 '개념적 구조를 정하는 모델링'
물리적 모델링: 실제 컴퓨터에 데이터베이스 구축을 위해 필요한 컬럼의 이름과 데이터 타입 등의 세부사항을 정하는 모델링
데이터 모델: 데이터를 사용하려는 목적에 맞게 체계화해놓은 데이터 모형이다.

데이터를 row(행)과 column(열)로 구성된 테이블로 나누고 각 테이블 사이의 관계를 foregin key로 나타낸 모양이 가장 일반적인 데이터 모형 형태이다.
가장 초기의 데이터는 정해진 구조나 형태가 존재하지 않아 사람이 이해하고 사용하는 데에 큰 어려움이 있을 수 있다. 이러한 정리되지 않은 데이터를 사람이 이해하고 쉽게 사용할 수 있도록 정리하는 과정을 앞서 본 데이터 모델링이라고 할 수 있다.
데이터 모델링을 수행하기 위해서는 데이터를 어떻게 인식하고 저장할 것인지를 이해해야 하고 이를 위해 먼저 알아야만 하는 몇 가지 선행 개념들이 존재한다.
Entity(엔티티): 데이터베이스에 데이터로 저장하고 싶은 대상을 의미한다.
예를 들어 대학교에서 학생 수강 관리 프로그램을 만든다고 가정했을 때 데이터베이스에 수강생, 수업, 담당 교수와 관련한 데이터를 저장한다고 가정하면 수강생, 수업, 교수가 각각 하나의 엔티티를 의미한다.
실제 Entity는 실제 대상 하나하나 즉, 하나의 row 데이터를 의미하고 이러한 엔티티의 집단인 테이블은 Entity Type이라고 지칭해야 되지만 보통 일반적으로 엔티티는 데이터가 저장되어 있는 테이블을 지칭하는 데에 사용된다.
Attribute(속성): Entity에 실제로 저장하려는 내용이다. 테이블에서의 column(컬럼)을 의미한다.
예를 들어 학생 엔티티의 Attribute로는 학번, 이름, 성별, 전공 등이 있을 수 있다.
Constraint(제약 조건): Entity의 각 Attibute와 관련하여 설정한 제약 조건, 규칙들이다.
예를 들어 학생 Entity의 학번 Attribute에는 학번이 무조건 있어야 하고(not null), 다른 학생과 겹치지 않는 고유한 값(unique)를 가져야 한다는 제약 조건 등이 있을 수 있다.
Relationship(관계): 각 Entity들은 서로 연결되어 있는데 이러한 Entity간의 각 연결점을 의미한다.
예를 들어 학생을 수업을 듣고 교수는 강의를 한다. 학생 엔티티와 교수 엔티티는 수업 엔티티를 사이에 두고 연결되어 있는데 이 경우 학생과 교수 두 엔티티가 Relationship(관계)이 있다고 할 수 있다.
데이터 모델링은 프로그램을 개발하고 운영할 때 사용할 데이터를 구축할 기반이 되는 데이터 모델을 만드는 과정이고 이 데이터 모델링이 이루어지기 위해서는 저장하고자 하는 데이터에서 Entity, Attribute, Realtionship, Constraint 등의 정보를 잘 파악해야만 한다.
개념 모델(Conceptual Model): 가장 추상적인 모델로서 attribute는 나타내지 않고 큼지막한 Entity와 연결 관계들만을 표현한 대략적인 구조의 데이터 모델 이다.

논리 모델(Logical Model): 개념 모델보다 구체적인 모델로서 Entity에 더해 attribute, pk, fk가 표현된다.

물리 모델(Physical Model): 데이터 모델 중 가장 구체적인 모델로 실제 데이터베이스를 구축하기 위해 사용되는 모델로 데이터 타입과 변수 이름, 인덱스 등의 정보가 추가된 모델이다.

*본 포스팅의 코드잇의 강의를 참고하였습니다.