
ERD는 Entity Relationship Diagram의 약자로,
데이터베이스에서 테이블 간의 관계를 시각적으로 표현한 다이어그램입니다. 이 다이어그램을 통해 데이터베이스의 구조를 한눈에 파악할 수 있으며, 테이블 간의 연관성, 주요 필드(컬럼), 그리고 데이터 흐름을 직관적으로 알 수 있습니다.
이 프로젝트의 ERD를 분석하여 각 테이블의 역할과 시스템이 어떻게 설계되어 있는지 살펴보겠습니다.
MEMBER(회원):
DOCUMENT(문서):
PASSPORT(여권):
DRIVER_LICENSE(운전 면허증):
RESIDENT_REGISTRATION_CARD(주민등록증):
SNS(커뮤니티 게시판):
TRAVEL_CERTIFICATE(여행 증명서):
BUSINESS_CARD(명함):
INTERNATIONAL_STUDENT_CARD(국제 학생증):
이 프로젝트는 회원 관리 시스템과 문서(여권, 운전면허증 등) 및 증명서(여행 증명서, 예방 접종 증명서 등)를 관리하는 기능을 포함하고 있습니다. 또한, SNS와 같은 게시판 기능도 포함되어 사용자가 게시글을 작성하고 피드백을 주고받을 수 있습니다. 이를 통해 사용자 정보를 관리하고 다양한 문서를 저장 및 조회하는 시스템을 구축할 수 있습니다.
개발자가 앞서 설명한 정보를 활용하여 프로젝트를 진행할 때,
데이터베이스 설계, API 개발, 비즈니스 로직 구현 등 여러 작업을 효율적으로 할 수 있습니다. 이제 구체적으로 ERD(엔티티 관계 다이어그램)를 어떻게 활용하고, 프로젝트 작업 과정에서 어떤 방식으로 이를 적용할 수 있는지 설명하겠습니다.
ERD는 데이터베이스 설계의 기본입니다.
개발자는 ERD를 보고 테이블 간의 관계를 이해하고,
각 테이블을 데이터베이스에 정확하게 설계하고 구축합니다.
테이블 생성:
각 엔티티(예: MEMBER, DOCUMENT 등)를 데이터베이스 테이블로 생성하고, 속성(컬럼)을 명시한 대로 정의합니다.
CREATE TABLE MEMBER (
MemberID INT PRIMARY KEY AUTO_INCREMENT,
ProfileID INT,
UserName VARCHAR(50),
Password VARCHAR(255),
Name VARCHAR(50),
Nickname VARCHAR(30),
Gender VARCHAR(10),
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
외래 키(Foreign Key) 설정:
테이블 간의 관계를 ERD에서 정의한 대로 설정합니다.
예를 들어, DOCUMENT 테이블과 MEMBER 테이블은 MemberID로 연결됩니다.
CREATE TABLE DOCUMENT (
DocumentID INT PRIMARY KEY AUTO_INCREMENT,
MemberID INT,
PassportID INT,
DriverLicenseID INT,
FOREIGN KEY (MemberID) REFERENCES MEMBER(MemberID)
);
ERD를 참고하여, API의 엔드포인트를 설계할 때 사용됩니다.
어떤 데이터를 받아야 하고, 어떤 데이터를 반환해야 하는지 명확히 정의할 수 있습니다.
회원 가입 및 로그인 API:
MEMBER 테이블에 맞춰, 회원 가입 시 필요한 데이터를 받고 이를 INSERT합니다.
app.post('/register', async (req, res) => {
const { userName, password, name, nickname, gender } = req.body;
const hashedPassword = await bcrypt.hash(password, 10);
const newUser = await db.query(
`INSERT INTO MEMBER (UserName, Password, Name, Nickname, Gender) VALUES (?, ?, ?, ?, ?)`,
[userName, hashedPassword, name, nickname, gender]
);
res.json({ message: "User registered successfully" });
});문서 업로드 및 관리 API:
DOCUMENT 테이블을 기반으로 사용자가 각종 문서(여권, 운전면허증 등)를 등록하거나 조회할 수 있는 API를 개발합니다.
app.get('/documents/:memberId', async (req, res) => {
const { memberId } = req.params;
const documents = await db.query(
`SELECT * FROM DOCUMENT WHERE MemberID = ?`, [memberId]
);
res.json(documents);
});ERD를 보고 비즈니스 로직을 설계하고 구현할 수 있습니다. 테이블 간의 관계를 기반으로 각 엔티티가 어떻게 상호작용하는지를 설계하고, 이를 통해 실제 로직을 구현합니다.
회원 문서 관리:
MEMBER와 DOCUMENT 테이블의 관계를 기반으로,
사용자가 자신의 문서를 업로드하거나 수정할 수 있는 로직을 작성합니다.
SNS 기능 구현:
SNS 테이블과 MEMBER, LIKE, COMMENT 테이블의 관계를 활용하여, 게시글 작성 및 좋아요, 댓글 기능을 구현할 수 있습니다.
ERD를 통해 데이터를 어떻게 주고받는지 파악할 수 있기 때문에, 개발자는 효율적으로 데이터 흐름을 설계할 수 있습니다.
ERD를 보고 테이블 간의 관계를 잘못 정의하면 데이터 중복이 발생할 수 있기 때문에, 정규화를 통해 중복 데이터를 최소화하는 설계를 진행할 수 있습니다.
ERD를 보고 각 필드의 속성(예: VARCHAR, INT)을 정의하여, 데이터의 유효성을 검사할 수 있습니다.
if (typeof userName !== 'string' || userName.length > 50) {
return res.status(400).json({ error: 'Invalid username' });
}이 ERD를 통해 개발자는 프로젝트의 전반적인 데이터베이스 구조를 쉽게 이해할 수 있고, 이를 기반으로 데이터베이스 테이블을 생성하고, API를 개발하며, 비즈니스 로직을 구현할 수 있습니다. 테이블 간의 관계를 정확하게 파악함으로써 효율적인 데이터 흐름을 설계할 수 있으며, 정규화 및 유효성 검사를 통해 데이터의 무결성과 일관성을 유지할 수 있습니다.
