[project] 일정 관리 앱 Develop

최서영·2024년 10월 17일

Lv 1. 일정 CRUD

  • 사용한 어노테이션
    • @Entity: 데이터베이스 테이블과 매핑되는 클래스에 사용합니다.
    • @Id: 해당 필드를 기본 키로 지정합니다.
    • @GeneratedValue: 기본 키 생성 전략을 설정합니다.
    • @Repository: DAO(Data Access Object) 클래스에 사용하여 데이터 접근을 명시합니다.
  • 일정을 저장, 조회, 수정, 삭제할 수 있습니다.
  • 일정은 아래 필드를 가집니다.
    • 작성 유저명, 할일 제목, 할일 내용, 작성일, 수정일 필드 → 2주차 13 JPA Auditing
  • 삭제의 경우
    • 일정을 삭제할 때 일정의 댓글도 함께 삭제
    • 이 때, JPA의 영속성 전이 기능을 활용 → 4주차 12 영속성 전이

Lv 2. 댓글 CRUD

  • 사용한 어노테이션

    • @Entity: 데이터베이스 테이블과 매핑되는 클래스에 사용합니다.
    • @Id: 해당 필드를 기본 키로 지정합니다.
    • @GeneratedValue: 기본 키 생성 전략을 설정합니다.
    • @Repository: DAO(Data Access Object) 클래스에 사용하여 데이터 접근을 명시합니다.
    • @ManyToOne: 일정 엔티티와 댓글 엔티티간의 연간관계를 설정 합니다.→4주차 08. N대 1 관계
  • 기 생성한 일정에 댓글을 남길 수 있습니다.

    • 댓글과 일정은 연관관계를 가집니다.
  • 댓글을 저장, 조회, 수정, 삭제할 수 있습니다.

  • 댓글은 아래와 같은 필드를 가집니다.

    • 댓글 내용, 작성일, 수정일, 작성 유저명 필드 → 2주차 13. JPA Auditing

    Lv 4. 유저 CRUD

  • 사용한 어노테이션

    • @Entity: 데이터베이스 테이블과 매핑되는 클래스에 사용합니다.
    • @Id: 해당 필드를 기본 키로 지정합니다.
    • @GeneratedValue: 기본 키 생성 전략을 설정합니다.
    • @Repository: DAO(Data Access Object) 클래스에 사용하여 데이터 접근을 명시합니다.
    • @ManyToOne: 유저 테이블과 일정 테이블간 연간관계를 설정 합니다.
    • @OneToMany: 유저 테이블과 일정 테이블간 연간관계를 설정 합니다.
    • 지연로딩 : 객체가 조회될 때 연관된 객체를 한번에 조회 하지 않습니다.
  • 유저를 저장, 조회, 삭제할 수 있습니다.

  • 유저는 아래와 같은 필드를 가집니다.

    • 유저명, 이메일, 작성일, 수정일 필드
  • 일정은 이제 작성 유저명 필드 대신 유저 고유 식별자 필드를 가집니다.

  • 일정을 작성한 유저는 추가로 일정 담당 유저들을 배치할 수 있습니다.

    • 유저와 일정은 N:M 관계입니다. → 4주차 10. N 대 M 관계
    • JPA 지연로딩을 활용합니다. (EAGER → LAZY) → 4주차 11. 지연 로딩

    Lv5. 다양한 예외처리 적용하기

  • 사용한 어노테이션

    • @Valid : 객체의 제약 조건을 검증합니다.

트러블슈팅

1. Entity와 Repository 관련 오류

  • @Entity가 인식되지 않음.

javax.persistence 또는 jakarta.persistence 관련 의존성을 확인하고, 프로젝트가 올바르게 설정되어 있는지 확인한다.

  • JPA Auditing이 작동하지 않음.

@EnableJpaAuditing 어노테이션을 추가하고, 필요한 필드에 @CreatedDate 및 @LastModifiedDate를 설정한다.

  • repository 클래스 이름이 I로 시작함.

@Repository 어노테이션을 추가하여 명시적으로 지정한다.

2. Validation 관련 오류

  • @NotBlank, @Size, @Email 어노테이션에서 오류 발생.

spring-boot-starter-validation 의존성이 추가되었는지 확인한다.

3. 데이터베이스 관련 문제

  • GRANT 명령어 사용 시 데이터베이스에 접근할 수 없음.

데이터베이스에 사용자와 권한을 올바르게 설정한다. 예: GRANT ALL PRIVILEGES ON schedule.* TO 'root'@'localhost'; 이후 FLUSH PRIVILEGES;를 실행한다.

  • 데이터베이스 테이블이 자동으로 생성되지 않음.

4. API 명세와 URI

  • 댓글 생성 API의 URI가 잘못됨.

댓글 생성 URI를 확인하고, RESTful 원칙에 따라 /api/schedules/{scheduleId}/comments와 같이 수정한다.

5. PK와 FK 연결 문제

  • 조인 테이블을 통해 연결하는 개념이 어려움.

6. 실행 오류

아직 개념이 완전히 잡히지 않은 단계에서 직접 코드를 작성해보려고 하니 너무 많은 오류가 발생했다. 구글링과 챗지티피의 도움을 받아서 CRUD 만이라도 작성해보려고 했지만 결국 완성하지 못하고 실행이 되지 않는 문제가 발생했다. 해설 강의를 보고 다시 한번 강의를 복습해봐야겠다.

0개의 댓글