해당 프로젝트 깃허브 링크는 다음과 같습니다
https://github.com/cho-yooseok/CalendarDevelop
CalendarDevelop
프로젝트 소개
이 프로젝트는 내일배움캠프 Spring 6기 과제로 진행한 일정 관리 시스템 애플리케이션입니다. 기존 JDBC 방식에서 JPA로 리팩토링하여 제작되었으며, 사용자 등록, 로그인, 일정 관리 기능을 제공합니다.
ERD 설계

API 명세서
https://documenter.getpostman.com/view/42104801/2sB2cU9Mdk
기술 스택
- Java 17
- Spring Boot 3.4.4
- Spring Data JPA
- MySQL
- Lombok
- Spring Validation
주요 기능
회원 관리
- 회원 가입: POST /members
- 회원 정보 조회: GET /members/{id}
- 회원 정보 수정: PUT /members/{id}
- 회원 탈퇴: DELETE /members/{id}?password=xxx
인증
- 로그인: POST /login
- 로그아웃: GET /logout
일정 관리
- 일정 등록: POST /members/{memberId}/schedules
- 일정 조회: GET /schedules/{id}
- 사용자별 일정 목록 조회: GET /members/{memberId}/schedules
- 일정 수정: PUT /members/{memberId}/schedules/{id}
- 일정 삭제: DELETE /members/{memberId}/schedules/{id}?password=xxx
프로젝트 구조
com.example.CalendarDevelop
├── CalendarDevelopApplication.java
│
├── cys
│ ├── config
│ │ ├── FilterConfig.java
│ │ ├── GlobalExceptionHandler.java
│ │ ├── JpaAuditingConfiguration.java
│ │ └── filter
│ │ └── AuthenticationFilter.java
│ │
│ ├── controller
│ │ ├── AuthController.java
│ │ ├── MemberController.java
│ │ └── ScheduleController.java
│ │
│ ├── dto
│ │ ├── request
│ │ │ ├── LoginRequestDto.java
│ │ │ ├── MemberSaveRequestDto.java
│ │ │ ├── MemberUpdateRequestDto.java
│ │ │ ├── ScheduleSaveRequestDto.java
│ │ │ └── ScheduleUpdateRequestDto.java
│ │ └── response
│ │ ├── MemberResponseDto.java
│ │ └── ScheduleResponseDto.java
│ │
│ ├── entity
│ │ ├── BaseTimeEntity.java
│ │ ├── Member.java
│ │ └── Schedule.java
│ │
│ ├── repository
│ │ ├── MemberRepository.java
│ │ └── ScheduleRepository.java
│ │
│ └── service
│ ├── AuthService.java
│ ├── MemberService.java
│ └── ScheduleService.java
│
├── exception
│ ├── ApplicationException.java
│ ├── AuthenticationException.java
│ └── PasswordMismatchException.java
│
└── resources
├── application.properties
└── schedule.sql
개발자 가이드
데이터베이스 설정
CREATE DATABASE test;
USE test;
테이블 생성 (src/schedule.sql)
CREATE TABLE member (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL
);
CREATE TABLE schedule (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content VARCHAR(255) NOT NULL,
member_id BIGINT NOT NULL,
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL,
FOREIGN KEY (member_id) REFERENCES member(id)
);
application.properties 설정
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=your-username
spring.datasource.password=your-password
의존성 추가 (build.gradle)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
캘린더 개발 프로젝트 트러블 슈팅 가이드
1. 인증 관련 문제
문제: 로그인이 되지 않음
- 원인: 이메일 또는 비밀번호가 일치하지 않음
- 해결 방법:
- 이메일과 비밀번호를 정확히 입력했는지 확인
- MemberRepository.findByEmailAndPassword() 메서드 호출 결과 확인
- DB에 해당 사용자가 존재하는지 직접 확인
문제: 세션이 유지되지 않음
- 원인: 세션 타임아웃 또는 세션 관리 설정 문제
- 해결 방법:
- application.properties에서 세션 타임아웃 설정(현재 30분) 확인
# Session Configuration
server.servlet.session.timeout=30m
2. 데이터베이스 연결 문제
문제: 데이터베이스 연결 실패
- 원인: 연결 설정 오류
- 해결 방법:
- MySQL 서버 실행 여부 확인
- application.properties의 DB 접속 정보 재확인
spring.application.name=CalendarDevelop
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=0000
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# JPA Configuration
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
소감
첫 JPA 적용 프로젝트였고 많이 어려웠다. 앞으로 더 열심히 해야겠다!!!!
'트러블슈팅,기술적의사결정' 카테고리의 다른 글
| 리뷰 수정 시 존재하지 않는 리뷰인데 500에러 발생(트러블 슈팅) (1) | 2025.07.09 |
|---|---|
| 좋아요 많은 리뷰 Top 10 캐싱 처리 (Redis)를 통한 성능 개선과 부하테스트 결과 (기술적 의사 개선 트러블 슈팅) (3) | 2025.07.09 |
| 일정관리 앱 만들기 프로젝트 README와 트러블슈팅 (1) | 2025.03.26 |
| 키오스크화면만들기 트러블슈팅과 소감 (1) | 2025.03.14 |
| 계산기 프로젝트 트러블 슈팅 (수정완료) (2) | 2025.03.06 |