스파르타 코딩

Spring 심화 주차 개인 과제 트러블슈팅

스타르타 2024. 10. 31. 12:23
반응형

ScheduleService, UserService, CommentService 서비스 클래스에 @Transactional 추가

1. 일관성 있는 데이터베이스 상태 유지
Service 클래스의 모든 메서드가 트랜젝션 내에서 실행되어 데이터베이스에 여러 작업이 하나의 트랜젝션으로 묶여 일관성을 보장할 수 있다.


2. JPA의 더티체킹 활용
엔티티 수정 시 save() 메서드를 호출하지 않아도 자동으로 변경 사항이 감지되고, 데이터베이스에 반영된다.


3. 조회 전용 메서드에는 @Transactional(readOnly = true) 적용
데이터 변경을 방지하고, 성능을 최적화

 

엔티티에서 DTO로 유효성 검사 어노테이션 옮기기

>> 엔티티에 유효성 검사를 붙이면 영속화 시점에 유효성 검사가 일어남.
객체 생성 시점에 유효성 검사가 필요하다면, 엔티티가 아닌 DTO에 유효성 검사 어노테이션을 붙이는 것이 더 적절함.

@Column: 엔티티 필드에 붙여 데이터베이스 테이블 열과 매핑할 때 사용.
유효성 검사 어노테이션 (@NotNull, @Size 등): DTO에 붙여 클라이언트에서 들어오는 데이터의 유효성을 검증할 때 사용.

 

CommentService에서 엔티티 대신 DTO를 통해 요청을 받고 응답을 반환하는 구조로 수정

1. 엔티티 보호 및 캡슐화
2. 데이터 유효성 검사와 비즈니스 로직의 분리
3. 변경에 유연한 구조
4. 클린 아키텍처 및 유지보수성 향상

 

이전 과제 Lv 4. 유저 CRUD  필수 개선 - 유저와 일정은 N:M 관계

>> 유저와 일정 간 N:M 관계를 설정하기 위해 중간 엔티티 UserSchedule을 설정함. 여기서 유저와 일정이 다대다 관계를 가질 수 있도록 하고, 지연 로딩을 적용하여 성능을 최적화.

1. User 엔티티: UserSchedule과 @OneToMany 관계를 설정하여 유저가 다수의 일정을 가질 수 있도록 수정.
2. Schedule 엔티티: UserSchedule과 @OneToMany 관계를 설정하여 일정이 다수의 유저와 연결될 수 있도록 수정.
3. UserSchedule 중간 엔티티: User와 Schedule 간의 N:M 관계를 관리하는 중간 엔티티로 설정하고, id를 고유 식별자로 추가.

 

이전 과제 도전 기능 Lv 1. 회원가입(JWT), Lv 2. 로그인(인증), Lv 3. 권한 확인(인가) 구현

 

API 명세 및 ERD 작성

반응형