Spring 45

[인프런/스프링 DB 2편] 4. 데이터 접근 기술 (5) Query DSL

1. Query DSL DSL (도메인 특화 언어) QueryDSL : 쿼리에 특화된 프로그래밍 언어 원래 쿼리 작성 -> 실행해야 오류를 알 수 있음 (컴파일X, 런타임 에러) Query DSL -> 주로 JPA(JPQL) 같은 기술을 위해 쿼리를 자바코드처럼 type-safe (컴파일시 에러체크) 하게 개발할 수 있게 지원하는 프레임워크 JPA의 JPQL을 만들어주는 빌더 역할 (QueryDSL -> JPQL -> SQL) 2. Query DSL 적용 1) build.gradle plugins { id 'org.springframework.boot' version '2.6.5' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'jav..

Spring 2023.07.17

[인프런/스프링 DB 2편] 4. 데이터 접근 기술 (4) SpringDataJPA

1. Spring Data JPA ✔ JPA를 편리하게 사용하기 위한 라이브러리 1) 발전과정 (1) 순수 JDBC (2) Spring JdbcTemplate (3) Spring + JPA (4) Spring Data JPA -> JpaRepository 인터페이스 2) Spring Data JPA 주요 기능 (1) 공통 인터페이스 public interface ItemRepository extends JpaRepository { } JpaRepository 인터페이스를 통해 기본적인 CRUD 기능 제공 공통화 가능한 기능이 거의 모두 포함 (페이징 처리도 포함) 사용법 : JpaRepository 인터페이스를 상속받고, 제네릭에 관리할 -> 동적 프록시 기술을 사용해서 스프링 데이터 JPA가 알아서 구..

Spring 2023.07.13

[인프런/스프링 DB 2편] 4. 데이터 접근 기술 (3) JPA

1. SQL 매퍼 기술의 문제점 1) SQL 의존적 - 개발자가 SQL로 직접 변환 -> CRUD 코드의 반복 작성 2) 패러다임 불일치 - 객체 vs 관계형 데이터베이스 - 두 객체가 상속관계일 때, 두 객체에 각각 INSERT 등을 수행해야 함 - Member 객체와 Team 객체가 연관관계에 있을 때 객체는 참조를 사용 (member.getTeam()), 테이블을 외래키 사용 (JOIN ON M.TEAM_ID = T.TEAM_ID) -> 객체를 테이블에 맞추어 모델링할 때 -> 객체다운 모델링을 할 때 - DB에서 아이디를 통해 조회한 Member 객체 2개는 서로 다르다 2. JPA (Java Persistence API) 자바 진영의 ORM 기술 표준 ORM (Object-Relational M..

Spring 2023.07.10

[인프런/스프링 DB 2편] 4. 데이터 접근 기술 (2) MyBatis

마이바이트 공식 매뉴얼 MyBatis – 마이바티스 3 | 소개 마이바티스 스프링 공식 매뉴얼 https://mybatis.org/spring/ko/index.html 1. JdbcTemplate 과 MyBatis 비교 * SQL이 여러줄일 때 (1) JdbcTemplate String sql = "update item " + "set item_name=:itemName, price=:price, quantity=:quantity " + "where id=:id"; (2) MyBatis update item set item_name=#{itemName}, price=#{price}, quantity=#{quantity} where id = #{id} * 동적 쿼리 (1) JdbcTemplate Strin..

Spring 2023.07.06

[인프런/스프링 DB 2편] 3. 데이터 접근 기술 - 테스트와 DB 연동

📌 테스트의 중요한 원칙 - 테스트는 다른 테스트와 격리해야 함 (격리성) - 테스트는 반복해서 실행할 수 있어야 함 1. 서버와 테스트의 데이터베이스 분리 로컬에서 사용하는 애플리케이션 서버와 테스트가 같은 데이터베이스 사용하면 X -> 데이터베이스에 이미 로컬에서 저장한 데이터들이 저장되어 있어서 테스트 제대로 수행 X -> 서버와 테스트의 데이터베이스 분리 ( 테스트는 격리성 보장되어있어야 함 ! ) local에서 접근하는 서버 전용 데이터베이스 : jdbc:h2:tcp://localhost/~/test test 케이스에서 접근하는 전용 데이터베이스 : jdbc:h2:tcp://localhost/~/testcase 1) testcase 데이터베이스에서 item 테이블 생성 후 접속 정보 변경 * t..

Spring 2023.06.30

[인프런/스프링 DB 2편] 2. 데이터 접근 기술 (1) JdbcTemplate

1. JdbcTemplate 1) JdbcTemplate 장단점 장점 반복 문제 해결 템플릿 콜백 패턴을 사용해서 JDBC를 직접 사용할 때 발생하는 반복 작업 대신 처리 개발자는 SQL 작성, 전달할 파라미터 정의, 응답 값 매핑 커넥션 획득 statement 준비, 실행 결과 반복 커넥션 종료, statement, resultset 종료 커넥션 동기화 예외 발생시 스프링 예외 변환기 실행 설정 편리 스프링으로 JDBC를 사용할 때 기본으로 사용되는 spring-jdbc 라이브러리에 포함되어 있음 단점 동적 SQL 해결하기 어려움 2) JdbcTemplate 설정 * build.gradle dependencies { //JdbcTemplate 추가 implementation 'org.springfram..

Spring 2023.06.28

[인프런/스프링 DB 2편] 1. 데이터 접근 기술

1. 데이터 접근 기술 소개 1. SQLMapper - 개발자는 SQL만 작성하면 해당 SQL의 결과를 객체로 편리하게 매핑해줌 - JDBC를 직접 사용할 때 발생하는 중복 제거, 기타 개발자에게 편리한 여러 기능 제공 JdbcTemplate Mybatis 2. ORM 관련 기술 - 기본적인 SQL은 JPA가 대신 작성하고 처리. 개발자는 저장하고 싶은 객체를 자바 컬렉션에 저장하고 조회하듯이 사용하면 ORM 기술이 데이터베이스에 해당 객체를 저장, 조회 - JPA -> 자바 진영의 ORM 표준, Hibernate -> JPA에서 가장 많이 사용하는 구현체 (자바에서 ORM 사용할 때는 JPA 인터페이스 사용, 그 구현체로 하이버네이트 사용) - 스프링 데이터 JPA, Querydsl은 JPA를 더 편리..

Spring 2023.06.28

[인프런/스프링 DB 1편] 6. 스프링과 문제 해결 - 예외 처리, 반복

트랜잭션 적용 시, 예외 누수 문제 해결 1. 체크 예외와 인터페이스 현재 각 Repository 객체의 반복 save(), findById(), update(), delete() -> Repository 인터페이스 도입 * MemberRepository 인터페이스 package hello.jdbc.repository; import hello.jdbc.domain.Member; public interface MemberRepository { Member save(Member member); Member findById(String memberId); void update(String memberId, int money); void delete(String memberId); } -> 특정 기술에 종속되지..

Spring 2023.06.26

[인프런/스프링 DB 1편] 5. 자바 예외

1. 예외 계층 Object : 예외의 최상위 부모도 Object Throwable : 최상위 예외 - 하위에 Exception과 Error가 있음. 이 예외는 잡으면 안됨. Error : 메모리 부족이나 심각한 시스템 오류같이 애플리케이션에서 복구 불가능한 시스템 예외. 이 예외는 잡으면 안됨. (처리할 수 X) 상위 예외를 catch로 잡으면 그 하위 예외까지 함께 잡음. -> Throwable 예외를 잡으면 안되는 이유 -> Error 예외까지 잡아버릴 수 있기 때문 (잡으면 안되는데) -> Exception 부터 잡아야 함 Error도 언체크 예외 Exception : 체크 예외 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외 Exception과 그 하위 예외는 모두 컴파일러가 체크하는..

Spring 2023.06.24

[인프런/스프링 DB 1편] 4. 스프링과 문제 해결 - 트랜잭션

1. 트랜잭션 문제점 1) 문제점 서비스 계층은 순수하게 유지해야 함 서비스 계층 : 핵심 비즈니스 로직 -> 특정 기술에 종속 X -> 최대한 순수 자바 코드로 유지 -> 변경 최소화 예) MemberServiceV1 - 특정 기술에 종속 X, 순수한 비즈니스 로직으로만 존재 예) MemberServiceV2 - 트랜잭션 사용하기 위해 DataSource, Connection, SQLException같은 JDBC 기술에 의존 * 지금까지 개발한 애플리케이션의 문제점 3가지 트랜잭션 문제 JDBC 구현 기술이 서비스 계층에 누수되는 문제 서비스 계층을 순수하게 유지하기 위해 데이터 접근 계층(Repository)에 JDBC 코드를 몰았는데, 트랜잭션을 적용하기 위해 JDBC 구현 기술이 서비스 계층에 누..

Spring 2023.06.21