[221027] Mini Project 회고

Younseo·2022년 10월 27일
0

TIL Study

목록 보기
8/27
post-thumbnail

🥑 Mini Project🥑

1) 💐 프로젝트 소개

📌 프로젝트 주제 : 항해99 9기 C반을 위한 커뮤니티 사이트 🌼
📅 프로젝트 기간 : 2022.10.21-2022.10.27
👨‍👩‍👧‍👧 조원 : BE 장윤서, 정성우, 정동훈, FE 오기쁨, 손성화

2) 🔥 Tech Stack

3) 🎯 프로젝트 구현 기능

  1. 홈 화면 💒
    항해 최종발표일까지의 D-Day 표시와, 7가지의 랜덤 문구를 선정하여 사용자가 볼 수 있도록 구현하였습니다.

  2. 회원가입 로그인 🔑
    JWT + Security 적용하여 구현하였습니다.
    회원가입 시 자신의 조, 팀장인지 아닌지를 구분하여 가입할 수 있게 하였습니다.

  3. 게시글 조회 📜
    최신순,좋아요순 / 각 조별(all,1~6) / 태그별 (all, 일상, 공유, 질문, 공지) 태그를 만들어 param 값으로 받아 조건 별 조회가 가능합니다.
    작성시간을 '몇 분전', '몇 시간전', '며칠 전'으로 변경하여 반영할 수 있도록 구현하였습니다.

  4. 게시글 작성 📝
    사용자가 업로드한 이미지를 Amazon S3로 저장하여 이미지 URL을 받아와 DB에 저장하여 관리합니다.
    작성자 account에 담겨있는 accountTeam(조)를 받아와 post에 함께 저장합니다.
    Tag 중 "공지"의 경우, 팀장의 권한을 가진 사람만 작성할 수 있습니다.

  5. 게시글 좋아요 💗
    사용자가 게시글에 좋아요를 누를 수 있고 다시 한 번 누르면 좋아요가 취소됩니다.
    실시간으로 좋아요 수가 반영되게 하기 위하여 좋아요의 size를 따로 관리하였습니다.

  6. 댓글 및 댓글 좋아요 💖
    게시글에 댓글을 작성할 수 있고, 작성자만 삭제 할 수 있으며 게시글과 같이 좋아요 기능이 포함되어 있습니다.

  7. 마이페이지 🌝
    한 줄 소개를 작성하여 자신을 소개할 수 있습니다.
    내가 작성한 글, 댓글을 확인할 수 있습니다.
    작성한 글이나 댓글로 그 글의 상세페이지를 확인할 수 있습니다.

  8. 예외처리 📛
    Custom ErrorCode를 Enum으로 관리하여 프론트엔드와 명확하게 소통하였습니다.

@RequiredArgsConstructor
@Getter
public enum ErrorCode {
    NotFoundPost(HttpStatus.NOT_FOUND.value(), "P001", "게시물을 찾을 수 없습니다."),
    NotMatchUser(HttpStatus.BAD_REQUEST.value(), "P002", "작성자가 일치하지 않습니다."),
    NotFoundComment(HttpStatus.NOT_FOUND.value(), "P003", "댓글이 존재하지 않습니다."),
    NotFoundCommentUser(HttpStatus.BAD_REQUEST.value(), "P004", "댓글 작성자가 아닙니다."),
    AlreadyHaveEmail(HttpStatus.BAD_REQUEST.value(), "P005", "이미 존재하는 아이디 입니다."),
    UnAuthorized(HttpStatus.UNAUTHORIZED.value(), "P006", "로그인을 해주세요."),
    NotMatchPassword(HttpStatus.BAD_REQUEST.value(), "P007", "비밀번호가 일치하지 않습니다."),
    NotFoundUser(HttpStatus.BAD_REQUEST.value(), "P008", "아이디가 존재하지 않습니다."),
    CantDelete(HttpStatus.BAD_REQUEST.value(), "P009", "삭제 권한이 없습니다."),
    NotFoundMypage(HttpStatus.BAD_REQUEST.value(), "P010", "마이페이지를 찾을 수 없습니다."),
    NotTeamLeader(HttpStatus.BAD_REQUEST.value(), "P011", "공지는 팀장님만 작성이 가능합니다.");

    private final int httpStatus;
    private final String errorCode;
    private final String message;

}

4) 🏀 Trouble Shooting

  1. 순환참조의 오류
    글에 달린 댓글들을 List로 반환 할 때 JPA관계 설정으로 인해 순환참조의 문제를 직면했습니다.
    저희는 단순하게 Response 시 댓글List가 담길 객체의 멤버로 Entity를 보유하지 않는 방식을 선택하여 해결했습니다.
    게시글을 조건별로 정렬하여 조회하기 위해 좋아요갯수 등을 Post의 Column으로 관리하였습니다.
  2. Http -> Https로 변환하는데 발생한 오류
    여러가지 게시글과 매니저님께 받은 공유자료로 백엔드 서버의 https변환을 시도해 보았지만, 실패하였습니다. 실패한 원인도 아직 파악하지 못한 점이 가장 아쉽습니다. 그래서 다시 http로 돌려서 프론트엔드의 localhost와 연결하여 실행하였습니다.
  3. CORS
    현재 백엔드 CORS 코드를 모든 url에서 접근가능하게 열어두었습니다. 다음 프로젝트때에는 포트를 제대로 열어서 CORS를 컨트롤 해보고 싶습니다.

5) 🚀 더 발전시키고 싶은 부분

  1. 팀장을 인증할 수 있는 방법이나, 팀장은 팀 별로 한 명만 존재할 수 있게 설정하기
  2. 초대코드로만 가입가능하게 하는 기능
  3. 에러코드에 필드를 추가하여 오류 메세지의 종류를 줄이고 정확하게 어디에 어떤 오류가 발생했는지 알 수 있게 하기

💡 프로젝트 링크

🪐 미니프로젝트 노션 링크 🪐
🌟 시연 영상 🌟
💫 FE github 💫
BE github

0개의 댓글