HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🧚
[1기]최종 프로젝트 데브코스
/
[팀12] 기부니🧡
[팀12] 기부니🧡
/
🧡
ERD 설계
🧡

ERD 설계

상태
설계
담당자

고민되는 점


[ 회원, 센터 ]
안녕하세요 빅토리 멘토님~ 저희 프로젝트 설계 하다가 고민되는 부분이 있어 질문드립니다! 저희는 일반 사용자와 공공 센터 간 물품, 재능 기부 플랫폼을 계획하고 있는데요. 일반인(회원)과 복지 재단(센터) 간 물품, 재능 기부 공고, 일정 예약 등의 기능이 있습니다. 그리고 센터가 물건이 필요해서 요청하는 게시판인 '기부 받아요'와 회원이 기부하고 싶은 물건을 올리는 '기부 할래요' 게시판이 있습니다. 일단 센터는 사업자 등록 번호 같은 컬럼이 필요하기 때문에 회원과 센터 계정 테이블을 별도로 나누었습니다. 회원, 센터 둘 다 본질적으로는 회원가입 후 로그인해서 서비스를 사용할 수 있는 주체입니다. 게시글에 회원 또는 센터가 댓글을 작성할 때 회원, 센터 엔티티가 각자 다른 테이블에 저장되기 때문에 댓글 작성자의 PK를 저장하는 컬럼에서 이 식별자가 어느 테이블의 식별자인지 구분할 수 없다는 문제가 있었습니다. 그래서 어떤 테이블의 식별자인지 구분하는 필드를 추가해야 할 지, 분리한 도메인에 맞게 연관된 테이블도 더 잘게 분리할 지, 정규화를 포기해서 회원과 센터를 같은 테이블에 저장해서 다루는게 좋을지 고민입니다. 비슷하게 '기부할래요', '기부받아요' 게시판에서 특정 게시글에 대해 센터와 회원이 기부 일정을 잡기 위해 쪽지로 대화를 나눌 수 있는데요. 쪽지로 대화를 나눌 때는 '기부할래요' 또는 '기부받아요' 게시판의 게시글을 참조할 수 있습니다. 그러면 이 '쪽지' 자체를 저장하는 테이블에서도 어떤 게시판의 게시글의 PK를 유지해야 할 것 같은데 어떤 게시판인지 구분하기 위해 별도의 필드를 추가할 지, null 필드를 감수하고 두 게시판을 합칠 지 고민입니다. 회원/센터나 '기부 할래요'/'기부 받아요' 테이블들은 완전히 다르진 않고 많은 부분이 비슷하긴 합니다. 즉, 현재처럼 성격이 다른 도메인을 각각 테이블을 나누어 어느 도메인의 식별자인지 구별해주는 것이 나을지 아니면 성격이 다르다고해도 하나의 테이블로 두고 적용되지 않는 컬럼은 null로 저장해서 앞에서 고민했던 부분을 없앨지 고민이 됩니다.
[ 이미지 업로드 ]
사용자는 게시글 작성, 수정 시 사진을 첨부, 삭제할 수 있습니다. 해당 기능 화면에서는 업로드된 사진에 대해 축소된 사진을 받아서 파일 첨부 UI에서 보여주는데요. 이 때 원본 이미지가 고해상도 이미지라도 CSS 스타일을 적용하여 width, height 를 제한할 경우 클라이언트가 다운받는 리소스의 크기 자체가 줄어드는지, 아니면 원본 이미지를 다운받은 후에 CSS가 크기만 줄여주는 방식인지 궁금합니다. 예를 들어 10MB의 1000 * 1000 이미지가 있고 이를 CSS에서 500 * 500 으로 줄이면 2.5MB 의 500 * 500 이미지가 다운받아지는지, 아니면 10MB의 1000 * 1000 이미지를 다운받고 브라우저가 500 * 500으로 줄여주는 것인지 궁금합니다. 궁극적으로는 사용자가 원본 이미지가 필요하지 않은 상황에서도 이를 다운받지 않도록 하기 위함입니다.
 
notion image
 
ERD 설계 목록
도메인(테이블) 이름
컬럼(속성) 이름
컬럼 타입(자료형)
컬럼 널 허용 여부(nullable)
컬럼 유일성 여부(unique)
일반 회원: member
식별자 : id
bigint
false
true
이메일 : email
varchar(256)
false
true
닉네임 : nickname
varchar(64)
false
true
비밀번호 : password
varchar(128)
false
false
주소: address
varchar(128)
false
false
전화번호: contact
varchar(16)
false
false ?
프로필 사진 : url
varchar(512)
true
false
가입일 : created_at
timestamp
false
false
수정일 : updated_at
timestamp
자기소개 : introduction
varchar(300)
default = '자기소개 없음'
false
일반 회원 기부글 '기부할래요': donation_board
식별자 : id
bigint
false
true
기부글 제목 : title
varchar(256)
false
false
기부글 내용 : content
text
false
false
기부글 카테고리 : category
varchar(64)
false
false
기부 물품 상태 : quality
varchar(32)
false
false
게시글 생성일 : created_at
timestamp
false
false
게시글 수정일 : updated_at
timestamp
false
false
기부 진행 상태 : status
varchar(64)
false
false
(foreign key)
기부글 작성자 식별자 : member_id
bigint
false
false
'기부할래요' 첨부 이미지: donation_image
이미지 식별자 : id
bigint
false
true
기부글 식별자 : donation_id
bigint
false
false
첨부 이미지 정적 리소스 링크 : url
varchar(512)
false
false
'기부할래요' 전용 태그: donation_tag
태그 식별자 : id
bigint
false
true
태그 이름 : name
varchar(32)
false
true
'기부할래요' 전용 태그 맵핑: donation_have_tag
맵핑 식별자 : id
bigint
false
true
(fk)
태그 레코드 식별자 : tag_id
bigint
false
false
(fk)
기부글 레코드 식별자 : donation_id
bigint
false
false
'기부할래요' 댓글: donation_comment
댓글 식별자 : id
bigint
false
true
댓글 내용 : content
varchar(512)
false
false
게시글 식별자 : donation_id
bigint
false
false
작성자 식별자: center_id
bigint
false
false
댓글 생성 시각: created_at
timestamp
false
false
댓글 수정 시각: updated_at
timestamp
false
false
관심 센터 : favorite_center
맵핑 식별자: id
bigint
false
true
관심센터 생성일 : created_at
timestamp
false
false
(foreign key)
회원 식별자: member_id
bigint
false
false
(foreign key)
센터 식별자: center_id
bigint
false
false
센터: center
센터 식별자 : id
bigint
false
true
이메일: email
varchar(256)
false
true
비밀번호: password
varchar(128)
false
false
센터 이름: name
varchar(128)
false
true
센터 전화번호: contact
varchar(16)
false
true
센터 위치: address
varchar(128)
false
true
사업자이름 : owner
varchar(32)
false
false
가입일 : created_at
timestamp
false
false
수정일 : updated_at
timestamp
자기소개 : introduction
varchar(300)
default = '자기소개 없음'
false
사업자등록번호: registration_code
varchar(16)
false
true
센터 기부 요청글 '기부받아요' : wish_board
식별자 : id
bigint
false
true
게시글 제목 : title
varchar(256)
false
false
게시글 내용 : content
text
false
false
게시글 카테고리 : category
varchar(64)
false
false
게시글 생성일 : created_at
timestamp
false
false
게시글 수정일 : updated_at
timestamp
false
false
기부 상태 : status
varchar(64)
false
false
(foreign key)
게시글 작성자 식별자: center_id
bigint
false
false
'기부받아요' 첨부 이미지: wish_image
이미지 식별자 : id
bigint
false
true
정적 리소스 URL : url
varchar(512)
false
false
게시글 식별자 : wish_id
bigint
false
false
'기부받아요' 전용 태그: wish_tag
태그 식별자 : id
bigint
false
true
태그 이름: tag_name
varchar(32)
false
true
'기부받아요' 전용 태그 맵핑: wish_have_tag
맵핑 식별자 : id
bigint
false
true
게시글 식별자: wish_id
bigint
false
false
태그 식별자: tag_id
bigint
false
false
'기부받아요' 댓글: wish_comment
댓글 식별자 : id
bigint
false
true
댓글 내용 : content
varchar(512)
false
false
게시글 식별자 : wish_id
bigint
false
false
(foreign key)
작성자 식별자 : member_id
bigint
false
false
댓글 생성 시각: created_at
timestamp
false
false
댓글 수정 시각: updated_at
timestamp
false
false
쪽지 : message_contract 🚨🚨🚨
쪽지 식별자: id
bigint
false
true
쪽지 날짜 : date
(foreign key)
받는 이 : receiver_id
bigint
false
false
받는 이 타입 : receiver_type
(foreign key)
보내는 이 : sender_id
bigint
false
false
보내는 이 타입 : sender_type
(foreign key)
게시글 : post_id
bigint
false
false
게시글 타입 : post_type
예약 상태 : status (ing/yes/no)
varchar(32)
false
false
쪽지 타입 : type (message/contract)
varchar(32)
false
false
쪽지 생성일 : created_at
timestamp
false
false
쪽지 수정일 : updated_at
timestamp
false
false
활동 게시판 : activity_board
게시글 식별자: id
bigint
false
true
활동 타입 : activity_type(활동후기/공지)
varchar(??)
false
false
게시글 제목: title
varchar(256)
false
false
게시글 내용: content
text
false
false
게시글 작성자 식별자 : center
bigint
false
false
게시글 생성일 : created_at
timestamp
false
false
게시글 수정일 : updated_at
timestamp
false
false
활동 게시판 이미지 : activity_board_images
이미지 식별자 : id
bigint
false
true
게시글 식별자 : activity_id
bigint
false
false
이미지 리소스 url : url
varchar(512)
false
false
활동 게시판 댓글 : activity_board_comments
댓글 식별자 : id
bigint
false
true
댓글 내용 : comment
varchar(512)
false
false
게시글 식별자 : activity_id
bigint
false
false
댓글 작성자 식별자 : commentor_id
bigint
false
false
댓글 작성자 타입 : commentor_type
varchar(??)
false
false
댓글 작성 시각 : created_at
timestamp
false
false
댓글 수정 시각 : updated_at
timestamp
false
false
이메일 인증코드 : email_code
이메일 인증코드 식별자 : id
bigint
false
true
수신 이메일 : email
varchar(256)
false
true
이메일 인증코드 : email_code
varchar(6)
false
false