Back-End/Study 16

DAO와 Repository 차이

영구 저장소 API 문제점 우리는 MySQL, Oracle, MongoDB 등 다양한 영구 저장소의 구현체를 사용해왔다. 그리고 어플리케이션에서 이러한 저장소에 접근하기 위해 벤더별로 저장소에서 제공하는 API를 통해 접근해왔다. 이 과정에서 어떤 문제가 있었을까. 구현체와 로직의 강한 결합 문제 만약 MySQL과 같은 특정 벤더의 영구 저장소를 사용하고 있을 때, Oracle로 변경해야 한다면 MySQL의 API를 사용한 모든 구현을 변경해주어야 하는 불편함이 생긴다. 계층 간 간섭 문제 레이어가 깨지는 문제는 결국 강한 결합 문제로 연결된다. MySQL의 API를 서비스 로직에서 사용했을 경우, 서비스 로직과 DB와 관련된 API가 강한 결합을 가지게 되어 영속성과 관련된 로직이 서비스 로직에 영향을..

Back-End/Study 2022.08.10

Lombok 라이브러리 어노테이션

@Getter @Setter 각각 접근자와 설정자 메서드를 작성해주는 Lombok 어노테이션으로 유명하다. 또, 생성자를 자동 생성해주는 Lombok 어노테이션에는 @NorgsConstructor 파라미터가 없는 기본 생성자 생성 @AllArgsConstructor 모든 필드 값을 파라미터로 받는 생성자를 만들어 줌 @RequiredArgsConstructor final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 만들어 줌 toString() 메소드를 작성하는 일도 @ToString 어노테이션만 붙여주면 자동으로 생성해 줌 @ToString(exclude = "id")와 같이 exclude를 사용하면 toString() 결과에서 id를 제외시킬 수 있음 //사용할 때 User user = ..

Back-End/Study 2022.08.04

JPAQueryFactory

쿼리 만들기 QueryDSL을 사용하기 위해서는 먼저 QueryDSL이 제공하는 JPAQueryFactory 클래스의 인스턴스를 생성해야 한다. JPAQuertFactory queryFactory = new JPAQueryFactory(em); EntityManager를 ㅈ입하여 인스턴스를 생성해야 함 Spring Boot를 사용하면 다음과 같이 QueryFactory를 각 로직마다 주입해 줄 필요 없이 필드로 빼도 동시성 문제없이 각각 별도의 영속성 컨텐스트를 제공받아 작동함 @SpringBootTest @Transactional public class QueryDslBasicTest{ @Autowired EntityManager em; JPAQueryFactory queryFactory; public..

Back-End/Study 2022.08.01

유효성 검사 - @NotNull @NotEmpty @NotBlank

Java에서는 Bean Validation이라는 데이터 유효성 검사 프레임워크를 제공하고 있다. Spring에서 이 기능을 이용하면 더 유효성 검사를 편리하게 할 수 있다. build.gradle dependencies{ implementation 'org.springframework.boot:spring-boot-starter-validation' } spring에서 사용하기 위해 Spring Boot Vaildation Starter를 추가한다. @NotNull @NotEmpty @NotBlank @NotNull Null 값 체크 @NotEmpty Null, "" 체크 @NotBlank Null, "", 공백을 포함한 빈 값 체크

Back-End/Study 2022.07.30

순환참조 해결 @JsonIgnore, @JsonManagedReference, @JsonBackReference

사용 방법 일단 이를 사용하기 위해서는 build.gradle 설정이 필요함. 다음을 dependencied에 추가 순환 참조 JPA는 디폴트로 매핑된 데이터에 대해 FetchType.LAZY (게으른 불러오기)를 사용함. 예를 들어, User라는 Entity와 Account라는 Entity가 서로 양방향 참조 (1:N)을 하고 있다고 하자. public class User{ @Id private Long user_id; ... @OneToMany(mappedBy = "user") private List accounts; } public class Account{ @Id private long id; ... @ManyToOne @JoinColumn(name="user_id") private User us..

Back-End/Study 2022.07.29