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 작성
'스파르타 코딩' 카테고리의 다른 글
[3주차] 키즈카페 조회 & 예약 사이트 만들기 (영수증 스캔, 카페 정보 크롤링) (2) | 2024.12.20 |
---|---|
[2주차] 키즈카페 조회 & 예약 사이트 만들기 (가격 정책, 회원 관리 & 조회) (2) | 2024.12.20 |
일정 관리 앱 제작 트러블 슈팅 (2) | 2024.10.17 |
[JDBC를 활용한 CRUD] 일정 관리 앱 만들기 과제 트러블슈팅 (3) | 2024.10.04 |
자바로 숫자 야구 게임 만들기 과제 트러블슈팅 (6) | 2024.09.24 |