EduClass Project

[Project] (1) 프로젝트 시작(플로우차트, Entity 설계)

sagecode 2025. 1. 23. 18:51

예전에 부트캠프에서 spring으로 CRUD를 구현해 본 경험이 있다.

 

그 때는 팀 프로젝트로 진행을 하기도 했고, 학원에서 주는 템플릿으로 디렉토리, 서버, 플로우차트 등 제작을 하였어서 내가 코드를 작성하는 이유를 잘 모르는 상태로 프로젝트를 진행했었다.

 

그래서 처음으로 개인 프로젝트를 시작하게 되면서 내가 어떤 방법으로 하나의 프로덕트를 만들기 위해서 공부할 과정을 적어보려고 한다.


📍 주제 선정

나는 처음에 프로젝트 주제를 생각하다 예전에 내가 다닌 대학교 온라인캠퍼스 홈페이지를 클론코딩했던 경험이 있다. 그 땐, 프론트엔드로 개발공부를 하던 시절이라 html, css, js 정도로 구현을 하였다. 근데 그 페이지를 만드는 과정에서 나중에 백엔드를 공부하여 데이터가 움직이고 기능을 구현하는 것까지 더 완성해보고 싶다는 생각이 들었다.

 

그래서 나는 학생이 강의를 듣고 테스트를 받고, 관리자가 문제를 내며, 학부모가 학생의 강의 상황과 테스트 점수를 열람할 수 있는 서비스를 만들어 보겠다고 생각이 들었다.

 

📍 기능 플로우차트

이제 내가 만들 서비스가 어떤 기능이 있을지를 생각해보다가 메인페이지부터 어떤페이지가 나오는지를 생각했다.

당연하게도 다른 여러가지 기능들이 많이 필요하다. 하지만 일단 가장 큰 틀을 구현을 한 다음 좀 더 살을 붙여나가기로 했다.

  • 메인 페이지

메인페이지에서는 특별한 기능이 없이 이 서비스를 나타낼 수 있는 배너와 로그인 버튼만 존재한다.

  • 학생 페이지

학생은 로그인을 한 후 강의 리스트업 페이지로 가게 된다. 강의를 선택하면 강의페이지로 이동하고, 시험도 응시할 수 있다.

또한, 시험 점수를 확인할 수 있다.

  • 학부모 페이지

학생의 강의 진행상황과 점수를 확인할 수 있다.

  • 관리자 페이지

단원 당 강의리스트 편집이 가능하다. 또한, 문제 은행의 문제를 편집이 가능하며, 학생마다 갖고 있는 강의 등을 열람하고 수정할 수 있다.

 

그럼 이런 기능들을 만들기 위해 어떤 데이터와 클래스가 필요할까? 그런것을 결정하는 것이 ERD 이다.

📍 ERD란?

ERD는 Entity Relation Diagram의 약자로 개체-관계모델, 테이블간의 관계를 설명해주는 다이어그램이다. ERD를 통해 서비스에 사용되는 DB의 구조를 한눈에 파악할 수 있다.

  • Entity(개체)

Entity는 테이블을 구성하는 객체 구성성분을 의미한다. 예를 들어, 내가 만들 온라인 학습 서비스에 user가 될 '학생', 그 서비스에서 이용될 '강의', '문제' 등도 모두 Entity라고 할 수 있다.

  • Entity Attribute(속성)

Entity Attribute는 Entity를 구성하는 속성을 의미한다. '학생'의 속성값은 id, name, pw, grade 등이 있을 수 있다.

  • Relationship(관계)

Entity간의 관계를 표현한다. 1:N, N:1, N:M 의 관계를 파악해야 한다.

이 때, 여러가지 기호들로 관계를 표현할 수 있는데 IE 표기법을 많이 사용한다.

IE 표기법

📍 ERD 관계 표기법

Entity를 만들었다면 각 Entity끼리 관계아 있는 경우 선을 이어 관계를 맺어야 한다. 두 Entity 관계에서 부모의 key를 자식의 PK로 사용하는지 아니면 일반 속성으로 사용하는지에 따라서 관계가 나뉜다.

  • 식별자 관계

부모 Entity의 주 식별자를 자식 Entity의 주 식별자로 이용한다.

예시를 들어보자. 프로젝트에서 각 "강의"는 "시험"을 한 개씩만 가질 수 있고, "시험"은 "강의"가 존재하지 않으면 존재할 수 없다.

또한, "강의"와 "시험"은 식별자 관계이므로, 실선으로 연결하고 One(and only one)을 사용한다.

Lecture의 id가 "강의"의 주 식별자이고 그 식별자를 "시험"에서 FK로 사용한다. 이로 인해 "시험"은 "강의"에 종속되어 사용할 수 밖에 없다.

 

  • 비식별자 관계

부모 Entity의 주 식별자를 자식 Entity에 외래 키로 사용하지만, 자식 Entity는 부모 Entity 식별자에 의존하지 않고 독립적인 주 식별자를 가진다. 이로 인해 자식 엔터티는 부모 엔터티와 연결은 되어 있지만, 부모 없이도 고유하게 존재할 수 있다.

이에 대한 예시는, "시험"과 "문제지"가 있다. "문제지"는 특정 "시험"에 대해 학생들에게 개별적으로 생성되며, 각 문제지는 시험과 연결되지만 독립적으로 고유 ID 갖는다. 또한, "문제지"는 "시험"이 삭제되더라도 존재한다.

또한, "시험"과 "문제지"는 비식별자 관계이므로, 점선으로 연결하고 부모 Entity쪽은 필수, 자식 Entity쪽은 선택인 zero or many를 사용한다.

 

다음 글에서는 서비스에서 사용하는 총 Entity와 관계를 설명하고, 필요한 메소드 구현을 해보겠다.