토이프로젝트

[팀프로젝트]모바일앱 게시판 만들기 - 1편 : 설계

  • -
반응형

농실농실이라는 농산물 실거래가 어플을 배포하고(출시기 보러가기) 사용자가 조금씩 늘어나면서 추가/보완할 기능을 고민하다가 게시판을 만들기로 결정했습니다. 그리고 드디어 마무리가 되었습니다.

 

농실농실은 웹/모바일앱 플랫폼을 제공하고 있습니다. 본 포스팅 시리즈를 통해 Flutter를 이용해 개발한 앱의 게시판 기능을 추가한 과정들을 하나씩 소개해보려고 합니다. 운영중인 프로젝트인만큼 전체 코드를 공유하진 못하겠지만 게시판 만들기의 큰 틀은 참고하실 수 있도록 내용을 준비했습니다.

 

이번 포스팅은 총 3개의 챕터로 기획했습니다.

  1. 테이블 설계하기
  2. 로그인/회원가입 개발하기
  3. 게시판 CRUD 개발하기

 

개발 환경과 사용한 기술들은 다음과 같습니다.

  • Spring Boot 2.7.5 / Jdk 1.8
  • Flutter 3.16.5 / Dart 3.2.3
  • MySQL
  • Backend - Spring Security, JWT, JPA
  • Frontend - Dio, Riverpod

개발을 처음 배울 때 대부분 게시판 만들기를 접해보셨을 것이라 생각됩니다. 저 또한 그랬습니다.

농실농실에 추가한 게시판 기능은 기초적인 게시판 만들기의 기능들을 사용했습니다. 회원가입, 로그인, 게시판 CRUD, 댓글, 좋아요 기능을 포함합니다.

 

처음 설계한 테이블은 아래와 같았습니다.

  • 회원 : 회원가입을 통해 생성되는 회원 데이터를 저장합니다.
  • 토큰 : 웹/모바일앱을 지원하기 때문에 JWT 토큰을 발행해 인증을 진행합니다. 발행된 토큰의 정보를 저장합니다.
  • 탈퇴 회원 : 탈퇴시 회원 번호를 등록해두고 일정 기간 후 회원 데이터를 삭제할 수 있도록 합니다.
  • 게시판 : 사용자가 등록한 게시글을 저장합니다.
  • 댓글 : 게시판에 등록된 댓글을 저장합니다.
  • 좋아요 : 게시판에 등록된 좋아요를 저장합니다.

 

각 테이블별로 입력받을 데이터, 타입을 정리했습니다.

 

회원 : USERS
컬럼 타입 PK
회원 번호 BIGINT O
아이디 VARCHAR(30)  
이름 VARCHAR(50)  
도매시장코드 VARCHAR(10)  
법인코드 VARCHAR(10)  
가입일 DATETIME  

 

*회원가입은 편의를 위해 카카오 로그인만 가능하도록 했습니다. 따라서 패스워드는 존재하지 않습니다.

 

토큰 : USERS_TOKEN
컬럼 타입 PK
회원 번호 BIGINT O
액세스 토큰 VARCHAR(256)  
리프레쉬 토큰 VARCHAR(256)  
생성일 DATETIME  

 

*토큰 테이블을 만든 이유는 로그인 챕터에서 설명을 하겠지만 액세스 토큰/리프레시 토큰의 보안을 더하기 위함이었습니다.

 

탈퇴 회원 : WITHDRAW_USERS
컬럼 타입 PK
탈퇴 번호(PK) BIGINT O
회원 번호 BIGINT  
탈퇴일 DATETIME  

 

게시판 : BOARD
컬럼 타입 PK
게시판 번호(PK) BIGINT O
제목 VARCHAR(50)  
내용 TEXT  
도매시장코드 VARHCHAR(10)  
법인코드 VARHCHAR(10)  
작성일 DATETIME  
회원번호 BIGINT  

 

댓글 : BOARD_COMMENTS
컬럼 타입 PK
댓글 번호 BIGINT O
게시판 번호 BIGINT  
부모 댓글 번호 BIGINT  
내용 TEXT  
작성일 DATETIME  
회원 번호 BIGINT  

 

좋아요 : BOARD_LIKES
컬럼 타입 PK
좋아요 번호 BIGINT O
게시판 번호 BIGINT  
생성일 DATETIME  
회원 번호 BIGINT  

 

PK는 자동 생성 전략(auto_increment)을 이용해 생성할 예정입니다. 테이블별 참조되는 회원 번호, 게시판 번호 등 FK는 데이터베이스보다 애플리케이션 레벨에서 관리하는 것을 선호하기에 외래키 설정을 하진 않았습니다.

 

ERDCloud 를 통해 그려본 ERD입니다.

 


다음 편부터 설계한 테이블을 토대로 본격적인 개발을 해보도록 하겠습니다.

본 포스팅은 스터디를 통해 작성하게 되었습니다. 피드백은 언제나 환영입니다 :)

반응형
Contents

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.