[Spring DB] Transaction 적용 1.5 - 순수한 비즈니스 로직
·
Spring DB/Transaction
Application 근본 구조애플리케이션 구조중 가장 대중적인 구조는 프레젠테이션 - 서비스 -데이터 접근 계층 구조이다.각 계층의 역할을 요약하자면,프레젠테이션 - UI 담당, 웹 요청 / 응답 , 서블릿과 같은 HTTP 웹 기술 + MVC서비스 - 비즈니스 로직, 특정 기술 종속 X - > 순수 자바 코드로 작성하는 것이 국룰데이터 접근 - 실제 DB에 접근 하는 코드 -> JDBC, JPA 등내가 강조하고 싶은건, 서비스 계층(@Service) 에 들어있는 서비스 계층은 순수한 자바 코드로 작성하고 컨트롤러나 레포지토리 계층과의 종속성이 없게 작성해야한다는 점이다.어떠한 기술에 종속해야한다면 그것은 대부분 프레젠테이션 계층이나 데이터 접근 계층이 가져가기 때문에 비즈니스 로직은 아무 걱정 없이 정..
[Spring DB] Transaction 적용 1 - Connection 유지
·
Spring DB/Transaction
트랜잭션의 매커니즘은 사실 간단하다.트랜잭션 적용 대표적인 예시예시로, 회원 A가 회원 B에 1000원을 송금한다고 한다면, UPDATE가 2번 이루어져야 한다.근데 만약 회원 A에서 UPDATE가 완료되었는데 회원 B의 잔액 UPDATE가 이루어지기 직전에 서버가 닫혀 성공하지 못하면 롤백하면 된다. 물론 성공하면 커밋하면 된다.트랜잭션 시작하기트랜잭션은 어떤 Controller - Service - Repository 계층 중, 어느 계층에서 실행되어야 할까?이 그림을 보면, 트랜잭션은 서비스 계층에서 실행되어야 한다는 걸 알 수 있다. 왜냐하면, 서비스 계층은 중요한 비즈니스 로직이 존재하는데, 이러한 로직이 잘못되면 해당 문제가 발생한 부분을 포함하여 롤백을 해야하기 때문이다.단 먼저, 트랜잭션 ..
[Spring DB] Connection Pool / DataSource
·
Spring DB/JDBC
Connection Pool기존의 애플리케이션과 DB가 연결되는 상태를 기억해보자.이전까지는 애플리케이션에서 DB 드라이버 매니저를 통해 커넥션을 가져와 통신 했다.그래서 한번 쿼리를 쏠 때마다 DB드라이버를 통해 새로운 커넥션을 가져와서 데이터베이스에 CRUD를 적용했다. 커넥션은 외부 자원과 연결되는 객체이기 때문에, 항상 한 요청마다 새로운 커넥션을 요청하여 1쿼리 : 1커넥션을 생성하는 일은 시스템 자원에 큰 낭비가 된다.우리가 자바에서 Executors 프레임워크를 통해 스레드 풀로 스레드를 관리했던 것 처럼, 이런 커넥션도 커넥션 풀(Connection Pool) 이라는 저장소에 미리 일정 수준의 커넥션을 생성해두고 재사용할 수 있는 기능이다.이런식으로 애플리케이션이 뜰 때, 미리 일정 수준(..
[Spring DB] DB Lock 이 필요한 이유
·
Spring DB/Transaction
DB에 락이 필요한 이유Java에서 모든 인스턴스가 고유의 락을 가지고 있는 것 처럼, DB에도 락이 존재한다.생각해보면 자바 객체의 락이 존재했던 이유는 한 객체에 두개의 스레드가 동시에 접근해 데이터를 수정하려고 했을 때 동시성문제를 해결하기 위해 존재했다.DB도 똑같다. 트랜잭션의 ACID 원칙 중 원자성 원칙에 대해 기억해보자.원자성 : 하나의 트랜잭션내 코드는 모두 실행되거나 모두 실행 되지 않아야한다.예시 상황으로, 세션1이 트랜잭션을 실행하고 데이터를 수정하는 동안 만약 그 로우에 다른 세션이 접근하여 데이터를 수정하려고 한다면 데이터 불일치 등 여러 골치 아픈 일이 발생한다. 추가적으로 세션 1이 작업을 하다가 롤백을 해버리게 되면, 세션 2는 잘못된 데이터를 수정하게 되는 불상사가 복잡하..
[JDBC] JDBC와 JDBC DriverManager
·
Spring DB/JDBC
간단히 알아보는 JDBC의 역사JDBC는 자바 애플리케이션과 DB사이를 연결해주는 자바 API로써, 다양한 RDBMS에 접근하도록 도와준다.RDBMS 회사마다 애플리케이션과 연결, SQL 전송, 결과 응답을 받는 방식이 다르기 때문에, 자바가 이러한 문제점을 해결하기 위해 JDBC라는 표준 API를 통해 Connection, Statement, ResultSet 3가지 인터페이스를 제공한다.각 회사들은 이제 본인들의 DB에 맞게 구현체를 라이브러리로 제공하여 개발자는 이 3가지 인터페이스에만 의존하여 개발하면 된다.커넥션을 위한 JDBC DriverManagerJDBC에서는 Connection 이란 인터페이스를 정의 해놨고, H2 데이터베이스 드라이버는 이 JDBC의 Connection 인터페이스를 구현..
[Spring DB] H2 데이터베이스 대신 MySQL 연동해보기
·
Spring DB/JDBC
김영한님 강의 커리큘럼은 H2 데이터베이스를 사용한다.근데 나는 그렇게 MySQL을 열심히 공부했는데 막상 다른 데이터베이스를 쓰니 스스로 굉장히 서운했고, 앞으로 내가 프로젝트를 할 때 어쨌든 DB를 연동할 줄 알아야하기 때문에, 나는 MySql로 시도해보고자 했다.그리고 앞으로 강의도 H2로도 해보고, 되도록이면 MySQL로 적용해보도록 하자.연습 테이블 LOL_CHAMPIONS기존에 블로그에 업로드 해뒀든 실습용 롤 챔피언 데이터베이스를 사용했다.DB 1편에서 JDBC를 사용했던 처음부터 천천히 따라가보겠다.Gradle 의존성 추가하기dependencies { implementation 'org.springframework.boot:spring-boot-starter-jdbc' compi..