GitHub

https://github.com/Choidongjun0830

Spring 72

[Spring DB2] 데이터 접근 기술 - Querydsl

DSL 도메인 + 특화 + 언어 특정한 도메인에 초점을 맞춘 제한적인 표현력을 가진 컴퓨터 프로그래밍 언어 특징 : 단순, 간결, 유창 QueryDSL 쿼리 + 도메인 + 특화 + 언어 쿼리에 특화된 프로그래밍 언어 단순, 간결, 유창 다양한 저장소 쿼리 기능 통합 자바 코드로 쿼리를 작성할 수 있다. JPA, MongoDB, SQL 같은 기술들을 위해 type-safe SQL을 만드는 프레임 워크 SpringData프로젝트의 약점은 조회. Querydsl로 복잡한 조회 기능을 보완 가능(복잡한 쿼리, 동적 쿼리) 컴파일 시점에 sql 오류를 잡아준다. Querydsl은 스프링 예외 추상화를 해주지 않는다. 그래서 JPA에서처럼 @Repository에서 스프링 예외 추상화를 처리해준다. Querydsl ..

Spring 2024.03.25

[Spring DB2] 데이터 접근 기술 - 스프링 데이터 JPA

스프링 데이터 JPA 주요 기능 공통 인터페이스 기능 JPARepository 인터페이스를 통해서 기본적인 CRUD 기능을 제공 공통화 가능한 기능이 거의 모두 포함되어 있음. 쿼리 메서드 기능 인터페이스에 메서드만 적어두면, 메서드 이름을 분석해서 필요한 JPQL을 만들고 실행해준다. JPQL은 JPA가 SQL로 번역해서 실행한다. 규칙 조회 : find..By, read..By, query..By, get..By ex) findByUsernameAndAgeGreaterThan(String username, int age) COUNT: count..By / 반환 타입은 long EXIST: exists..By / 반환 타입은 boolean 삭제 : delete.. By, remove..By / 반환 타..

Spring 2024.03.21

[Spring DB2] 데이터 접근 기술 - JPA

JPA는 ORM 데이터 접근 기술을 제공한다. JdbcTemplate이나 MyBatis같은 SQL 매퍼 기술은 개발자가 SQL을 직접 작성해야 하지만, JPA는 SQL도 JPA가 대신 작성해주고, 처리해준다. ORM 개념 SQL 중심적인 개발의 문제 무한 반복하는 select, update, insert, ... 코드를 계속해서 작성해야한다. 만약 필드가 추가되면 모든 쿼리들을 수정해야하는 번거로움이 있다. 객체를 관계형 데이터베이스에 저장하려면 객체를 SQL로 변환해서 데이터베이스에 조회하거나 넣어야 한다. 그런데 객체를 SQL로 변환하는 것은 개발자가 하는 것이다. 또, 객체에는 상속이 있지만, 관계형 데이터베이스에는 상속이 없다. 그래서 조회할 때는 두 테이블을 조인해야하고, 넣을 때는 데이터를 분..

Spring 2024.03.19

[Spring DB2] 데이터 접근 기술 - MyBatis

MyBatis는 JdbcTemplate보다 더 많은 기능을 제공하는 SQL Mapper이고, JdbcTemplate가 제공하는 대부분의 기능을 제공한다. 하지만 MyBatis가 매력적인 점은 SQL을 XML에 편리하게 작성할 수 있고, 동적 쿼리를 매우 편리하게 작성할 수 있다는 점이다. MyBatis를 사용하기 위해서 //build.gradle에 추가 //MyBatis 추가 implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.1' //application.properties에 추가 #MyBatis mybatis.type-aliases-package = hello.itemservice.domain mybatis.configura..

Spring 2024.03.18

[Spring DB2] 데이터 접근 기술 - 테스트

데이터 접근 기술을 테스트할 때 어떤 식으로 할 것인지를 배우는 챕터 테스트에서 중요한 원칙 테스트는 다른 테스트와 격리해야 한다. 테스트는 반복해서 실행할 수 있어야 한다. 테스트 - 데이터베이스 연동 먼저 데이터베이스 연동을 위해 test#application.properties에 아래 코드를 작성한다. spring.profiles.active=test spring.datasource.url=jdbc:h2:tcp://localhost/~/test2 spring.datasource.username=sa spring.datasource.password= #jdbcTemplate sql log logging.level.org.springframework.jdbc=debug @SpringBootTest cl..

Spring 2024.03.17

[Spring DB2] 데이터 접근 기술 - 스프링 JdbcTemplate-2

JdbcTemplate - 이름 지정 파라미터 String sql = "update item set item_name=?,price=?, quantity=? where id=? 원래 이런 sql 코드였는데 String sql = "update item set item_name=?,quantity=?,price=? where id=? 이렇게 바뀌면 quantity와 price의 데이터 바인딩 순서가 바뀐다. 그러면 바인딩 코드도 바꿔야 하는 문제가 발생한다. 그래서 파라미터를 순서대로 바인딩하는 것이 아니라 이름을 지정해서 파라미터를 바인딩하는 'NamedParameterJdbcTemplate'라는 기능을 제공한다. /** * NamedParameterJdbcTemplate * SqlParameterSou..

Spring 2024.03.14

[Spring DB2] 데이터 접근 기술 - 스프링 JdbcTemplate-1

SQL을 직접 사용하는 경우에 스프링이 제공하는 JdbcTemplate는 JDBC를 매우 편리하게 사용할 수 있도록 도와주어 좋은 선택지다. 장점 설정의 편리함 JdbcTemplate는 'spring-jdbc' 라이브러리에 포함되어 있는데 이 라이브러리는 스프링으로 JDBC를 사용할 때 기본적으로 사용되는 라이브러리라서 별도의 설정이 필요없다. 반복 문제 해결 JdbcTemplate는 템플릿 콜백 패턴을 사용해서, JDBC를 직접 사용할 때 발생하는 반복되는 작업을 대신 처리해준다. 대신해주는 반복되는 작업들 커넥션 획득 statement를 준비하고 실행 결과를 반복하도록 루프 실행 커넥션, statement, resultset 종료 트랜잭션을 위한 커넥션 동기화 예외 발생시 스프링 예외 변환기 실 개발..

Spring 2024.03.14

[Spring DB2] 데이터 접근 기술 - 시작

제대로 강의를 듣기 전에 데이터 접근 기술을 배우기 위한 기본 소스 코드를 살펴본다. public interface ItemRepository { Item save(Item item); void update(Long itemId, ItemUpdateDto updateParam); Optional findById(Long id); List findAll(ItemSearchCond cond); //검색 조건 } DTO(data transfer object) 데이터 전송 객체 DTO는 기능은 없고 데이터를 전달만 하는 용도로 사용되는 객체를 의미 DTO에 기능이 없어야만 하는 것은 아님. 객체의 주 목적이 데이터를 전송하는 것이라면 DTO라고 할 수 있다. 객체 이름에 DTO를 꼭 붙여야 하는 것은 아니지만,..

Spring 2024.03.11

[Spring DB 1편 듣고 복습, 토이 프로젝트 수정] 6. 스프링과 문제 해결 - 예외 처리, 반복

체크 예외와 인터페이스 서비스 계층은 가급적 다른 구현 기술에 의존하지 않고 순수한 비즈니스 코드만 존재하는 것이 좋으므로, 예외에 대한 의존도 해결해야 한다. SQLException 같은 체크 예외를 런타임 예외로 전환해서 서비스 계층으로 던지면, 서비스 계층이 이 예외를 무시할 수 있어서 특정 구현 기술에 의존하는 부분을 제거하고 서비스 계층을 순수하게 유지할 수 있다. MemberRepository라는 인터페이스를 도입해서 구현 기술을 쉽게 변경할 수 있게 해야한다. MemberRepository 인터페이스를 도입하여 JdbcMemberRepository나 JpaMemberRepository라는 구현 클래스를 만들어서 사용하고, MemberService에서는 MemberRepository 인터페이스..

Spring 2024.03.09

[Spring DB 1편 듣고 복습, 토이 프로젝트 수정] 5. 자바 예외 이해

Object: 예외도 객체이므로, 예외의 최상위 부모도 Object Throwable: 최상위 예외 Error: 메모리 부족이나 시스템 오류같이 애플리케이션에서 복구 불가능한 시스템 예외. Throwable을 catch로 잡으려 하면 Error도 잡혀서 Throwable은 잡으려 하면 안됨. Exception부터 잡아야 하는 오류로 생각해야함. Exceptions 체크 예외: 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외. RuntimeException을 제외하고 Exceptions의 하위 예외는 모두 체크 예외임. 체크 예외는 잡아서 처리하거나, 밖으로 던지도록 선언해야함. 개발자가 실수로 예외를 누락하지 않도록 컴파일러를 통해 문제를 잡아주는 장점이 있지만, 모든 체크 예외를 처리해주어야..

Spring 2024.03.02
728x90