BoardService Github
https://github.com/HSRyuuu/my_first_board
1. 개요
- 프로젝트 명 : Board Service
- 개발 인원 : 1명
- 개발기간 : 2023.04.11 ~ 2023.05.15
- 주요 기능 : 기본적인 게시판의 기능 (아래에서 추가로 설명)
- 사용 기술 : Java, SpringBoot, gradle, thymeleaf, MyBatis (아래에서 추가로 설명)
- 데이터베이스 : H2 Database
2. skills🔨
- Java 11
- SpringBoot 2.7.10
- gradle
- Thymeleaf
- MyBatis
- H2 Database
- HTML5, CSS3, BootStrap
기타 사용 기술
필터(Spring Interceptor)
- 세션 쿠키를 이용하여 로그인 상태인지 확인
- 로그인상태가 아닐 시 게시판 메인 화면, 회원가입, 로그인 페이지 등 접근, 기능 제한
유효성 검사(Spring Bean Validation)
- 모든 사용자 입력 발생 시 Validation 진행
- 유효성 검사 실패 시 해당 페이지에 빨간색으로 오류 메시지 출력 후 수정하여 입력할 수 있도록 함
메시지 / 국제화
- messages.properties / errors.properties 파일을 이용해 메시지 관리
- 국제화 적용 (messages_en.properties, errors_en.properties)
JUnit5
- domain(Member, Post, Comment)에 대하여 CRUD 동작 테스트 진행
3. 요구사항 분석
1) 모든 페이지
모든 페이지에서 공통으로 나타나는 배너를 통해 어디서나 게시판 메인 페이지로 이동할 수 있도록 한다.
2) 회원 가입 페이지
유효성 검사
- 모든 데이터는 NOTNULL로 지정. 빈칸으로 제출 시 "공백일 수 없습니다" 메시지를 출력한다.
- 이메일 형식 패턴 필수 (CHROME 기본 오류메시지 출력)
- 비밀번호, 비밀번호 확인 란의 두 데이터가 일치하는지 확인하고, 불일치 시 "두 비밀번호가 일치하지 않습니다." 메시지 출력
중복 검사
- 데이터베이스에 존재하는 아이디를 제출 시 "이미 존재하는 아이디 입니다." 메시지 출력
3) 로그인 페이지
- 로그인 시에만 이용 가능한 페이지에 접근하려 했다가 로그인 페이지로 이동된 경우 로그인 페이지에 "로그인 시 이용할 수 있는 서비스입니다!" 메시지 추가로 출력
- 로그인 페이지로 강제로 이동되어 로그인 성공 시 원래 왔던 페이지로 즉시 되돌아갈 수 있도록 한다.
로그인을 하지 않은 경우 아래 페이지만 이용 가능
- 회원가입 페이지
- 로그인 페이지
- 회원 가입 후 welcome 페이지
- 게시글 목록 조회 페이지
- 게시글 검색 결과 페이지
- 위의 페이지 이외의 모든 페이지에 로그인 하지 않은 상태로 접근 시 로그인 페이지로 이동
유효성 검사
- 아이디와 비밀번호가 일치하지 않을 시 "아이디 또는 비밀번호가 일치하지 않습니다." 메시지 출력
- 아이디 또는 비밀번호 입력란이 빈칸인채로 제출 시 "비어 있을 수 없습니다." 오류메시지 출력
4) 회원 정보 페이지
회원 정보 수정
- 아이디는 수정 할 수 없음
- 수정 성공 시 "수정 완료" 메시지 추가 출력
비밀번호 수정
- 현재 비밀번호가 맞아야 하고, 변경할 비밀번호와 비밀번호 확인 란의 비밀번호가 일치해야 한다.
유효성 검사
- 회원 정보 수정시, 이메일이 형식에 맞지 않을 경우 오류메시지 출력
- 회원 정보 수정시, 비어있는 칸이 있을 때 "공백일 수 없습니다." 메시지 출력
- 비밀번호 변경 시, "공백일 수 없습니다." 메시지 출력
- 비밀번호 변경 시, 현재 비밀번호가 맞지 않을 경우 "현재 비밀번호가 맞지 않습니다." 메시지 출력
- 비밀번호 변경 시, 변경할 비밀번호와 비밀번호 확인이 일치하지 않을 경우"두 비밀번호가 일치하지 않습니다." 메시지 출력
5) 게시판 메인 페이지
- 최신순으로 정렬될 것
- 게시글 제목 클릭 시 게시글 페이지로 이동할 수 있도록 한다.
- 게시글 작성 24시간 이내에는 작성 시간만, 24시간 이후에는 작성 일자만 표시한다.
로그인 여부
- 로그인 시 우측 상단에 환영 메시지와 회원 프로필 이동 버튼, 로그아웃 버튼 나타남
- 로그인하지 않았을 때는 해당 위치에 회원가입 버튼, 로그인 버튼이 나타남
검색
- 빈칸으로 검색 버튼을 누를 경우 모든 게시글 조회
- 제목 검색 : 제목에 해당 검색어가 포함된 게시글 모두 조회
- 내용 검색 : 내용에 해당 검색어가 포함 된 게시글 모두 조회
- 작성자 검색 : 작성자 ID가 검색어와 정확히 일치할 경우 조회
- 제목+내용 검색 : 제목 또는 내용에 검색어가 포함된 게시글 모두 조회
6) 게시글 관련
- 생성 시간, 수정 시간을 데이터베이스에 기록한다.
- 로그인 이용자가 자기 자신의 게시물을 조회할 경우 조회수가 오르지 않도록 한다.
유효성 검사
- 제목 혹은 내용이 빈칸일 경우 오류메시지 출력
- 수정 시에도 동일하게 적용한다.
- 삭제 시, 비밀번호가 빈칸일 시 오류메시지 출력
- 삭제 시, 비밀번호 불일치 시 "비밀번호가 맞지 않습니다." 메시지 출력
수정, 삭제
- 로그인 이용자가 자기 자신의 게시물을 조회할 경우 수정, 삭제 버튼이 나타나도록 한다.
- 삭제 시 비밀번호를 입력받아, 일치할 경우 삭제 가능하도록 한다.
7) 메시지, 국제화 관련
- 모든 텍스트, 에러 메시지는 messages.properties, errors.properties 파일로 관리한다.
- 영어권 국가에서 접속 시, 게시글 관련 사항을 제외한 모든 텍스트가 영어로 출력될 수 있도록 한다.
4. DB 테이블
Member
Post
Comment
5. API 설계
게시글 관련 API (BoardController, PostController)
회원 관련 API (MemberController)
로그인 관련 API (LoginController)
6. 화면 설계
게시판 관련
더보기
게시판 메인 페이지
(로그인 시)
(비로그인 시)
제목으로 검색
내용으로 검색
작성자로 검색
제목+내용으로 검색
게시글 관련
더보기
글쓰기 페이지
(빈칸 입력 시)
오류 발생 시 오류메시지를 출력한다.
작성 성공 시 게시글 페이지로 이동한다.
게시글 페이지
(글 작성자와 로그인 이용자가 같을 때)
수정, 삭제 버튼이 나타난다.
(글 작성자와 로그인 이용자가 다를 때)
수정, 삭제 버튼이 나타나지 않는다.
게시글 수정
게시글 수정 완료 시 수정된 상태를 반영하여 게시글 상세 페이지로 이동한다.
게시글 삭제
비밀번호를 입력받아, 일치할 시 삭제에 성공한다.
(삭제 버튼 클릭 시)
(빈칸 입력 시)
(비밀번호 오류 시)
삭제 성공 시 게시판 메인화면으로 이동한다.
회원 관련
더보기
회원가입 페이지
회원가입
회원가입 시 유효성 검사 및 아이디 중복 확인, 비밀번호 일치 확인 등을 진행하며, 완료 시 회원 정보 저장 후 welcome page로 이동 후 Home으로 이동 또는 로그인페이지로 이동 중 선택할 수 있다.
로그인 페이지
(유효성 검증 실패 시)
(유효성 검증은 성공했으나, 로그인 실패 시)
로그인 시 게시판 메인 페이지로 이동
로그인 시에만 나타나는 위의 문구와 버튼들로 회원개인 페이지로 이동 또는 로그아웃 가능
회원 개인 페이지
- 내가 쓴 글 버튼 클릭시 게시판에서 회원아이디로 게시글 검색 한 페이지로 이동
- 글쓰기 버튼 클릭 시 글쓰기 화면으로 이동
개인 정보 페이지
비밀번호 변경과 다른 정보 변경은 보안 수준이 다르기 때문에 분리했음.
개인정보 수정 페이지
유효성 검증 실패 시
수정 성공 시
회원 정보 페이지로 redirect 하며, "수정 완료" 텍스트를 추가한다.
비밀번호 변경 페이지
현재 비밀번호가 틀렸을 때
변경할 비밀번호와 확인 칸이 일치하지 않을 때
비밀번호 변경 성공 시 회원 정보 페이지로 이동
로그인 관련
더보기
로그인 버튼 클릭
(로그인 실패 1 : 빈칸 입력 시)
(로그인 실패 2 : 아이디, 비밀번호 오류 발생 시)
로그아웃
로그인 후 게시판 메인화면과, 회원 정보 화면에서 로그아웃 할 수 있다.
로그아웃 요청을 확인하는 팝업 메시지를 항상 출력한다.
댓글 관련
더보기
댓글 작성
댓글 작성 완료
메시지, 국제화 관련
더보기
메시지, 국제화 기능은 일부 적용되지 않은 부분이 있다.
7. 아쉬운 점, 개선할 점
원래 계획은 이 게시판 프로젝트에 점점 새로운 기능을 추가하고, 더 좋은 기술을 적용하여 변경하는 방향으로 점점 발전시켜 나갈 예정이었고, 지금까지도 그렇게 했다. 그러나 지금 이 프로젝트의 디테일에 신경 쓰기보다는 이번에 시작할 부트캠프에서 배우는 내용과 JPA 공부를 더 해서 추후에 새로운 프로젝트를 만들어보는 게 더 낫다고 판단하여 여기서 중단하게 되었다. 따라서 메시지, 국제화 부분은 어느 시점 이후부터 손대지 않았고, 댓글 기능은 댓글 생성 기능만 가능한 상태이다. 만약 이후에 이 프로젝트를 개선해 가는 방향으로 다시 손대게 된다면 댓글 기능도 마저 만들고, 메시지, 국제화 등의 디테일에도 좀 더 신경 쓸 생각이다.
- 댓글 CRUD 완성하기
- 메시지, 국제화 기능
마무리하며..
Java는 대학교 학부과정에서 배웠고 졸업 후에 Spring Framework를 처음 공부하기 시작했다. 여러 강의를 통해 SpringBoot, SpringMVC, DB접근 기술 등을 배우고 배운 내용을 바탕으로 스스로 뭔가를 만들어보면서 복습해 보자는 생각으로 게시판 만들기를 시작했다.
처음엔 멤버, 게시글 CRUD 기능과 메모리 DB만으로 시작해서 점점 로그인, 검증, 메시지 등 여러 가지 기능을 추가해 갔고, 이후 DB접근기술을 공부하며 JdbcTemplate, MyBatis로 DB 연동을 시켜가며 점점 발전시켜나갔다.
이후에 JPA를 배운 뒤 JPA를 적용시켜 이 프로젝트를 좀 더 발전시키려고 했으나, 이번에 부트캠프를 시작하게 되어 이 프로젝트는 여기서 마무리하려고 한다.
이 프로젝트의 80% 이상은 김영한 님의 Spring 로드맵을 공부하여 얻은 지식으로 만들었다.
나머지 20%는 구글링과 Chat GPT 등의 도움을 받아 만들었다.
정말 도움이 많이 된 강의이다.
https://www.inflearn.com/roadmaps/373
반응형
'Projects & Playground' 카테고리의 다른 글
[Java / Playground] Rest API 호출 모듈 만들기 / RestTemplate (0) | 2024.12.15 |
---|---|
[java/Playground] Apache POI 엑셀 파일 다루기 (0) | 2024.09.04 |
[Java/Spring] 백엔드 개발 프로젝트 명세서 (Fitness Record) (1) | 2023.11.19 |