Spring 학습
과제 구상
Entity와 Dto의 차이점 및 분리 이유
Entity
계층간 데이터 교환을 위해 사용하는 객체다.
Entity 클래스는 실제 DB 테이블과 매핑되는 핵심 클래스로, 데이터베이스의 테이블에 존재하는 컬럼들을 필드로 가지고 있다. Entity 클래스를 기준으로 테이블이 생성되고 스키마가 변경된다.
Entity는 데이터베이스 영속성의 목적으로 사용되는 객체이기 때문에 Request나 Response 값을 전달하는 클래스로 사용하는 것은 좋지 않다.
다양한 계층에서 Entity를 직접적으로 사용하게 된다면 원치 않게 Entity의 속성을 변경시킬 위험이 존재하며 Entitiy의 모든 속성이 불필요하게 외부에 노출될 가능성이 있다.
setter 메서드의 사용을 지양하는 것이 좋다.
Constructor 또는 Builder를 사용하여 불변 객체로 만들면 데이터 전달 과정에 있어 변조되지 않음을 보장할 수 있다.
DTO (Data Transfer Object)
Layer 간의 데이터 교환이 이루어질 수 있도록 하는 객체다.
getter, setter 메서드를 포함하고 있으며 이 외의 비즈니스 로직은 포함하지 않는다.
Controller 처럼 클라이언트와 직접 마주하는 계층에서는 Entity 대신 DTO를 이용해 데이터를 교환하여 DB처리 로직을 숨긴다.
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class MemoResponseDto {
private Long id;
private String username;
private String contents;
private LocalDateTime createdAt;
private LocalDateTime modifiedAt;
}
비슷한 실행 환경의 두 프로젝트에 한 쪽에만 두가지 오류가 생겼다.
gradle 혹은 application.properties에서 생긴 설정 문제 같은데 아직 해결하지 못하고 있다.
방법을 찾으면 기록할 예정...
BeanCreationException
Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1770
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended