[팀프로젝트]모바일앱 게시판 만들기 - 1편 : 설계
농실농실이라는 농산물 실거래가 어플을 배포하고(출시기 보러가기) 사용자가 조금씩 늘어나면서 추가/보완할 기능을 고민하다가 게시판을 만들기로 결정했습니다. 그리고 드디어 마무리가 되었습니다.
농실농실은 웹/모바일앱 플랫폼을 제공하고 있습니다. 본 포스팅 시리즈를 통해 Flutter를 이용해 개발한 앱의 게시판 기능을 추가한 과정들을 하나씩 소개해보려고 합니다. 운영중인 프로젝트인만큼 전체 코드를 공유하진 못하겠지만 게시판 만들기의 큰 틀은 참고하실 수 있도록 내용을 준비했습니다.
이번 포스팅은 총 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입니다.
다음 편부터 설계한 테이블을 토대로 본격적인 개발을 해보도록 하겠습니다.
본 포스팅은 스터디를 통해 작성하게 되었습니다. 피드백은 언제나 환영입니다 :)