개인 일정의 효율적인 관리를 도와주는 Spring Boot 기반의 REST API입니다. JWT 기반 인증, 실시간 날씨 정보 연동, 댓글 시스템, 담당자 배정 기능을 제공하며, Spring AOP를 적용한 관리자 접근 로깅 시스템을 핵심 기능으로 구현했습니다.
- 회원가입: 가입 시 USER, ADMIN 권한 구분 (POST
/auth/signup) - 로그인: 이메일 & 비밀번호 입력 (POST
/auth/signin) - 인증/인가: 회원가입 및 로그인 성공 시 JWT 토큰 발급
- 사용자 정보 조회: 사용자 ID, 이메일 조회 (GET
/users/{userId}) - 비밀번호 변경: 기존 비밀번호 확인 후 변경 (PUT
/users)
- 일정 생성: 제목, 내용과 함께 당일 날씨 정보 자동 저장 (POST
/todos) - 일정 목록 조회: 페이징을 사용한 일정 목록 조회 (GET
/todos?page=1&size=10) - 특정 일정 조회: 지정된 일정 조회 (GET
/todos/{todoId})
- 담당자 등록: 일정에 담당자 지정 등록 (POST
/todos/{todoId}/managers) - 담당자 목록 조회: 일정에 배정된 담당자 목록 조회 (GET
/todos/{todoId}/managers) - 담당자 삭제: 배정 담당자 삭제 (DELETE
/todos/{todoId}/managers/{managerId})
- 댓글 작성: 일정에 댓글 작성 (POST
/todos/{todoId}/comments) - 댓글 조회: 일정별 댓글 목록 조회 (GET
/todos/{todoId}/comments)
- 사용자 권한 변경: 지정 사용자 권한 변경 (PATCH
/admin/users/{userId}) - 댓글 삭제: 모든 댓글 삭제 권한 (DELETE
/admin/comments/{commentId}) - 관리자 접근 로깅: 관리자 권한이 필요한 API 접근 시 로그 기록 (AOP 적용)
- 발급: 로그인/회원가입 시 자동 발급
- 유효기간: 1시간
- 헤더 형식:
Authorization: Bearer {token}
- USER: 일반 사용자
- ADMIN: 관리자
본 프로젝트의 핵심은 Spring AOP(Aspect-Oriented Programming)를 활용한 관리자 권한 접근 로깅 시스템입니다. @LogAdminAccess 커스텀 어노테이션이 적용된 관리자 전용 API 메서드에 접근 시 자동으로 로그를 기록합니다.
- 보안 모니터링: 권한 남용이나 비정상적인 관리자 활동을 실시간으로 감지
- 책임 추적성: 데이터 변경이나 삭제에 대한 명확한 책임 소재 파악
- 관심사 분리: 횡단 관심사(로깅)를 각각의 비즈니스 로직과 분리함으로써 단일 책임 원칙 준수
- 코드 중복 제거: 단일 클래스가 로깅에 대한 로직을 집중 관리함으로써 불필요한 코드 중복 막음
- 유지보수성 향상: 로깅 시스템 변경 또는 관리자 메서드 추가 시 코드 수정 최소화
- 요청 ID: JWT 토큰에서 추출한 사용자 ID
- 요청 시각: API 호출 타임스탬프
- 요청 URL: API 호출 URL
- 요청 본문: 요청 본문이 있는 경우 출력, 없는 경우 "요청 본문 없음"
- 응답 본문: 메서드 실행 결과 데이터 출력, 없는 경우 "응답 본문 없음"