<배경> - 어떤 현상을 발견했는가?
1. deleteSchedule 반환 타입 오류
2. Entity 이름 중복
3. Auditing 설정 문제
<발단> 이런 장애가 생길 수 있다는 것을 인지
1. deleteSchedule 반환 타입 오류
-deleteSchedule은 삭제 메소드이기 때문에 삭제만 수행하고 데이터를 반환하지 않아도 되는데 반환타입을 Schedule로 잘못 설정함.
2. Entity 이름 중복
-Hibernate에서 @Entity를 사용할 때 클래스 이름이 중복되는 경우 두 entity를 동일한 이름의 테이블로 인식함.
-이때, entityManagerFactory의 bean 생성 중 BeanCreationException이 발생.
-애플리케이션 실행 실패
3. Auditing 설정 문제
-Spring Data JPA의 Auditing 기능을 활성화하지 않아서 생긴 오류
-활성화하지 않을 시 createAt과 updateAt 값이 자동으로 설정되지 않음.
<전개> 장애를 대응, 해결하던 와중에
1. deleteSchedule 반환 타입 오류 (해결)
-public schedule deleteSchedule 을 public void deleteSchedule 로 수정
-반환값을 제거하여 오류 해결
2. Entity 이름 중복
-@Entity 어노테이션에 name 속성을 추가하여 레벨별로 엔티티 이름을 주었고 충돌을 방지
3. Auditing 설정 문제 (해결)
-BaseEntity에 @MappedSuperclass, @EntityListeners 를 추가하여 JPA Auditing 기능을 활성화
-@MappedSuperclass : 이 클래스가 다른 엔티티의 공통 속성을 가지도록 설정
-@EntityListeners(AuditingEntityListener.class) : Auditing 기능 활성화, 각 entity의 생성 및 수정 시간이 자동으로 기록되게 함
<위기> 또 다른 장애 발견 또는 간단하게 해결할 수 없다는 것을 알게 되어서
& <절정> 근본적인 해결을 위해 이런 방법으로 접근하였다.
1. 해결
2. Entity 이름 중복
-Entity 뿐만 아니라 repository에도 똑같은 오류 발생
-@Profile 어노테이션을 사용해 특정 레벨만 활성화 할 수 있도록 수정
3. 해결
<결말> 따라서 이런 방법을 통해 근본적으로 해결 및 앞으로 유지, 보수에 용이하게 개선하게 되었다.
1. 메소드 반환 타입 주의
메소드 역할에 올바른 반환 타입을 지정하는 것이 중요하다는 것을 깨달았고, 특히 삭제와 같은 반환값이 필요하지 않는 경우에는 void 타입을 사용하여 코드의 유지 보수를 높이는 것이 중요하다는 것을 알게 되었다.
2. 패키지 구조, 엔티티
저번 과제처럼 레벨별로 패키지를 나누고 관리하는 것이 보기 좋을 것 같아서 이번에도 레벨별로 나누고 lv1~4로 갈수록 코드 전체가 변경되는 것이 아니라 추가되고 일부 수정이 되다보니 복사 붙여넣기를 해서 가져왔는데, 동일한 이름의 테이블로 매핑되는 엔티티가 있으면 안된다는 것을 한번 더 깨닫게 되었다. controller나 service의 경우는 저번과 동일하게 바로 profile을 설정하여 구분을 했는데 repository에는 @Repository, @Profile 두개를 동시에 써야한다는 것을 알게 되었고, Entity에는 name 속성을 추가할 수 있다는 것을 알게 되었다.
3. JPA Auditing 기능을 활성화
JPA Auditing 기능을 활성화해야만 각 엔티티의 생성 및 수정 시간이 자동으로 기록되고 관리된다는 것을 알게 되었고, BaseEntity를 사용해서 공통 필드를 관리하면 코드가 일관성 있고, 이렇게 오류가 났을 시에 하나씩 고치지 않고 한번에 고쳐진다는 유지보수의 장점을 알게 되었다.
'내배캠 > 프로젝트, 개인과제 트러블슈팅' 카테고리의 다른 글
[내일배움캠프/백엔드] Spring 심화 개인과제 트러블 슈팅 (1) | 2024.11.29 |
---|---|
[내일배움캠프/백엔드] Spring 숙련. 뉴스 피드 프로젝트 트러블 슈팅 (1) | 2024.11.22 |
[내일배움캠프/백엔드] Spring 입문 개인과제 일정 관리 앱 만들기 트러블슈팅 (0) | 2024.11.08 |
[내일배움캠프/백엔드] Java 개인과제2. 숫자 야구 게임 만들기 트러블슈팅 (1) | 2024.10.25 |
[내일배움캠프/백엔드] Java 개인과제. 계산기 만들기 트러블슈팅 (0) | 2024.10.17 |