Spring (49) 썸네일형 리스트형 [Spring DB] 데이터 접근 기술 - MyBatis 목차MyBatis 소개MyBatis 설정MyBatis 적용1 - 기본MyBatis 적용2 - 설정과 실행MyBatis 적용3 - 분석MyBatis 기능 정리1 - 동적 쿼리MyBatis 기능 정리2 - 기타 기능 MyBatis 소개MyBatis는 앞서 설명한 JdbcTemplate보다 더 많은 기능을 제공하는 SQL Mapper 이다. 기본적으로 JdbcTemplate이 제공하는 대부분의 기능을 제공한다. JdbcTemplate과 비교해서 MyBatis의 가장 매력적인 점은 SQL을 XML에 편리하게 작성할 수 있고또 동적 쿼리를 매우 편리하게 작성할 수 있다는 점이다. 1️⃣ SQL이 여러줄에 걸쳐 있을 때 비교 JdbcTemplate - SQL 여러줄String sql = "update it.. [Spring DB] DB 테스트 - 데이터 롤백 목차테스트 - 데이터베이스 연동테스트 - 데이터베이스 분리테스트 - 데이터 롤백테스트 - @Transactional테스트 - 임베디드 모드 DB테스트 - 스프링 부트와 임베디드 모드 테스트 - 데이터베이스 연동데이터베이스에 연동하는 테스트에 대해서 알아보자. 데이터 접근 기술은 실제 데이터베이스에 접근해서 데이터를 잘 저장하고 조회할 수 있는지 확인하는 것이 필요하다.spring.profiles.active=testspring.datasource.url=jdbc:h2:tcp://localhost/~/testspring.datasource.username=salogging.level.org.springframework.jdbc=debug테스트 케이스는 src/test 에 있기 때문에, 실행하면 src/te.. [Spring DB] 데이터 접근 기술 - JdbcTemplate 목차JdbcTemplate 설정JdbcTemplate 소개JdbcTemplate 적용동적 쿼리 문제구성과 실행JdbcTemplate - NamedParameterJdbcTemplateJdbcTemplate - SimpleJdbcInsertJdbcTemplate 정리 JdbcTemplate 설정1️⃣ MySql 스키마 생성 2️⃣ build.gradle//JdbcTemplate 추가implementation 'org.springframework.boot:spring-boot-starter-jdbc'//mysql 데이터베이스 추가runtimeOnly 'com.mysql:mysql-connector-j' 3️⃣ application.propertiesspring.datasource.driver-class.. [Spring DB] 스프링 예외 추상화 DataAccessException 목차체크 예외와 인터페이스런타임 예외 적용데이터 접근 예외 직접 만들기스프링 예외 추상화 이해스프링 예외 추상화 적용JDBC 반복 문제 해결 - JdbcTemplate ✅ 체크 예외와 인터페이스서비스 계층은 가급적 특정 구현 기술에 의존하지 않고, 순수하게 유지하는 것이 좋다. 이렇게 하려면 예외에 대한 의존도 함께 해결해야한다. 예를 들어서 서비스가 처리할 수 없는 SQLException 에 대한 의존을 제거하려면 어떻게 해야할까? 서비스가 처리할 수 없으므로 리포지토리가 던지는 SQLException 체크 예외를 런타임 예외로 전환해서 서비스 계층에 던지자. 이렇게 하면 서비스 계층이 해당 예외를 무시할 수 있기 때문에, 특정 구현 기술에 의존하는 부분을 제거하고 서비스 계층을 순수하게 유지할 수 있.. [Spring DB] 예외 활용 방안 목차예외 계층예외 기본 규칙체크 예외 기본 이해언체크 예외 기본 이해체크 예외 활용언체크 예외 활용예외 포함과 스택 트레이스 예외 계층스프링이 제공하는 예외 추상화를 이해하기 위해서는 먼저 자바 기본 예외에 대한 이해가 필요하다. 예외의 기본 내용을 간단히 살펴보고, 실무에 필요한 체크 예외와 언체크 예외의 차이와 활용 방안에 대해서도 알아보자. 예외 계층 그림 Object : 예외도 객체이다. 모든 객체의 최상위 부모는 Object 이므로 예외의 최상위 부모도 Object 이다. Throwable : 최상위 예외이다. 하위에 Exception 과 Error 가 있다.Error : 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 애플리케이션 개발자는 이 예외를 .. [Spring DB] 트랜잭션 매니저 목차트랜잭션 추상화트랜잭션 동기화트랜잭션 문제 해결 - 트랜잭션 매니저트랜잭션 문제 해결 - 트랜잭션 템플릿트랜잭션 문제 해결 - 트랜잭션 AOP 스프링 부트의 자동 리소스 등록 애플리케이션 구조여러가지 애플리케이션 구조가 있지만, 가장 단순하면서 많이 사용하는 방법은 역할에 따라 3가지 계층으로 나누는 것 이다. 프레젠테이션 계층UI와 관련된 처리 담당웹 요청과 응답 사용자 요청을 검증주 사용 기술: 서블릿과 HTTP 같은 웹 기술, 스프링 MVC서비스 계층비즈니스 로직을 담당주 사용 기술: 가급적 특정 기술에 의존하지 않고, 순수 자바 코드로 작성데이터 접근 계층실제 데이터베이스에 접근하는 코드주 사용 기술: JDBC, JPA, File, Redis, Mongo.. 🤔 여기서 가장 중요한 곳은 어.. [Spring DB] 트랜잭션 적용 🪄 트랜잭션 - 적용전실제 애플리케이션에서 DB 트랜잭션을 사용해서 계좌이체 같이 원자성이 중요한 비즈니스 로직을 어떻게 구현할까? MemberService먼저 트랜잭션 없이 단순하게 계좌이체 비즈니스 로직만 구현@RequiredArgsConstructorpublic class MemberServiceV1 { private final MemberRepositoryV1 memberRepository; public void accountTransfer(String fromId, String toId, int money) throws SQLException { Member fromMember = memberRepository.findById(fromId); Member t.. [Spring DB] DB 락 🔐 DB 락세션1이 트랜잭션을 시작하고 데이터를 수정하는 동안 아직 커밋을 수행하지 않았는데, 세션2에서 동시에 같은 데이터 를 수정하게 되면 여러가지 문제가 발생한다. 바로 트랜잭션의 원자성이 깨지는 것이다. 여기에 더해서 세션1이 중간에 롤백을 하게 되면 세션2는 잘못된 데이터를 수정하는 문제가 발생한다. 이런 문제를 방지하려면, 세션이 트랜잭션을 시작하고 데이터를 수정하는 동안에는 커밋이나 롤백 전까지 다른 세션에 서 해당 데이터를 수정할 수 없게 막아야 한다. 세션1은 memberA 의 금액을 500원으로 변경하고 싶고, 세션2는 같은 memberA 의 금액을 1000원으로 변경하고 싶다.데이터베이스는 이런 문제를 해결하기 위해 락(Lock)이라는 개념을 제공한다.다음 예시를 통해 동시에 데.. [Spring DB] 트랜잭션 🪄 트랜잭션 데이터를 저장할 때 단순히 파일에 저장해도 되는데, 데이터베이스에 저장하는 이유는 무엇일까?여러가지 이유가 있지만, 가장 대표적인 이유는 바로 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문이다.트랜잭션을 이름 그대로 번역하면 거래라는 뜻이다. 쉽게 풀어서 이야기하면, 데이터베이스에서 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻한다. 그런데 하나의 거래를 안전하게 처리하려면 생각보다 고려해야 할 점이 많다. 예를 들어서 A의 5000원을 B에게 계좌이체한다고 생각해보자. A의 잔고를 5000원 감소하고, B의 잔고를 5000원 증가해야한다.5000원 계좌이체A의 잔고를 5000원 감소B의 잔고를 5000원 증가 계좌이체라는 거래는 이렇게 2가지 작업이 합쳐져서 하나의 .. [Spring DB] 커넥션 풀과 데이터 소스 🛁 커넥션 풀데이터베이스 커넥션을 매번 획득 데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거친다.애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다.DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다.DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달한다.DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다.DB는 커넥션 생성이 완료되었다는 응답을 보낸다.DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다. 이렇게 커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 많이 소모되는 일이다.DB는 물론이.. 이전 1 2 3 4 5 다음