간단한 게시판 만들기

전용본·2023년 5월 26일
0

Spring Boot

  • 이제는 많이 익숙해진 Spring boot를 통해 프로젝트를 시작해본다.

  • Spring boot 3.2.1

  • Java 17

  • gradle

  • Local : Macbook Air M1

코드

github/simpleboard

요구사항

  • 도메인
    • 이용자
    • 게시글
    • 댓글
  • 게시글 관리 기능
    • 게시글 등록
    • 게시글 목록 조회
    • 게시글 조회
    • 게시글 삭제
    • 게시글 수정
  • 댓글 관리 기능
    • 댓글 등록
    • 댓글 조회
    • 댓글 삭제
    • 댓글 수정
  • 로그인 기능
    • 로그인 전에는 회원가입, 로그인만 가능
    • 로그인 후에 모든 기능 활성화
  • 배포 전까지는 H2 DB 사용 (추후 다른 DB 연결 예정)
  • 데이터 접근 기술로 기본적인 CRUD는 스프링 데이터 JPA

초기 버전에서는 최소한의 기능만 설계

홈 디자인

  • 부트스트랩의 무료 템플릿을 가져와서 적절히 수정할 예정

구현 - V1

초기 기본 기능 구현

  • 로그인 전 홈화면 : 비로그인 시에는 회원가입, 로그인 기능 외에는 작동하지 않음
  • 회원가입 기능
  • 로그인 기능
  • 로그인 후 홈 화면 : 회원가입 대신 이름이, 로그인 대신 로그아웃 버튼 활성화
  • 게시글 등록 기능
  • 게시글 상세 : 게시글 수정, 삭제 + 댓글 등록 가능
  • 댓글 등록 후에 댓글 수정, 삭제 가능
  • 전체 게시글 조회

구현 - V2

JPA를 통한 참조

  • 기존 엔티티는 JPA를 통한 참조를 구현하지 않았기에 참조 제대로 구현
@Data
@Entity
public class Member extends DateEntity{

    @Id @GeneratedValue
    private Long Id;

    private String name;
    private String loginId;
    private String password;
    private String email;
    private String phoneNumber;
    @Embedded
    private Address address;
	
    ...
}

@Data
@Entity
public class Post extends DateEntity{
    @Id @GeneratedValue
    private Long Id;
    private String title;
    private String content;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "member_id")
    private Member member;
    ...
}

@Entity
@Data
public class Comment extends DateEntity {

    @Id @GeneratedValue
    private Long Id;
    private String content;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "post_id")
    private Post post;
	
    ...
}

페이징

  • 전체 게시글 조회 시 페이징 구현

내 정보

  • 본인 개인정보 및 작성한 게시글 조회 기능 구현

검색 기능

  • Like SQL을 사용해서 제목 검색 기능 추가

구현 - V3

수정, 삭제 버튼 활성화 / 비활성화

  • 기존의 게시글, 댓글 환경은 본인이 작성한 게시글, 댓글이 아니더라도 수정, 삭제 버튼이 활성화되어 있어 누구나 접근이 가능한 상태
  • 현재 로그인되어 있는 유저의 상태를 Session을 통해 확인하여 게시글, 댓글의 작성자와 일치하는지 확인하여 수정, 삭제 버튼 활성화 / 비활성화
<div th:if="${loginMember.getId() == comment.getMember().getId()}">
  • 기존의 ERD에선 Comment와 Member을 매핑하지 않아 Comment의 주인을 알아볼 수 없는 상황이라 ERD를 조금 수정(Member 테이블과 Comment 테이블 일대다 매핑)

  • 'b' 유저가 로그인한 상황에서 'a' 유저가 작성한 게시글과 댓글의 수정, 삭제 버튼이 비활성화
  • 'a' 유저가 로그인한 상황에서 본인이 작성한 게시글과 댓글의 수정, 삭제 버튼이 활성화

관리자 유저 추가

@Getter
@RequiredArgsConstructor
public enum Role {
    GUEST("ROLE_GUEST", "손님"),
    USER("ROLE_USER", "일반 사용자"),
    ADMIN("ROLE_ADMIN", "관리자");

    private final String key;
    private final String title;
}
  • 멤버 엔티티에 들어갈 Role Enum 추가

  • 관리자 아이디로 로그인 시에 모든 게시글, 댓글 수정, 삭제 버튼 활성화

내 정보에서 게시글, 댓글 삭제 기능

게시판 분류 추가

  • 게시판을 공지사항 / 자유게시판 / 질문게시판으로 분류했다.

  • 게시글에 들어가면 어떤 게시판인지 볼 수 있게 태그를 넣었다.

  • 검색 조건이 현재 제목, 게시판 분류 2개이기 때문에 조건이 더 추가된다면 Querydsl을 도입해야 코드 작성에 편할 것 같다.

구현 - V4 (2024/02/08 ~

로그인 검증 & 오류 문구 추가

  • 아이디 또는 비밀번호가 틀려 로그인에 실패했을 경우 오류 메세지 출력
  • 아이디, 비밀번호에 빈칸을 허용하지 않는 정책 도입, 빈칸 입력 시 오류 메세지 출력

게시글 작성 검증 추가

  • 게시판 카테고리, 제목, 내용에 빈칸을 허용하지 않는 정책 도입, 빈칸 입력 시 오류 메세지 출력

댓글 작성 검증 추가

  • 댓글 내용에 빈칸을 허용하지 않는 정책 도입, 빈칸 입력 시 오류 메세지 출력
profile
서강대학교 컴퓨터공학과

0개의 댓글