후기적후기적 커뮤니티는 나의 첫 웹 프로젝트다.
게시글을 작성하고, 수정하고, 삭제하는 것이 가능한 어찌 보면 평범한 커뮤니티지만, 이번 프로젝트를 진행하며 내가 너무나도 당연하게 여겼던 기존의 기능들을 직접 구현하기란 절대 쉽지 않다는 것을 뼈저리게 느낄 수 있었다. 정말 값졌던 시간.
📜 개발 환경과 언어
HTML
CSS
JSP
JPQL
LOMBOK
JAVA
JPA
JSTL
이번 프로젝트를 통해 JSP, JPA를 조금 더 deep하게 review할 수 있었다. 또, '로그인정보 유지'를 구현하기 위한 노력의 과정에서
session
에 대해 더 많은 공부를 하기도 했다. 회원 자신이 작성한 게시글만 수정, 삭제할 수 있도록 처리하기 위한 필수적인 과정이었다.
🔑 깃허브 바로가기
GitHub - yyhhha/review-world
📝 노션 바로가기
Notion - 후기적후기적 : 세상 모든 후기모음
1. 회원이 탈퇴할 경우에도, 작성한 게시글은 DB에 남아있음.
작성자 명을 "익명" 으로 수정 후 활용
2. 게시글이 삭제되면 댓글도 삭제됨
댓글이 삭제되어도 게시글은 유지
- 모든 OneToMany 관계는 단방향으로 이루어져있다. 오직
R_BOARD
만이 다른 entity들을 참조한다. (FK)- 회원이 탈퇴하더라도 그들이 과거에 작성한 게시글들은 DB에 존재할 수 있게끔 하고싶었기 때문에
R_USER
가 삭제되더라도 자식 table인R_BOARD
에 영향이 없게끔USER_ID
를null
값으로 처리했는데, 덕분에 게시글 자체는 여전히 DB에 남아있을 수 있었다.
하지만 이로 인해USER_ID
를 통한 게시글(R_BOARD
)조회에 어려움을 겪었다. 회원 탈퇴 후에도 DB는 남겨놓는 것이 어떻냐는 피드백도 받기도 했는데, 현재 실제로 서비스 중인 커뮤니티에서는 이러한 문제를 어떠한 방식으로 처리하고 있는지 궁금해졌다. 탈퇴한 회원의 정보까지 영구적으로 보존하면 개인정보와 관련한 이슈가 존재하지 않을까..?
게시글작성시 발생하는 에러
→ 게시글의 제목, 내용의 길이가 길어질 경우 에러 발생
⇒ ALTER
를 통해 수정
ALTER TABLE R_BOARD MODIFY TITLE VARCHAR2(200)
데이터 추가 시, default값을 가진 컬럼의 데이터가 자동으로 추가되지 않는 에러
⇒ @DynamicInsert
를 사용하여 해결 : 해당 어노테이션 사용 시 dafault값 자동 삽입
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Builder
@DynamicInsert
@Entity
@Table(name="R_BOARD")
@SequenceGenerator(name="boardId_seq_gen", sequenceName="BOARD_ID_seq", initialValue=1, allocationSize=1)
public class RBoard {
@Id
@Column(name = "BOARD_ID")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="boardId_seq_gen")
private int boardId;
private String title;
private String content;
@Column(name = "BOARD_DATE")
private String boardDate;
private int views;
private int likes;
@ManyToOne
@JoinColumn(name = "CATEGORY_ID")
private RCategory category;
@ManyToOne
@JoinColumn(name = "USER_ID")
private RUser userId;
}
image파일이 깨지는 에러
→ 여러 페이지에서 쓰이는 image파일을 nav.jsp
파일 하나에서 관리하는데, 각 페이지들의 경로가 다르기 때문에 image파일을 제대로 불러오지 못하는 에러 발생 (경로문제)
→ 절대경로를 통해 해결 시도하였으나 해결하지 못함
⇒ 타 사이트에 저장된 이미지 주소값으로 설정하여 일시적으로 해결한 상태
resultlist.add()
관련 에러
→ 탈퇴한 회원이 add되면 리스트 출력에 에러가 발생함
⇒ null처리되는 값은 userId
와 nickName
이다. 이 두 값이 null일 경우 "익명" 으로 값을 변경하도록 설정 (즉, 탈퇴한 회원의 게시글의 글쓴이는 "익명" 으로 넘어가도록 SET)
변경 전
for (RBoard board : list) {
resultList.add(new BoardDTO(board.getBoardId(), board.getTitle(), board.getContent(),
board.getBoardDate(), board.getViews(), board.getLikes(),
board.getCategory().getCategoryName(), board.getUserId().getNickName(),
board.getUserId().getUserId(), board.getCategory().getCategoryId()));
} catch (Exception e) {
e.printStackTrace();
} finally {
}
return resultList;
}
변경 후
if(user == null) {
resultList.add(new BoardDTO(board.getBoardId(),board.getTitle(), board.getContent(),
board.getBoardDate(), board.getViews(),board.getLikes(),
category.getCategoryName(),"익명", "익명",
board.getCategory().getCategoryId()));
} else {
resultList.add(new BoardDTO(board.getBoardId(), board.getTitle(), board.getContent(),
board.getBoardDate(), board.getViews(),
board.getLikes(), category.getCategoryName(),
user.getNickName(), board.getUserId().getUserId(),
board.getCategory().getCategoryId()));
}
😄 박서은 : https://github.com/westsi1ver
😊 유영훈 : https://github.com/yyhhha
😀 정은진 : https://github.com/bingbong-party
코드에서 오타 찾아내기, 트러블 슈팅, 클린코드와 리팩토링에 대해 고민하기 등등..
동료가 머리를 맞댈 때 더 빛을 발하는 것이 '개발'이라는 것을, 몸소 깨닫고 느끼는 요즈음이다.
유연한 커뮤니케이션을 위한 고민과 노력을 꾸준히 이어가야겠다.