벌써 곧 10월이다. 여행이 예정돼 있어서 다음 TIL은 10월 14일부터 올릴 예정이다.
여행도 가고, 푹 쉬고 와서 다시 열심히 달려보겠습니다. 일단 오늘도 파이팅
처음에 package를 생성하고 구조를 잡는다
예를 들어 ) controller, dto, entity, repository, service 이렇게 말이다.
entity는 5형제 어노테이션이 있다.
@Getter @Entity @NoArgsConstructor @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Getter는 getter 메서드 자동 생성 해 주고
@Entity는 db 테이블과 매핑되는 엔티티인 걸 알려주고
@NoArgsConstructor는 파라미터가 없는 기본 생성자를 자동으로 생성
@Id는 기본 키
@GeneratedValue(strategy = GenerationType.IDENTITY)은 기본 키 생성을 자동으로 처리
Service는 2형제가 있다.
@Service @RequiredArgsConstructor
@Service는 비즈니스 로직을 처리하는 서비스 계층을 나타냄
@RequiredArgsConstructor는 초기화되지 않는 final 필드 or @NonNull이 붙은 필드에 대해 생성자 생성해 줌
의존성 주입을 위해 생성자를 자동으로 생성하여 코드가 간결해지고 유지 보수가 용이해진다.
Controller도 어노테이션 2개 있다.
@RestController @RequiredArgsConstructor
CRUD에서 R이 아닌 로직이 포함된 컨트롤러를 제외한 메소드에는 @Transactional을 붙이면 좋다.
why? r 빼고 나머지 cud는 db에 변화를 준다. @Transactional을 붙이면, 데이터의 무결성을 유지하고,
오류 발생 시 롤백 해서 안전하게 데이터 처리 가능
dto에 @getter 잊으면 안 됨
dto는 뭐의 약자일까? > data transfer object
dto를 사용하는 이유? > Controller와 Service 사이의 결합도를 낮추기 위해, 유지 보수성과 확장성을 높임.
결론: 3 Layered Architecture 사용 이유 → 결합도를 낮춰서 (각자의 역할에 충실) + 유지 보수성 + 확장성
@OneToMany는 @ManyToOne(fetch = FetchType.LAZY)이 없으면 존재할 수 없다.
(이건 법칙) → ManyToOne부터 일단 넣고 생각하기
즉, 자식 엔티티가 부모 엔티티를 참조해야 함
@ManyToOne(fetch = FetchType.LAZY) 더 개수가 많은 놈한테 건다.
ex) 댓글 vs 게시글 → 댓글에 달아야 함,
N:M은 중간 테이블 필요하다. (리스트를 필드에 선언할 수 없기 때문에)
중간 테이블에 @ManyToOne(fetch = FetchType.LAZY) 2개 선언.
@ManyToOne에게 무조건 해야되는거
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = “상대방id”)
@OneToMany 무조건 해야되는거
@OneToMany(mappedBy = “나자신”)
-----------------------
10월 14일부터 달리겠습니다 ~ 잘 쉬고 여행 잘 하다 오겠습니다 파이팅~
'TIL' 카테고리의 다른 글
TIL - 2024/10/14 (0) | 2024.10.14 |
---|---|
TIL - 2024/09/27 (0) | 2024.09.27 |
TIL - 2024/09/26 (0) | 2024.09.27 |
TIL - 2024/09/25 (0) | 2024.09.25 |
TIL - 2024/09/24 (0) | 2024.09.24 |