티스토리 뷰
이번에 게시판기능을 만들어볼까 한다.
간단한 게시판을 두개 정도 만들어 보았지만 제대로된 설계없이 무작정 코드를 작성하였다.
그래서 나중에 내가 새로운 것을 공부하고 이를 적용시키려고해도 코드가 너무 뒤죽박죽이기에 적용시키기가 어려웠다. 이런게 소위 말하는 유지보수가 어려운 코드인거 같다.
그래서 이번에는 제대로된 요구사항을 작성하고 DB를 설계한 뒤에 코딩을 진행해볼까 한다.
1. 주제
기본적인 CRUD 기능을 가진 게시판(로그인, 로그아웃, 글쓰기, 댓글)
2. 요구사항
1) 회원가입
회원가입에는 유효성 검사와 중복확인이 필요하다.
- 유효성 검사
- 닉네임은 2~15자이고 특수문자가 들어갈 수 없다.
- 아이디는 영어와 숫자로만 이뤄지고 20자 이하이여야 한다.
- 비밀번호는 한개 이상의 특수문자가 들어가야하고 10~20자 사이여야 한다. 영어 소문자와 숫자로 구성되어야 한다.
- 설정 비밀번호와 확인 비밀번호의 값이 일치해야 한다.
- 위의 값들은 모두 필수입력값이며 입력되지않고 서버로 POST 되었을 때 오류메시지를 보여준다.
- 중복확인
- 아이디와 닉네임은 유니크한 값을 가져야하기 때문에 중복확인이 필요하다.
- 아이디와 닉네임 중복확인이 통과된다면 회원가입을 시켜야한다.
2) 로그인
로그인을 하지않은 사용자에 대해서는 몇몇 페이지에 대해서는 접근을 막을 필요가 있다.
- 로그인을 하지 않은 사용자
- 글의 열람과 검색은 가능
- 회원가입, 로그인 페이지 접근가능
- 위 페이지 말고 다른 페이지로 접근하는 것을 시도할 때는 로그인 페이지로 이동시키기
- 로그인
- 아이디와 비밀번호가 전송되면 DB에 있는 값과 비교하여 일치하는지 확인하고 일치하지 않는다면 오류메시지 보여주기
- 로그인 되었다면 홈 화면으로 이동
3) 회원정보 수정
비밀번호와 닉네임은 수정이 가능하도록 만들기
- 비밀번호를 변경할 때 변경하고자하는 비밀번호와 현재 비밀번호가 동일하다면 변경이 불가능하도록 오류메시지 띄워주기
- 닉네임을 변경할 때 중복확인을 중복이면 오류메시지를 보여주고 통과한다면 닉네임변경
- 비밀번호와 닉네임을 변경할 때 회원가입에 적용된 동일한 유효성 검사 패턴을 사용
4) 게시판 글 작성
- 제목과 내용을 적는 칸에 공백 금지
- 본인이 작성한 글만 수정, 삭제 가능하게 하기
- 조회할 때마다 조회수 1씩 증가
- 글을 수정할 때 수정한 날짜 업데이트
5) 댓글
- 댓글은 로그인한 사용자에 한해서 작성하도록 하기
- 댓글은 공백입력 금지
- 댓글의 삭제는 해당 댓글 작성자만 가능하게 하기
- 어떠한 게시글이 삭제되면 그 게시글에 있는 댓글 목록도 함께 삭제하기
3. DB 설계
- 회원과 게시글은 1:N 관계이다 > 한명의 회원은 여러 게시글을 작성할 수 있기 때문
- 회원과 댓글 또한 1:N 관계이다 > 한명의 회원이 여러 댓글을 작성할 수 있기 때문
- 게시글와 댓글은 1:N 관계이다 > 한개의 게시글에 여러 댓글이 작성될 수 있기 때문
1) Member(회원)
컬럼명 | 조건 | 설명 |
member_id | PK | 고유 값 |
id | not null, unique | 가입 아이디 |
password | not null | 비밀번호 |
nickname | not null, unique | 닉네임 |
create_date | not null | 가입날짜 |
2) Board(게시판)
컬럼명 | 조건 | 설명 |
board_id | PK | 고유 값 |
title | not null | 제목 |
content | not null | 내용 |
writer | not null | 작성자 |
hit | not null | 조회수 |
register_date | not null | 작성일 |
update_date | nullable | 수정일 |
member_id | FK, not null | 회원 고유 값 |
3) Comment(댓글)
컬럼명 | 조건 | 설명 |
comment_id | PK | 고유 값 |
comment | not null | 댓글 내용 |
register_date | not null | 등록 날짜 |
board_id | FK, not null | 게시글 번호 |
member_id | FK, not null | 회원 고유 값 |
4. API 설계
1) 회원 관련 API
기능 | HTTP Method | URL |
회원가입 페이지 이동 | GET | /member |
회원가입 | POST | /member |
로그인 페이지 이동 | GET | /login |
로그인 | POST | /login |
로그아웃 | GET | /logout |
회원정보 수정 페이지 이동 | GET | /member/edit |
회원정보 수정 페이지 | POST | /member/edit |
2) 게시판 관련 API
기능 | HTTP Method | URL |
게시판 전체 글 조회 | GET | /board |
게시판 페이징 글 조회 | GET | /board?page={num} |
게시글 상세보기 | GET | /board/{id} |
게시글 등록 페이지 이동 | GET | /board/new |
게시글 등록 | POST | /board/new |
게시글 수정 페이지 이동 | GET | /board/{id}/edit |
게시글 수정 | POST | /board/{id}/edit |
게시글 삭제 | POST | /board/{id}/delete |
3) 댓글 관련 API
댓글은 AJAX 방식으로 만들 것이다.
기능 | HTTP Method | URL |
댓글 등록 | POST | /comment/{board_id}/{member_id} |
댓글 삭제 | POST | /comment/{board_id}/member_id}/delete |
위에 설계한 내용을 토대로 코드를 작성해 나가겠다.
이전에는 무작정 코드로 작성을 했었는데 이번에는 처음으로 설계(?)라는 것을 해보았다. 내가 만들어야할 것이 눈에 확 보여 굉장히 괜찮은거 같다. 앞으로도 코딩을 하기에 앞서 이런식으로 설계하는 습관을 길러야겠다.
아직 많이 부족합니다. 게시글에 오류나 틀린부분이 있다면 댓글에 언급 부탁드립니다!!
'만들어보자!!' 카테고리의 다른 글
[트러블슈팅] 특정 URL에 대한 스프링 시큐리티 필터체인 무시가 안되는 문제 (0) | 2023.07.11 |
---|---|
[블로그 프로젝트] 스프링에서 제공하는 기본 Cache를 이용해서 반복되는 요청자료를 빠르게 가져오자 (0) | 2023.05.01 |
[블로그프로젝트] - 임시저장기능 만들기 (0) | 2022.11.30 |
[블로그프로젝트] - Fetch Join을 통한 성능 개선 (0) | 2022.11.25 |
게시판 만들기 - Entity 개발 (0) | 2022.09.24 |
- Total
- Today
- Yesterday
- 백엔드#게시판
- 7568
- 프로그래머스
- 1316번
- arraylist
- 회고
- java
- 게시판#자바#JPA#Entity
- 백준#서강근육맨#20300
- querydsl
- 백준
- this()
- springboot
- 11659
- 4673번
- 오류
- 스프링
- 백준#잃어버린 괄호#1541
- 서블릿#Servlet
- 사탕 게임#백준#3085
- controller
- 자바
- 파이썬
- 덧칠하기
- 1978
- Spring
- MVC
- 대충 만든 자판
- HTTP#HTTP특징
- list
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |