들어가기 전 이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. 스프링 데이터 JPA와 트레이드 오프 중간에서 JpaItemRepositoryV2가 ItemService와 JpaItemRepository의 어댑터 역할을 해준 덕분에 ItemService가 사용하는 ItemRepository 인터페이스를 그대로 유지할 수 있고, 클라이언트인 ItemService의 코드를 변경하지 않아도 되는 장점이 있다. 그런데 이 때 한 가지 고민이 생긴다. Adapator를 사용해서 Service 계층과 논리적으로도 완벽히 계층 분리를 할 수 있었지만, Adapter가 하나 더 추가되면서 전체 구조가 너무 복잡해진다는 것이다. 고민 구조를 맞추기 위해서 중간에 어댑터(JpaItemRepositoryV2 - S..
들어가기 전 이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. Query DSL의 필요성 JPA의 문제점은 다음과 같다. 우리가 작성하는 쿼리는 문자열이다. 따라서 타입 체크가 불가능하고, 잘못된 문법도 실행 전까지는 알 수 없다. 에러는 크게 컴파일 에러, 런타임 에러가 있는 것으로 볼 수 있다. 쿼리를 실행해서 알게 되는 것은 런타임 에러다. 런타임 에러는 나쁜 사용자 경험을 줄 수 있는 에러다. SQL을 작성하기 위해서는 도메인의 필드를 모두 암기해야한다. 이것은 한계가 있다. 만약 SQL이 클래스처럼 타입이 있고 자바 코드로 작성할 수 있다면 어떨까? 그리고 타입 체크까지 해준다면 어떨까? 이런 형태로 작성할 수 있게 된다면 컴파일 시 에러 체크가 가능해진다. Query DSL이 이런 ..
Spring Data와 Spring Data JPA 예전에는 RDBMS에 모든 데이터를 저장한 후에 처리하는 형식이었다. 그렇지만 최근에는 MongDB, Redis 등 다양한 형태의 DB가 등장했다. 이 모든 DB들은 궁극적으로는 소위 말하는 데이터의 CRUD를 하는데, 이 말은 비슷한 형태로 동작한다는 것을 의미한다. 스프링 진영에서는 다양한 DB에 공통적인 인터페이스를 제공하고자 Spring Data 인터페이스를 제공한다. 스프링 데이터 JPA는 인터페이스의 구현체 역할을 한다. 그렇지만 스프링 데이터 JPA는 단순한 통합은 아니다. 아래 같은 기능을 제공해준다. CRUD + 쿼리 동일한 인터페이스 페이징 처리 메서드 이름으로 쿼리 생성 스프링 MVC에서 ID 값만 넘겨도 도메인 클래스로 바인딩 됨...
들어가기 전 이 글은 인프런 영한님의 스프링 DB 2편 - 데이터 접근 활용 기술을 공부하며 작성한 글입니다. JPA 시작 JPA는 ORM 데이터 접근 기술을 제공한다. MyBatis, JdbcTemplate은 SQL을 개발자가 직접 작성해야한다. 반면 JPA는 SQL를 개발자 대신 작성해준다. JPA는 일반적으로 QueryDSL이라는 기술과 함께 사용된다. JPA 필요성 SQL 의존적인 개발에서 벗어날 수 없다. SQL에 사용되는 많은 개발 쿼리들을 무한히 반복해서 작성해야 함. 객체에 필드가 하나 추가되는 등의 변경점이 발생한다면, SQL을 모두 고쳐야 함. 객체 vs 관계형 데이터베이스의 패러다임이 불일치함. 객체와 관계형 데이터베이스의 차이가 발생함. (상속, 연관관계, 데이터 타입, 데이터 식별..
이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. MyBatis의 장점 SQL을 XML에 편리하게 작성할 수 있다. (라인이 길어져도 문자 더하기에 대한 불편함이 없다. 그림 추가) 동적 쿼리를 매우 편리하게 작성할 수 있다. MyBatis의 단점 MyBatis는 약간의 설정이 필요하다. 프로젝트에서 동적 쿼리와 복잡한 쿼리가 많다면 MyBatis를 사용하는 것이 좋다. 단순한 쿼리가 많은 경우 JdbcTemplate을 선택해서 사용하는 것이 좋다. 둘을 함께 사용해도 좋다. MyBatis의 설정 //MyBatis 추가 implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0' MyBatis를 사용하기 위해서는 MyBa..