⚡ Spring Boot + Spring Data JPA를 이용한 프로젝트입니다.
⚡ 익명성을 보장해 주는 작은 게시판 웹 서비스입니다.
⚡ 누구나 어떠한 조건과 제한 없이 게시글과 댓글을 작성, 수정, 삭제 가능하며 여러 조건을 통한 게시글과 관련된 검색 기능을 지원합니다.
09/7/23 ~ 09/19/23
| Name | GitHub Address |
|---|---|
| 🧸조성민 | https://github.com/EnjoyTime18 |
- 📋 게시글 CRUD – 조회, 글 상세보기 및 페이징 기능
- 📋 게시글 CRUD – 등록, 수정, 삭제 기능
- 🔎 게시글 CRUD – 복합 검색 기능
- 📋 댓글 CRUD – 조회, 등록 기능
- 📋 댓글 CRUD – 수정, 삭제 기능
- 🤕 Trouble Shooting
- 게시글 리스트를 페이지별로 나누어서 보여주기 위해 한 페이지의 보여줄 게시물의 갯수를 10개로 조정하고 오름차순으로 정렬 및 페이지 이동 기능을 JPA Pageable를 활용하여 구현했습니다.
- 게시글의 제목 링크를 걸어 클릭 시 해당 게시글을 상세하게 정보 확인 및 수정, 삭제, 댓글 기능을 사용할 수 있습니다.
- 게시글 CRUD 관련 개발 요소 모두 Spring Data JPA를 활용하여 구현했습니다.
- 회원가입/로그인 기능은 익명 게시판이기 때문에 비밀번호 기능으로 대체하였습니다. 비밀번호는 게시글 CUD(등록, 수정, 삭제)시 사용됩니다.
- 극단적인 현재의 익명 게시판은 보안에 매우 취약하다 생각하여 향후 Spring Security를 학습해 현 비밀번호 기능에서 회원가입/로그인 기능으로 변경하여 보안성을 늘려 보완할 생각입니다.
- 메인 페이지에서 여러 조건의 게시글 복합 검색을 할 수 있도록 JPA Specification을 활용하여 복합 검색 처리를 구현했습니다.
- 게시글 상세보기 페이지에서 댓글을 등록 및 조회가 가능하며 모두 Axios 비동기 라이브러리 통신으로 구현하였습니다.
- 댓글 CRUD 관련 개발 요소 모두 Spring Data JPA를 활용하여 구현했습니다.
- 게시글 상세보기 페이지에서 댓글을 수정 및 삭제 이 가능하며 모두 동기 방식으로 구현했습니다.
- 현재 수정, 삭제 기능이 페이지 이동의 동기 방식으로 개발을 하였지만 향후 댓글 조회, 등록 기능에 맞추어 현 동기 방식 -> Axios 비동기 라이브러리 통신으로 모달창을 띄우며 개발 보완을 할 생각입니다.
🚨 Reply Entity에 CascadeType.REMOVE가 적용되어 있기 때문에 Reply를 삭제할 때 연관된 Board가 삭제되려고
하는 문제점 발생 @ManyToOne(targetEntity = Board.class, cascade = CascadeType.REMOVE)
- Board Entity가 삭제될 때 연결된 모든 Reply Entity도 함께 삭제되게 변경
- @OneToMany(mappedBy = "board", cascade = CascadeType.REMOVE) Board가 삭제될 때 연관된 Reply가 삭제되는 것 -> Board Entity가 삭제될 때 연관된 모든 Reply Entity도 삭제
🚨 댓글 등록 시 작성일 null 표시 문제점 발생
Entity 클래스의 builder 메소드에서 시간 설정이 수동으로 이루어지고 있었음. 이로 인해, @CreationTimestamp
어노테이션이 제대로 작동하지 않아 생성 시간이 null로 처리되고 있었음.
- Entity 클래스에서 시간 필드 설정 제거: Entity 클래스의 builder 메소드에서 시간 필드에 대한 설정을 제거하여, Hibernate가 @CreationTimestamp 어노테이션을 통해 시간을 자동으로 관리할 수 있도록 함.
- DTO에서 시간 필드 세팅: Entity에서 DTO로 데이터 변환 시, Entity에 저장된 시간 필드를 DTO의 시간 필드에 세팅함. 이로써, 클라이언트 측으로 정확한 시간 정보가 전달됨.
- DTO 는 Entity 로부터 세팅 된거 가져 오는 용도 : Entity는 시간 값 1번만 세팅 해야 되기 떄문임. @CreationTimestamp 와 @UpdateTimestamp의 값들은 1번만 세팅되고 1번 만 실행 됨. 그래서 builder에서 시간 값을 또 세팅 시 null값 으로 세팅 됨.













