요번에 주어진 프로젝트에 대해 분석해보았습니다, 요번 개인 프로젝트는 일정 관리 시스템을 개발하는 것입니다. 주요 요구사항과 기능은 크게 API 명세서 작성, ERD 설계, 일정 및 댓글 CRUD, 유저 관리, 페이징 처리, JWT 인증/인가 및 예외처리로 나눌 수 있습니다. 각 기능에 대한 세부 분석은 다음과 같습니다.
1. 공통 조건
- 3 Layer Architecture: 프로젝트는 Presentation, Service, Persistence의 세 레이어로 나눠서 개발해야 합니다. 즉, 각 레이어에 맞는 역할을 수행하도록 코드를 분리해야 합니다.
- JPA 사용: 데이터베이스와의 통신을 JPA로 처리합니다. 모든 CRUD 기능에서 JPA를 통해 데이터를 처리해야 하며, 연관관계는 양방향으로 설정합니다.
- JWT 인증/인가: JWT를 사용해 로그인과 권한 관리를 처리해야 하며, Spring Security 대신 직접 필터를 설정해서 구현합니다.
2. 필수 기능 가이드
Lv 0. API 명세 및 ERD 작성
- API 명세서는 프로젝트의 문서로, 각 엔드포인트의 기능과 사용법을 설명합니다. 요청/응답 형식은 JSON 형태로 작성해야 하며, 명세서에는 필요한 파라미터, 반환 값, 인증 방식 등이 명시되어야 합니다.
- ERD(Entity Relationship Diagram)는 프로젝트에 필요한 엔티티들의 관계를 시각적으로 표현하는 다이어그램입니다. 이는 데이터베이스 설계를 이해하는 데 도움을 줍니다.
Lv 1. 일정 CRUD
- 일정 관리: 사용자는 일정을 생성, 조회, 수정, 삭제할 수 있습니다. 일정은
작성 유저명
,할일 제목
,할일 내용
,작성일
,수정일
필드를 가집니다. 일정 삭제 시 해당 일정의 댓글도 함께 삭제됩니다. - 영속성 전이: JPA의 CascadeType을 사용해 일정을 삭제할 때 댓글도 함께 삭제하도록 설정합니다.
Lv 2. 댓글 CRUD
- 댓글 관리: 사용자는 특정 일정에 댓글을 추가할 수 있으며, 댓글과 일정은
N:1
관계를 가집니다. 댓글은댓글 내용
,작성일
,수정일
,작성 유저명
필드를 포함합니다.
Lv 3. 일정 페이징 조회
- 페이징 처리: 일정 조회 시 페이지네이션 기능을 구현해야 합니다. 이를 위해 Spring Data JPA의
Pageable
과Page
인터페이스를 사용해 페이지 번호와 크기를 기반으로 데이터를 조회하고, 기본적으로 10개의 일정을 반환하며, 수정일을 기준으로 내림차순으로 정렬합니다.
Lv 4. 유저 CRUD
- 유저 관리: 유저는
유저명
,이메일
,작성일
,수정일
필드를 가지고 일정과N:M
관계를 가집니다. 즉, 하나의 유저가 여러 일정을 작성하거나, 하나의 일정에 여러 유저가 배정될 수 있습니다. - 지연 로딩: JPA의
LAZY
로딩 전략을 사용해 관련 엔티티를 지연 로딩으로 가져오도록 설정합니다.
Lv 5. 다양한 예외처리 적용하기
- Validation: 유저명, 할일 제목 등 각 필드에 적절한 제약 조건(@NotNull, @Size, @Pattern 등)을 적용하여 입력값을 검증해야 합니다.
3. 도전 기능 가이드
Lv 1. 회원가입(JWT)
- JWT 기반 회원가입: 유저 생성 시 비밀번호는 암호화된 상태로 저장되며, 회원가입 성공 시 JWT가 발급됩니다.
Lv 2. 로그인(인증)
- JWT 기반 로그인: 이메일과 비밀번호를 통해 로그인을 처리하며, 로그인 성공 시 JWT가 발급됩니다. JWT는 모든 요청에서 인증 목적으로 사용됩니다.
Lv 3. 권한 확인(인가)
- 권한 관리: 유저는 관리자와 일반 사용자 두 권한을 가지며, 관리자는 일정의 수정 및 삭제를 할 수 있습니다.
Lv 4. 외부 API 조회
- 날씨 정보 연동: 외부 API를 호출해 일정 생성 시 날씨 정보를 함께 저장하는 기능입니다.
개발 로드맵 요약
- 설계 단계: API 명세서 및 ERD 작성
- 기본 CRUD 구현: 일정 및 댓글 CRUD 기능 구현
- 유저 관리 및 페이징 기능: 유저 관리 및 일정 조회 시 페이징 기능 구현
- JWT 인증/인가: JWT를 통한 인증/인가 구현
- 예외처리 및 권한 관리: 다양한 예외처리 및 권한에 따른 접근 제어
- 외부 API 연동: 외부 API를 사용한 날씨 정보 조회 및 저장
'TIL > 스파르타 TIL' 카테고리의 다른 글
[내일배움캠프] CH 3 일정 관리 앱 Develop 리팩토링 (0) | 2024.10.28 |
---|---|
Spring의 IoC(제어의 역전)와 DI(의존성 주입) 이해하기 (0) | 2024.10.08 |
[내일배움캠프] Spring 1차 숙제 (튜터님께 받은 피드백) (0) | 2024.10.08 |
[내일배움캠프] 본캠프 TIL Spring 입문(3) (0) | 2024.09.28 |
[내일배움캠프] 본캠프 TIL Spring 입문(2) (0) | 2024.09.28 |