트러블슈팅,기술적의사결정

일정관리디벨롭 CalendarDevelop 프로젝트 회고와 트러블 슈팅

ysrec328 2025. 4. 4. 13:45

해당 프로젝트 깃허브 링크는 다음과 같습니다
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 적용 프로젝트였고 많이 어려웠다. 앞으로 더 열심히 해야겠다!!!!