전체 글
-
스프링 DB - 트랜잭션 DB 예제2(자동커밋, 수동커밋)Data Base/스프링 DB 2023. 11. 23. 16:46
트랜잭션 - DB예제 2 - 자동커밋, 수동 커밋 이전에 설명한 예제를 돌려보기 전에 먼저 자동 커밋, 수동 커밋에 대해 알아보자 예제에 사용되는 스키마는 다음과 같다. drop table member if exists cascade; create table member( member_id varchar(10), money integer not null default 0, primary key (member_id) ); 자동 커밋 트랜재션을 사용하려면 먼저 자동 커밋과 수동 커밋을 이해해야한다. 자동 커밋으로 설정하면 각각의 쿼리 실행 직후에 자동으로 커밋을 호출한다. 따라서 커밋이나 롤백을 직접 호출하지 않아도 되는 편리함이 있다. 하지만 쿼리를 하나하나 실행할 대 마다 자동으로 커밋이 되어버리기 때문..
-
스프링 DB - 데이터 페이스 연결 구조와 DB세션Data Base/스프링 DB 2023. 11. 23. 16:11
데이터베이스 연결 구조와 DB 세션 트랜잭션을 더 자세히 이해하기 위해 데이터베이스 서버 연결 구조와 DB세션에 대해 알아보자 데이터베이스 연결 구조1 사용자는 웹 어플리케이션 서버(WAS)나 DB접근 툴 같은 클라이언트를 사용해서 데이터베이스 서버에 접근할 수 있다. 클라이언트는 데이터베이스 서버에 연결을 요청하고 커넥션을 맺게 된다. 이때 데이터베이스 서버는 내부에 세션이라는 것을 만든다. 그리고 앞으로 해당 커넥션을 통한 요청은 이 세션을 통해서 실행하게 된다. 쉽게 이야기해서 개발자가 클라이언트를 통해 SQL을 전달하면 현재 커넥션에 연결된 세션이 SQL을 실행한다. 세션은 트랜잭션을 시작하고, 커밋 또는 롤백을 통해 트랜잭션을 종료한다. 그리고 이후에 새로운 트랜잭션을 다시 시작할 수 있다. 사..
-
스프링 DB - 트랜잭션 이해Data Base/스프링 DB 2023. 11. 23. 14:33
트랜잭션 - 개념 이해 데이터를 저장할 때 단순히 파일에 저장해도 되는데, 데이터베이스에 저장하는 이유는 무엇일까? 여러가지 이유가 있지만, 가장 대표적인 이유는 바로 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문이다. 트랜잭션을 이름 그래로 번역하면 거래라는 뜻이다. 이것을 쉽게 풀어서 이야기하면, 데이터베이스에서 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻한다. 그런데 한의 거래를 안전하게 터리하려면 생각보다 고려해야 할 점이 많다. 예를 들어서 A의 5000원을 B에게 계좌이체한다고 생각해보자. A의 잔고를 5000원 감하고, B의 잔고를 5000원 증가해야한다. 5000원 계좌이체 A의 잔고를 5000원 감소 B의 잔고를 5000원 증가 계좌이체라는 거래는 이렇게 2가지 작..
-
스프링 DB - DataSource 적용카테고리 없음 2023. 11. 23. 13:38
DataSource 적용 애플리케이션에 DataSource를 적용해보자 기존 코드를 유지하기 위해 기존 코드를 복사해서 새로 만들자 MemberRepositoryV0 ➡️ MemberRepositoryV1 MemberRepositoryV0Test ➡️ MemberRepositoryV1Test MemberRepositoryV1 package hello.jdbc.repository; import hello.jdbc.connection.DBConnectionUtil; import hello.jdbc.domain.Member; import lombok.extern.slf4j.Slf4j; import org.springframework.jdbc.support.JdbcUtils; import javax.sql.Da..
-
스프링 DB - DataSource 예제2 - 커넥션 풀Data Base/스프링 DB 2023. 11. 23. 11:50
DataSource 예제2 - 커넥션 풀 DataSource를 통해 커넥션 풀을 사용하는 예제를 알아보자 ConnectionTest 데이터소스 커넥션 풀 추가 @Test void dataSourceConnectionPool() throws SQLException, InterruptedException { //Spring에서 JDBC사용하면 자동으로 임포트된다. //커넥션 풀링 HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl(URL); dataSource.setUsername(USERNAME); dataSource.setPassword(PASSWORD); dataSource.setMaximumPoolSize(10); d..
-
스프링 DB - DataSource 예제1 - DriverManagerData Base/스프링 DB 2023. 11. 23. 09:57
DataSource 예제 1 - DriverMnager 예제를 통해 DataSource를 알아보자 과거 스프링 DB 게시물에서 개발했던 DriverManager를 통해 터넥션을 획득하는 방법을 확인해보자 Connection Test - 드라이버 매니저 package hello.jdbc.connection; import lombok.extern.slf4j.Slf4j; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import static hello.jdbc.connection.ConnectionConst.*; @Slf4j public class DBConnectionUtil { void driv..
-
Spring 기본 26 - 애노테이션 직접 만들기FrameWork/Spring&Spring-boot 2023. 11. 22. 12:55
애노테이션 직접 만들기 @Qualifier("mainDiscountPolicy")이렇게 문자를 적으면 컴파일시 타입 체크가 안된다. 다음과 같은 애노테이을 만들어서 문제를 해결할 수 있다. (문자는 compile 타임에 체크가 되지 않는다.) import org.springframework.beans.factory.annotation.Qualifier; import java.lang.annotation.*; @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @D..
-
Spring 기본 25 - 조회 빈 2개 이상(@Autowired필드 명,@Quilifier,@Primary)FrameWork/Spring&Spring-boot 2023. 11. 22. 12:34
조회 빈이 2개 이상 - 문제 @Autowired는 타입(Type)으로 조회한다. @Autowired private DiscountPolicy discountPolicy 타입으로 조회하기 때문에, 마치 다음 코드와 유사하게 동작한다.(실제로 더 많은 기능을 제공한다.) ac.getBean(DiscountPolicy.class) 앞 전 게시물에 스프링 빈 조회에서 다루었들이 타입으로 조회하면 선택된 빈이 2개 이상일때 문제가 발생한다. DiscountPolicy의 하위 타입인 FixDiscountPolicy, RateDiscountPolicy둘다 스프링 빈으로 선언해보자 @Component public class RateDiscountPolicy implements DiscountPolicy{} @Comp..