KPT

스파르타 미니 프로젝트 (3주차) - KPT 회고록 (팀_Spring참10조)

정유감 2023. 11. 27. 17:54
728x90
반응형

Spring… 참10조?

우리 팀원

❤ 팀 소개

  • 프로젝트 이름 : 뉴스피드 프로젝트
  • 프로젝트 소개 : 취준생을 위한 뉴스피드

⭐ KPT

프로젝트

  • 팀명 : Spring… 참 10조?
  • 팀원 : 김진훈, 김지현, 장동하, 최혁
  • 개발 기간 : 2023.11.21 ~ 2023.11.27
  • 개발 내용 : 뉴스피드 사이트 백엔드 API 만들기

📜 KPT 회고

1. KEEP (잘 한 것)

협업

  • 기능별로 개발 역할 분담
  • Git, Github를 적극적으로 사용하려고 시도함
    • main, dev, feature branch를 나누고, dev branch에 pull request를 요청해서 코드 리뷰 후에 merge 하는 방식으로 협업함
    • pull request마다 코드 리뷰를 진행함
    • application.yml 설정 파일을 개인별로 잘 관리함
  • 코딩 컨벤션과 커밋 컨벤션을 정하고 지키려고 노력함
  • 저녁에 매일 기능 개발 상황을 공유하는 시간을 갖음

기술

  • 필요한 기능을 구현하기 위해 필요한 기술을 공부하고 잘 적용했음
  • Swagger를 통한 API 명세 작성과 테스트
  • AWS s3 버킷을 이용한 이미지 서버 연동
  • Gmail SMTP를 이용한 이메일 자동 전송 기능 활용
  • Github의 Read me 작성을 통한 꼼꼼한 문서화

2. PROBLEM (아쉬운 것)

협업

  • Git commit 로그에 의미 없는 merge 로그가 많이 생성되어 지저분함
  • Git pull reqeust 올리기 전에 pull을 받지 않고 올린 경우가 있음

기술

  • tokenvalue에 jwt 형식이 아닌 값이 들어왔을 때의 허용하는 페이지에 대한 예외처리 미흡
  • 다대다 연관관계 테이블에 복합키 개념을 적용하지 않음

3. TRY (하고싶은 것)

협업

  • 팀원 개인의 역량을 파악하는 시간을 갖기
    • 할 수 있는 것과 없는 것의 명확한 구분 필요
  • Git commit 로그를 깔끔하게 관리해보고 싶음

기술

  • 리팩토링 시도
    • 코드 리뷰를 통한 더 나은 코드 모색
      • 기능별 함수 모듈화 적극 시도
  • 다대다 연관관계 테이블에 복합키 개념을 적용하지 않음

# FEEL

김진훈

얼떨결에 팀장을 맡았는데 다들 얘기도 잘 들어주시고 맡은 기능 개발도 열심히 해주셔서 좋은 경험이였습니다.
저번 프로젝트에서 협업할 때 하고 싶었던 것들을 이번 프로젝트에서 많이 적용할 수 있어서 좋았습니다.
프로젝트 시간이 촉박해서 여전히 리팩토링은 도전하지 못한 것이 조금 아쉽습니다.

김지현

프로젝트에서 많은 기능을 구현하였음에도 적절한 분배와 역할 분담, 꼼꼼한 설계, 테스트, 개개인의 노력이 잘 이루어져 완성도 높은 프로젝트를 함께 이룬 것이 좋았습니다.
또한 적극적인 git 사용과 코드 리뷰를 통해 git과 github에 익숙해질 수 있었습니다.

장동하

오랜만에 몰입하는 경험을 해서 개인적으로는 좋았지만, 몰입한 시간 대비 많은 성과물을 내지 못해 아쉽습니다.
기능 구현을 재촉하지 않고 기다려주시고 또 많은 개념들을 알려주신 팀원 분들에게 감사드리며 항상 건승하시길 바랍니다.

최혁

잘 하는 분들 사이에서 정말 많이 배우고 갑니다.

⭐ 개발 일정

추가 할 일 메모

BaseResponse → API 명세와 동기화 해야함 → 처리했음

프로필 수정할 때 중복 닉네임 체크 해야함 - > 처리했음

유저 생성할 때 프로필 자동 생성되게 해야함 → 처리했음

모든 API 실행 테스트 해야함 → 했음

실행 테스트 끝나면 스웨거 적용 해야함 → 했음

스웨거 테스트 영상 만들어야함 → 햇음

ERD 수정해야함 → 했음

README → 했음

기능들 사용하는거 다 상상해보고 가능한 예외처리 해야함 → AOP로 하면 더 좋고

구현 기능 목록

사용자 인증 기능 - 장동하

  • 회원가입 기능

    • 새로운 사용자가 ID와 비밀번호의 형태로 서비스에 가입할 수 있어야 합니다.
      • 이 때, 비밀번호는 안전하게 암호화되어 저장되어야 합니다!

  • 로그인 및 로그아웃 기능

    • 사용자는 자신의 계정으로 서비스에 로그인하고 로그아웃할 수 있어야 합니다.

    • 로그인에 성공하면 Jwt를 발급한다.

  • 비밀번호 수정 시에는 비밀번호를 한 번 더 입력받는 과정이 필요합니다.

  • 기능 시나리오

    • 회원가입을 요청하면 인증 없이, 이메일과 비밀번호를 전달하는데, 이메일 인증을 통과하기 전에는 GUEST 권한을 가진 유저고, 통과하면 USER 권한을 가진 유저가 된다. → 회원가입 요청 API, 이메일 인증 요청하는 API
    • GUEST의 권한: 이메일 인증 요청만 가능, USER의 권한: 모든 요청 가능
    • 회원가입 요청에 대한 응답으로 성공 여부를 리턴한다.
    • 로그인 요청을 하면, 이메일과 비밀번호를 전달하고 인증을 통과하면 응답으로 쿠키에 Jwt 토큰을 받는다.
    • 로그아웃 요청을 하면, Jwt 토큰을 헤더에 넣고, 응답으로 쿠키에 로그아웃된 Jwt 토큰을 받는다.
    • 이메일 인증 요청을 하면, 이메일 인증 값을 전달하고, 응답으로 성공 여부를 리턴한다. - 이메일 인증 값 생성 방법 구체화 필요

  • 이메일 가입 및 인증 기능 - 장동하

    • 이메일 가입 시 이메일 인증 기능을 포함하는 것이 좋습니다.

  • 프로필 관리 - 김진훈

    • 프로필 추가, 조회, 수정 기능

      • 이름, 한 줄 소개와 같은 기본적인 정보를 볼 수 있어야 하며 수정할 수 있어야 합니다.

    • 기능 시나리오

      • 프로필은 유저가 이메일 인증을 통과했을 때, 함께 초기 생성되며 임시 닉네임(중복불가)이 부여되고 소개글은 비워져 있다.
      • 프로필 조회 요청에 대한 응답으로 닉네임과 소개글을 리턴한다.
      • 프로필 수정 요청 하면 Jwt 토큰을 헤더에 넣고, 닉네임과 소개글을 전달하는데, 응답으로 수정된 닉네임과 소개글을 리턴한다.

  • 게시물 CRUD 기능 - 김지현

    • 게시물 작성, 조회, 수정, 삭제 기능

      • 게시물 조회를 제외한 나머지 기능들은 전부 인가(Authorization) 개념이 적용되어야 하며 이는 JWT와 같은 토큰으로 검증이 되어야 할 것입니다.
      • 예컨대, 내가 작성한 글을 남이 삭제할 수는 없어야 하고 오로지 본인만 삭제할 수 있어야겠죠?

    • 게시물 작성, 수정, 삭제 시 새로고침 기능

      • 프론트엔드에서 게시물 작성, 수정 및 삭제를 할 때마다 조회 API를 다시 호출하여 자연스럽게 최신의 게시물 내용을 화면에 보여줄 수 있도록 해야 합니다!

    • 기능 시나리오

      • 게시글 작성 요청 하면 Jwt 토큰을 헤더에 넣고, 글 제목, 글 내용을 전달하고, 응답으로 글 id, 글 제목과 내용을 리턴한다.
      • 게시글 조회 요청 하면 응답으로 글 id, 글 제목과 내용을 리턴한다.
      • 게시글 수정 요청 하면 Jwt 토큰을 헤더에 넣고, 글 제목, 글 내용을 전달하고, 응답으로 수정한 게시글의 조회 요청으로 redirect한다.
      • 게시글 삭제 요청 하면 Jwt 토큰을 헤더에 넣어 전달하고, 응답으로 뉴스피드 조회 요청 redirect 한다.

  • 댓글 CRUD 기능 - 최혁

    • 댓글 작성, 조회, 수정, 삭제 기능
      • 사용자는 게시물에 댓글을 작성할 수 있고 본인의 댓글은 수정 및 삭제를 할 수 있어야 합니다.
      • 게시글 내부에서 댓글을 조회할 때 해당 게시글에 포함된 댓글을 한번에 조회할 수 있어야 합니다.
      • 또한, 게시물과 마찬가지로 댓글 조회를 제외한 나머지 기능들은 인가(Authorization)개념이 적용되어야 합니다.
    • 댓글 작성, 수정, 삭제 시 새로고침 기능
      • 프론트엔드에서 댓글 작성, 수정 및 삭제를 할 때마다 조회 API를 다시 호출하여 자연스럽게 최신의 댓글 목록을 화면에 보여줄 수 있도록 해야 합니다!
    • 기능 시나리오
      • 댓글 작성 요청 하면 Jwt 토큰을 헤더에 넣고, 댓글 내용을 전달하고, 응답으로 댓글 id, 댓글 내용, 좋아요 수, 작성자 닉네임, 작성일자를 리턴한다.
      • 댓글 조회 요청 하면 응답으로 댓글 id, 댓글 내용, 좋아요 수, 작성자 닉네임, 작성일자 리스트를 리턴한다.
      • 댓글 수정 요청 하면 Jwt 토큰을 헤더에 넣고, 댓글 내용을 전달하고, 응답으로 수정한 댓글의 내용을 리턴한다.
      • 댓글 삭제 요청 하면 Jwt 토큰을 헤더에 넣어 전달하고, 응답으로 성공 여부를 리턴한다.

  • 팔로우 기능 구현 - 김진훈

    • 특정 사용자를 팔로우/언팔로우를 할 수 있으면 너무 좋습니다.

    • 팔로우 기능이 구현되었다면 뉴스 피드에 팔로우하는 사용자의 게시물을 볼 수 있어야 하겠죠?

    • 기능 시나리오

      • 팔로우 요청을 하면 Jwt 토큰을 헤더에 넣어 전달하고, 응답으로 성공 여부를 반환한다.
      • 언팔로우 요청을 하면 Jwt 토큰을 헤더에 넣어 전달하고, 응답으로 성공 여부를 반환한다.

  • 뉴스 피드 기능 - 김지현

    • 뉴스 피드 페이지

      • 사용자가 다른 사용자의 게시물을 한 눈에 볼 수 있는 뉴스 피드 페이지가 있어야 합니다.
      • 뉴스 피드 추천 변수: 팔로우(0.5) + 좋아요(0.4) + 작성일자(0.1)의 가중치를 가지고 추천 시스템을 만든다.
      • 위의 추천 시스템에 따라 페이지네이션으로 조회한다.

    • 기능 시나리오

      • 뉴스 피드 요청을 하면 Jwt 토큰을 넣어서 보내면 추천 변수의 가중치를 위의 조건 그대로 하고, Jwt 토큰이 없다면 좋아요(0.8) + 작성일자(0.2)로 추천한다.
      • 응답으로 추천하는 게시글 목록(글 id, 글 제목, 글 내용, 좋아요 수, 작성자, 작성일자)을 리턴한다.

  • 좋아요 기능 - 김지현

    • 게시물 및 댓글 좋아요/좋아요 취소 기능

      • 사용자가 게시물이나 댓글에 좋아요를 남기거나 취소할 수 있어야 합니다.
      • 이 때, 본인이 작성한 게시물과 댓글에 좋아요는 남길 수 없도록 해봅니다!

    • 기능 시나리오

      • 좋아요 요청을 하면 Jwt 토큰을 헤더에 넣어 전달하고, 응답으로 성공 여부 메세지와 좋아요 수를 리턴한다.

  • 프로필에 사진 업로드 기능 구현 - 김진훈

    • 프로필 사진을 저장할 때는 반드시 AWS S3를 이용해주세요!

    • 기능 정리

      • 프로필 사진 추가
        • http method post로 이미지 파일 받고 접근 가능한 s3의 url 리턴(파일명은 profile-image/userId.확장자 식으로 구성)
        • db에 접근 가능한 s3의 url 저장해두자
      • 프로필 사진 수정
        • http method put으로 프로필 사진 추가와 동일
      • 프로필 사진 삭제
        • http method delete로 s3에 저장된 image를 삭제하고 db의 url도 null로 변경하자

협업 방법

  1. 기술 개발 및 결합 과정의 방법

    • 기능 완성 시점에 PR을 요청하고, 1명 이상이 코드 리뷰 후에 병합한다.
    • 브랜치는 main(배포용), dev(개발용), feature(기능 개발용)로 나눠서 관리한다.
  2. 코드 컨벤션

  3. 커밋 컨벤션

  4. 패키지 구조

    • 도메인형 패키지 구조로 개발한다.
    • 공통으로 사용하는 기능은 common 패키지에서 관리한다.

기술 스택

  • Java 17
  • Gradle - Groovy
  • Spring Boot 3.1.5
    • Lombok
    • Spring Boot DevTools
    • Spring Web
    • Spring Security
    • Spring Data JPA
    • MySQL Driver
    • Validation

API 명세서

ERD

Wire Frame


🌞 데일리 스크럼

하루 계획표를 작성하고 데일리 스크럼에서 공유합니다.

요일 별 상시 업무 (3)

🌞 우리 팀 약속

**1. 시간 약속을 철저히 지키겠습니다.**

**2. 소통을 중요시하며 자리 비움이나 문제가 생기면 빠르게 공유하겠습니다.

3. 실수나 문제가 있어도 남 탓하지말고 문제를 해결해나가는데 집중하겠습니다.**

4**. 파이팅하겠습니다!

5. Exception 만들기 전에 팀원 분들이 만든 것 있나 먼저 확인하기.**

💪🏻 우리 팀의 목표는?

**1. 매일 일정 소화하기

2. 부끄러워도 물어보기

3. 이번 프로젝트 포트폴리오로 사용하기

4. TIL 남은날까지 맨날 쓰기 📝

5. 1일 1TIL, 1알고리즘**

⏰ 우리 팀 시간 약속

**- 오전**
    - 09:00 ~ 10:30 : 알고리즘 학습 1일 1문제 스터디

**- 집중 코딩 시간 (14:00 ~ 18:00)**
    - 프로젝트 개발 시간

**- 오후**
    - 20:00 ~ 20:30
        - TIL 작성
    - 20:30 ~ 21:00
        - 하루 회고 진행(개발 진척도 공유, 체크리스트 확인, TIL 댓글 달기)

개발 진행에 따른 기록 작성 (개인)

  1. 개발을 하면서 정리할 내용 또는 학습 한 내용이 있다면 블로그에 정리하기 (tistory, velog 추천!)
  2. 정리할 때는 아래 내용들을 고민하여 작성해봅시다.
    1. 어떤 의도, 이유로 해당 기능을 구현했는지
      → 강의에서 배워서, 필수구현 사항이여서는 지양합시다!
    2. 해당 기능은 어떤 로직으로 코드가 작동하는지
      → 입력값이 들어가면 어떤 출력값이 나오는지 또는 어떤 변화가 있는지
    3. 버그 또는 에러는 어떤 것이 있었고 어떻게 해결하였는지

728x90
반응형