프로젝트 복기 - 기획서

c.Hano·2025년 2월 20일

프로그래머스

목록 보기
1/5

마감 기한에 맞춰 후닥닥 프로젝트를 완성하다 보니 지피티 범벅인 프로젝트가 되어버렸다.

팀원분이 코드를 설명해달라고 했는데 내가 짠 코드를 설명하지 못하는 상황에 직면..

프로젝트가 끝난 지금 조금 여유가 생겨 적어도 내가 짠 부분의 코드는 알아두고자 하여 처음부터 다시 해보기로 했다.


그럼 고고

프로젝트 기획서


1. 프로젝트 개요

  • 프로젝트명 : CANBEJ
  • 설명: 사용자가 개인 또는 그룹 캘린더를 생성하여 일정을 효율적으로 관리할 수 있는 웹 애플리케이션
  • 목표: 사용자가 손쉽게 일정을 추가하고, 수정 및 삭제하며, 다른 사용자와 공유할 수 있는 기능을 제공

2. 주요 기능 정리

  • 사용자 관리

    • 회원가입 및 로그인 (JWT 인증 적용)

    • 사용자 정보 수정 (닉네임 변경)

    • 비밀번호 변경 및 비밀번호 찾기 기능

  • 캘린더 관리 (핵심 기능)

    • 캘린더 생성: 사용자가 새로운 캘린더를 생성할 수 있음

    • 캘린더 조회: 사용자가 소유한 캘린더 목록을 확인할 수 있음

    • 캘린더 수정: 캘린더 이름 및 설명을 수정할 수 있음

    • 캘린더 삭제: 불필요한 캘린더를 삭제할 수 있음

    • 캘린더 공유: 다른 사용자와 캘린더를 공유하고 권한을 설정할 수 있음

  • 일정(Schedule) 관리

    • 일정 추가 (제목, 설명, 날짜/시간, 장소 포함)

    • 일정 수정 및 삭제 (캘린더 소유자 및 일정 작성자만 가능)

    • 특정 캘린더의 일정 목록 조회

    • 일정 상세 조회 및 참가자 관리

  • 보안 및 인증

    • JWT 기반 로그인/회원가입 구현

    • Spring Security 적용 (API 보안 강화)

    • 비밀번호 암호화 (BCrypt 사용)


우선은 프로젝트 내에서 맡은 파트가 캘린더 파트여서 캘린더 부분을 복기를 해보고 시간이 남으면 나머지도 해보겠슴.

3-1. 캘린더 관리 기능 상세 요구사항 **

  • 캘린더 생성

    • 사용자는 캘린더의 이름(name)과 설명(description)을 입력해야 함
    • 생성된 캘린더는 사용자 ID(user_id)와 연결됨
    • 캘린더는 자동으로 생성된 ID(id)를 가짐
    • 생성 시간(created_at)을 자동 저장해야 함
    • 캘린더는 기본적으로 개인 전용(private) 상태이며, 공유 설정을 변경할 수 있음
  • 캘린더 조회

    • 사용자는 본인이 소유한 캘린더 목록을 확인할 수 있음
    • 특정 캘린더의 상세 정보를 조회할 수 있음
    • 공유된 캘린더도 함께 조회할 수 있음
  • 캘린더 수정

    • 사용자는 이름(name)과 설명(description)을 수정할 수 있음
    • 캘린더 수정 시 수정 시간(updated_at)을 자동 저장해야 함
    • 캘린더 소유자만 수정할 수 있음
  • 캘린더 삭제

    • 사용자는 자신의 캘린더만 삭제할 수 있음
    • 캘린더 삭제 시, 해당 캘린더에 포함된 일정도 함께 삭제됨
    • 공유된 캘린더를 삭제할 경우, 공유된 사용자에게 알림을 보낼 수 있도록 해야 함
  • 캘린더 공유 기능

    • 캘린더 소유자는 다른 사용자를 초대하여 캘린더를 공유할 수 있음
    • 공유된 사용자는 캘린더에 대한 읽기(read) 또는 쓰기(write) 권한을 가질 수 있음
    • 공유된 사용자는 자신의 캘린더 목록에서 확인 가능함
    • 소유자가 공유를 해제하면 해당 사용자 목록에서 캘린더가 사라짐
  • 생성된 캘린더가 없을 시 캘린더를 생성하라고 알려줌.


4-1. 캘린더 관리 기능 API 상세 설계

캘린더 생성
HTTP 메서드 : POST
URL : /api/calendars

요청

{
 "name": "개인 일정",
  "description": "2024년 개인 일정 관리"
}

반환
성공(201 Created)

{
  "id": 1,
  "name": "개인 일정",
  "description": "2024년 개인 일정 관리",
  "created_at": "2024-02-01T10:00:00"
}

캘린더 조회
HTTP 메서드 : GET
URL : /api/calendars

반환
성공(200 OK)

[
  {
    "id": 1,
    "name": "개인 일정",
    "description": "2024년 개인 일정 관리"
  },
  {
    "id": 2,
    "name": "업무 일정",
    "description": "회사 일정 관리"
  }
]

특정 캘린더 조회
HTTP 메서드 : GET
URL : /api/calendars/{id}

반환
성공(200 OK)

{
  "id": 1,
  "name": "개인 일정",
  "description": "2024년 개인 일정 관리",
  "created_at": "2024-02-01T10:00:00"
}

캘린더 수정
HTTP 메서드 : POST
URL : /api/calendars/{id}

요청

{
  "name": "수정된 일정",
  "description": "업데이트된 일정 정보"
}

반환
성공(200 OK)

{
  "id": 1,
  "name": "수정된 일정",
  "description": "업데이트된 일정 정보",
  "updated_at": "2024-02-01T12:00:00"
}

캘린더 삭제
HTTP 메서드 : DELETE
URL : /api/calendars/{id}

반환
성공(200 OK)

{
  "message": "캘린더가 삭제되었습니다."
}

캘린더 공유
HTTP 메서드 : POST
URL : /api/calendars/{id}/share

요청

{
  "user_id": 2,
  "permission": "read"
}

반환
성공(200 OK)

{
  "message": "캘린더가 사용자에게 공유되었습니다."
}

5-1. 엔티티 설계



다음은 calendar 클래스를 만들어 보자. 코드를 짜며 개념 정리도 같이 기입하여보자.

profile
꼬질이

0개의 댓글