당근마켓 ER Diagram (초안)

ik_13038·2022년 8월 21일
0

라이징캠프 3주차

목록 보기
3/6

당근마켓 ER Diagram


아직 버전 초안이고 피드백도 받은 게 아니나 일단 나중에 내가 확인하더라도 아 이걸 보고 작성했구나 알기 위해 임의로 블로그에 작성해본다.

대략적으로 아래처럼 테이블을 제작해보았고 어려운 부분은
FK 관계 설정과 변수 이름 짓는 것, 해당 기능을 테이블로 어떻게 구현할지
정도 고민 사항이 많았다.

그리고 생각보다 당근마켓이 기능을 엄청 추가해서 포기할건 과감히 포기하고
중요 기능 위주로 구현하려고 노력했다.
(ex. 거래매너 등 나중에 발견한 것과 동네게시판 가게 등록, 비지프로필 등)

aqueryltool 이용한 링크
z0nj8r


유저 관련 테이블들

유저 프로필 확인 부분이다.

해당 사항에서 확인할 수 있다고 생각하는 부분에 대해서는 UserTable 내에 다 넣어서 설정했다.
현재 고민 중인 건 해당 User 테이블을 아래처럼 이원화하는 것이다.
UserInfo(당근 App 내 유저정보) / UserLog(계정 관련(개인 정보))

일단 User 동네 테이블은 따로 구현했다. 원래 처음에는 유저 동네가 2개 밖에 설정 안돼서 User 내에 속성으로 구현하려 했는데 그렇게 하더라도 다른 유저들까지 다 각기 설정하면 테이블이 커질 것은 분명하기에 (오히려 유저당 최대 2개니) 따로 분리하였다. 해당 지역이 어디에 속하는지는 아래 지역 위도경도마다 동네를 리스트로 따로 테이블을 저장해서 구현하였다.

현재 생각해볼 점은 지역 위도 경도 범위를 임의로 정해서 동네를 선정하는 것에 대해서이다. 동네가 좌표 조금만 차이나도 구나 동이 달라지는 곳이 많아서..

사용자마다 관심 카테고리 테이블이 있을 것이므로 아래처럼 구현하였다.

당연하겠지만 관심 카테고리에 어떤 항목이 있는지 리스트도 작성해야하므로 아래 테이블을 구현하였다.

이미지는 일단 URL 불러와서 동기화하는 걸로 생각했는데 아이콘 쓰면 생각해보니 굳이 그럴 필요가 있긴 한가 싶다. 일단 예시에는 따로 없었으나 게시물 검색 시 아이콘이 있길래 추가했다.

키워드 알림이다.


유저가 어느 키워드에 관심이 있는지 키워드를 직접 입력하면 관련해서 알림이 뜨도록 하기 위해 구현했다. 지금 보니 동네 알림이 있는데.. 그 당시에는 키워드 테이블에서 만들어 줄 사항은 아니라고 생각하고 넘어갔다.
지금 생각해보면 아마 동네 관련 테이블 내 status를 수정하면 되지 않을까 싶다.


유저 판매 목록이다. 내가 판 게 없어서.. 목록에는 없으나 대충 게시글을 불러오는 걸 알 수 있고 상태를 3가지로 설정할 수 있는 것으로 보였다. 여기에 삭제 등등까지 생각하면 상태 몇 가지는 구현할 코드가 필요하다고 생각 들었다.

일단은 위처럼 구현했다. 아마 게시글 썸네일 사진을 불러올 것 같아 해당 Url과 그 게시물 Pk를 들고와 그 정보를 구현하는 걸로 생각했다.

구매 내역은 다행히 있더라.. 위처럼 게시글을 불러오는 형식으로 판매내역과 유사하다.

그래서 판매목록과 비슷하게 구현했다.

공지사항이다. 이는 그냥 따로 외부 테이블을 만들어서 관리하는 방향으로 만들었다.

글들 목록을 관리하는 테이블이다. 조회수가 위에서는 보이지 않으나 나중에 관리자들 입장에선 유용하게 쓰일 것 같아 속성으로 추가했다.


사용자가 갖고 있는 배지 모음이다. 대표 배지를 설정할 수 있는데 설정하는 배지가 따로 있었다.

일단 어떤 배지가 있는지 보관하는 테이블을 따로 만들고

사용자 별 배지 테이블을 따로 만들어 위 테이블에서 참조하는 식으로 만들었다.

유저 모아보기 기능이다. 본인이 관심 가는 유저를 몇 명 집어서 그 사람들이 올린 게시글을 모아볼 수 있는 기능이다. (상대방은 찜 당했는지 모른다고 한다.)

원래는 많은 속성을 고민했으나 테이블 내 속성 중복이 너무 심해질 것 같아 간단히 누가 찜을 했는지랑 누구를 찜했는지 유저 PK 값만 저장하는 방식으로 테이블을 짰다.


게시판 구현 관련 테이블

특이하게도 당근마켓은 물건 판매 글 말고도 동네 관련 글을 쓸 수 있더라.. 이 점 때문에 이용을 잘하지 않았던 나는 구현하는 거 관련해서 몇 가지 기능을 포기할 수 밖에 없었다.. 저건 일반적인 글쓰기 형식이고 같이 모임해요! 글쓰기 항목도 있었는데 그건 저렇게 일반적인 게시글이 아닌 다른 포맷을 불러와서 작성하는 형식이더라. 뭐 몇 명이 모이면 좋은지, 모임 날짜와 시각은 언제로 할지, 장소는 언제로 할지 만들 수 있던데.. 그냥 핵심 기능만 구현하자 생각하여 넘어갔다.


위는 게시글 주제 분류를 위한 테이블이다. (게시글이 어떤 주제를 로드할 것인지 선택 가능)

사진은 안 올릴 수가 있더라. 그래서 사진 Url은 따로 테이블을 만들어서 불러오는 방향으로 하였다.

그리고 포스트마다 다른 사람들이 따봉 버튼 등 공감 버튼을 클릭할 수 있어서 아래처럼 그 게시글 내 공감 버튼 누른 사람과 어떤 걸 눌렀는지 확인할 수 있는 테이블을 만들었다.


공감 버튼에 여러 항목이 있기에..

아래에서 볼 수 있듯이 그 공감 가짓수를 저장한 테이블도 구현했다.

어.. 댓글도 구현해야하니까

테이블을 만들었다.

댓글에서 대댓글의 경우 보통 한 댓글에서만 허용하게끔 하므로 댓글을 하나 만들면 그 부모 댓글을 참조하는 식으로 만들면 될 것 같다고 생각했다.
대댓글이 없는 댓글은 자기 자신 id를 참조하면 되고 이를 입력한 시간 순서로 배열하면 된다고 생각하였다.


위는 일반적인 잡담 게시판과 다르게 상품을 판다고 올리는 게시글이다.
위 게시글 관련된 테이블을 여러 개 짠 것 같다.
일단 해당 게시글 관련 항목들을 정리한 게시글 일반 테이블
게시글을 누가 조회했는지 관리하는 게시글 조회 테이블
게시글을 누가 관심있어 클릭했는지 확인할 있는 관심 테이블을 만들었다.

1. 해당 상품 판매 게시글 테이블


2. 해당 상품 판매 게시글 사진 목록 테이블
3. 해당 상품 판매 조회수 관리 테이블

설명을 까먹었는데 위 사진에 첫번째에 있는 것은 그 게시물 사진을 관리하는 사진 테이블이다. 상품을 올릴 때는 상품 사진 올리는 게 필수라 그 링크를 NULL 값으로 하면 안될 것 같다.


4. 해당 상품 관련 관심 목록 테이블


채팅 관련 테이블

그리고 당근마켓에서 가장 많은 빌런이 탄생하는.. 채팅 관련 테이블이다.
채팅의 경우 라이징캠프에서 주어진 영상을 참고해서 작성했다.
유저 테이블과 수많은 채팅 테이블들, 그리고 그 가운데에서 연결하는 채팅방 관계 테이블을 만들었다.

위가 채팅방 테이블 아래가 채팅 테이블이다. 당근마켓의 경우 1대1 채팅만 제공되기에 카카오톡 같은 예시와 비교했을 때 그래도 어느 정도 쉽게 구현할 수 있었다.
다만 구매자 입장/ 판매자 입장에서 각각 채팅 내역을 삭제할 수 있어 이를 위해 채팅방 status를 따로 나눠 줄 필요가 있었다.

근데 지금 생각해보니 채팅 이모티콘도 있으니 아마 채팅 이모티콘 테이블도 따로 만들어야하지 않을까 싶다.

profile
글 연습, 정보 수집

0개의 댓글