신입 백엔드 포트폴리오 만들기 - 프로젝트 명세서
by coco3o취업을 위한 개인 포트폴리오를 만들어보려고 한다.
우선 먼저 생각해야 할 것은 프로젝트 명세서를 작성해 보는 것이다.
고민해본 프로젝트 명세서는 다음과 같다.
1. 아이템 선정
2. 개요
3. 요구사항 분석
4. DB 설계
5. API 설계
6. 화면 설계서
7. 개발 및 테스트
8. 배포
9. 도메인 설정
10. ReadMe 및 포트폴리오 ( 자소서 ) 작성
11. 회고
1. 아이템 선정
전반적인 웹의 기본 소양이 되는 CRUD 게시판을 만들고, 기능을 하나씩 추가해 나가는 식으로 진행한다.
2. 개요
- 프로젝트 명칭 : Board Service
- 개발 인원 : 1명
- 개발 기간 : 2021.11.10 ~ 2022.01.10
- 주요 기능 :
- 게시판 - CRUD 기능, 조회수, 페이징 및 검색 처리
- 사용자 - Security 회원가입 및 로그인, OAuth 2.0 구글, 네이버 로그인, 회원 정보 수정, 유효성 검사 및 중복 검사
- 댓글 - CRUD 기능
- 개발 언어 : Java 11
- 개발 환경 : SpringBoot 2.5.6, gradle 7.2, jpa(Spring Data JPA), Spring Security, Oauth 2.0, mustache
- 데이터베이스 : MySQL
- 형상관리 툴 : GitHub
- 간단 소개 : 전반적인 웹의 기본 소양이 되는 게시판
3. 요구사항 분석
1. 회원 가입 페이지
- 유효성 검사
- 닉네임은 최소 2~10자이며, 특수문자를 제외한 한글 (ㄱ~ㅎ, 가~힣), 알파벳 대소문자(a~z, A~Z), 숫자(0~9)로 구성
- 이메일 형식 패턴 적용해 확인
- 한 개의 칸이라도 공백 혹은 빈칸이 있는지 확인하고 있다면, "OOO는 필수 입력 값입니다."의 메시지 보여주기
- 비밀번호는 최소 8~16자 이상이며, 영문 대 소문자, 숫자, 특수문자를 사용하게 하기
- 중복확인
- 데이터베이스에 존재하는 아이디를 입력한 채 회원가입 버튼을 누른 경우 "이미 사용중인 아이디입니다."의 메시지를 보여주기
- 데이터베이스에 존재하는 이메일을 입력한 채 회원가입 버튼을 누른 경우 "이미 사용중인 이메일입니다."의 메시지를 보여주기
- 데이터베이스에 존재하는 닉네임을 입력한 채 회원가입 버튼을 누른 경우 "이미 사용중인 닉네임입니다."의 메시지를 보여주기
- 모든 검사가 통과되었다면 로그인 페이지로 이동시키기
2. 로그인 페이지
- 로그인을 하지 않은 경우 아래 페이지만 이용가능
- 회원가입 페이지
- 로그인 페이지
- 게시글 목록 조회 페이지
- 게시글 상세보기 페이지
- 게시글 검색 페이지
- 그 외 로그인을 하지 않거나 올바르지 않은 경로로 접속한 사용자가 로그인이 필요한 경로에 접속한 경우 로그인 페이지로 이동
- 로그인 검사
- 아이디와 비밀번호가 일치하지 않을 시 "아이디 또는 비밀번호가 일치하지 않습니다. "의 메시지를 보여주기
- 이외의 다른 에러 메시지 또한 처리하기
- 모든 검사가 통과되었다면 로그인 후 index 페이지로 이동시키기
3. 회원정보 수정
- 회원정보 수정은 닉네임, 비밀번호만 가능
- 수정란이 빈칸 혹은 공백으로 된 경우 “공백 또는 입력하지 않은 부분이 있습니다.”의 메시지 보여주기
- 닉네임이 중복확인을 통해 중복일 경우 “이미 사용중인 닉네임입니다.” 메시지 보여주기
- 닉네임은 최소 2~10자이며, 특수문자를 제외한 한글 (ㄱ~ㅎ, 가~힣), 알파벳 대소문자(a~z, A~Z), 숫자(0~9)만 가능
- 비밀번호 수정 또한 최소 8자~16자이며, 영문 대 소문자, 숫자, 특수문자를 사용하게 하기
- 수정 완료 시 수정 날짜 업데이트해주기
4. 소셜 로그인 기능 만들기
- 구글, 네이버 로그인이 가능하도록 하기
- 데이터베이스에 이미 존재하는 이메일이 있을 시 기존 회원 데이터 정보를 유지하기
- 소셜 로그인 사용자도 닉네임, 비밀번호 설정이 가능하고, 일반 로그인도 가능하게 하기
5. 게시글 검사
- 게시글 작성, 수정 시 제목과 내용은 공백 혹은 빈칸으로 작성하지 않도록 하기
- 내가 작성한 글만 수정, 삭제 가능하게 하기
- 로그인을 하지 않고 글 작성 버튼을 누른 경우 로그인 페이지로 이동
6. 댓글 검사
- 댓글은 로그인한 사용자만 작성 가능하게 하기
- 댓글 작성 및 수정시 빈칸 혹은 공백으로 된 경우 “공백 또는 입력하지 않은 부분이 있습니다”의 메시지 보여주기
- 댓글 수정 및 삭제는 해당 댓글 작성자만 가능하게 하기
- 게시글 삭제 시 해당 댓글 데이터도 같이 삭제되게 하기
4. DB 설계
created_date와 modified_date는 날짜 포맷을 적용해주어 datetime > varchar로 변경
5. API 설계
6. 와이어프레임 ( 화면 설계서 )
게시글 관련
1. 게시글 전체 목록
전체 목록을 페이징 처리하여 조회할 수 있다.
2. 게시글 등록
로그인한 사용자만 새로운 글을 작성할 수 있고, 작성 후 목록 화면으로 redirect 한다.
3. 게시글 상세보기
본인이 작성한 글만 수정 및 삭제가 가능하다.
4. 게시글 수정 화면
제목과 내용만 수정할 수 있고 수정 여부를 확인 후 상세보기 화면으로 redirect 한다.
5. 게시글 삭제 화면
삭제 후 전체 리스트 화면으로 redirect 한다.
6. 게시글 검색 화면
검색 키워드에 포함된 글을 모두 보여준다.
검색된 게시글이 많을 경우 다음과 같이 페이징 처리되어 조회할 수 있다.
회원 관련
1. 회원가입 화면
회원가입 시 유효성 검사 및 중복확인을 진행하며 완료 시 회원 정보를 저장하고 로그인 화면으로 이동시킨다.
2. 로그인 화면
로그인 실패 시 어떤 이유로 실패했는지 메시지가 나오고, 로그인에 성공하면 게시글 전체 리스트 화면으로 redirect 한다.
2-1. OAuth 2.0 소셜 로그인 화면
3. 회원정보 수정 화면
닉네임과 비밀번호만 변경할 수 있고, 변경된 닉네임이 중복될 경우 현재 사용 중임을 알려주고
완료 시 게시글 전체 리스트 화면으로 redirect 한다.
3. 댓글 관련
1. 댓글 작성 화면
댓글은 로그인 한 사용자만 달 수 있으며, 댓글 작성 완료시 현재 페이지를 reload 한다.
2. 댓글 수정
댓글 수정은 작성자만이 할 수 있다.
수정 완료 후 현재 페이지를 reload 한다.
3. 댓글 삭제
댓글 삭제 또한 댓글 작성자만이 할 수 있다.
7. 개발 내용
- 게시판 CRUD 작성 후부터 블로그에 기록했기 때문에 해당 부분은 생략하겠다. (아래 깃허브 코드 참고)
- Spring Boot JPA 게시판 조회수 기능 추가
- Spring Boot JPA 게시판 페이징 처리 구현
- Spring Boot JPA 게시판 검색 기능 & 검색 페이징 구현
- Spring Boot JPA 게시판 LocalDateTime format 변경하기
- Spring Boot JPA 게시판 Security 회원가입,로그인 구현
- Mustache CSRF 적용 및 문제해결
- 커스텀 어노테이션을 통해 중복코드 개선
- Spring Boot 회원가입 Validation 유효성 검사하기
- Spring Boot 게시판 Validation을 커스텀하여 회원가입 중복검사 구현
- Spring Boot 게시판 Security 로그인 실패시 메시지 출력하기
- Spring Boot 게시판 Security 회원정보 수정(ajax) 구현
- Spring Boot 게시판 OAuth 2.0 구글 로그인 구현
- Spring Boot 게시판 OAuth 2.0 네이버 로그인 구현
- Spring Boot 게시판 JPA 연관관계 매핑으로 글 작성자만 수정,삭제 가능하게 하기
- Spring Boot JPA 게시판 댓글 작성 및 조회 구현하기
- 양방향 순환참조 문제 및 해결방법
- Spring Boot JPA 게시판 댓글 수정 및 삭제 구현하기
- Spring Boot JPA 게시판 댓글 작성자만 수정,삭제 가능하게 하기
- [리팩토링]DTO Inner Class로 한번에 관리하기
프로젝트 주소 : https://github.com/hojunnnnn/board
'📌ETC > Development Log' 카테고리의 다른 글
Spring Boot JPA 게시판 Security 회원가입,로그인 구현 (5) | 2021.12.13 |
---|---|
Spring Boot JPA 게시판 LocalDateTime format 변경하기 (0) | 2021.12.02 |
Spring Boot JPA 게시판 검색 기능 & 검색 페이징 구현 (3) | 2021.11.25 |
Spring Boot JPA 게시판 페이징 처리 구현 (0) | 2021.11.23 |
Spring Boot JPA 게시판 조회수 기능 추가 (7) | 2021.11.20 |
블로그의 정보
슬기로운 개발생활
coco3o