스프링(33)
-
[DB 접근 기술] 트랜잭션 이해
트랜잭션 - 개념 이해 데이터를 저장할 때 파일이 아니라 DB에 저장하는 이유는 무엇일까 가장 대표적인 이유로 DB는 트랜잭션이라는 개념을 지원하기 때문이다. 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻한다. 이는 생각보다 고려해야 할 점이 많다. A가 B에게 5000원을 송금한다면, A의 잔고를 5천원 감소하고, B의 잔고를 5천원 증가해야 한다. 이 과정이 하나의 트랜잭션 안에서 이루어져야 한다. 1. A의 잔고 5천원 감소 2. B의 잔고 5천원 증가 만약 1번은 성공했는데 2번에서 시스템 문제가 발생한다면 A의 돈만 파쇄된 것이다. DB가 제공하는 트랜잭션 기능을 사용하면 1,2 둘 다 성공해야 저장하고 둘 중에 하나라도 실패하면 거래 전의 상태로 돌아갈 수 있다. 모든 작업이..
2022.05.27 -
[토비의 스프링 3.1] 1.4 제어의 역전(IoC)
1.4.1 오브젝트 팩토리 지금까지 초난감 DAO를 리팩토링하였다. 그러나 UserDaoTest가 DAO의 클라이언트 오브젝트가 되면서, 어떤 ConnectionMaker 구현 클래스를 사용할지를 결정하는 기능을 떠맡게 되었다. UserDao의 기능이 잘 동작하는지 테스트하려고 만든 것인데 다른 책임을 떠맡고 있으니 문제가 있어보인다. 그러니 이것도 분리하자. 객체의 생성 방법을 결정하고, 그렇게 만들어진 오브젝트를 돌려주는 클래스를 만들어보자. 이런 일을 하는 오브젝트를 흔히 팩토리(Factory)라고 부른다. 오브젝트를 생성하는 쪽과 생성된 오브젝트를 사용하는 쪽을 분리하기 위해 사용한다. public class DaoFactory { public UserDao userDao() { Connectio..
2022.05.26 -
[DB 접근 기술] 커넥션 풀과 데이터 소스 이해 - DataSource 이해
DataSource 이해 커넥션을 얻는 방법은 다양하다. JDBC DriverManager로 신규 커넥션을 생성하거나, HikariCP등의 커넥션 풀을 사용해도 된다. 만약 JDBC DriverManager를 통해 커넥션을 획득하다가, 커넥션 풀을 사용하는 방법으로 변경하려면 어떻게 해야 될까? 의존관계가 DriverManager에서 커넥션 풀로 변경되었으므로 애플리케이션 코드도 함께 변경해야 한다. 둘의 사용법이 다르기 때문이다. 하지만 자바는 커넥션을 획득하는 방법을 추상화하였다. 자바는 javax,sql.DataSource라는 표준 인터페이스를 제공한다. 이 DataSource는 커넥션을 획득하는 방법을 추상화 하는 인터페이스다. 핵심 기능은 커넥션 조회뿐이다. public interface Dat..
2022.05.25 -
[토비의 스프링 3.1] 1.3 DAO의 확장
앞서 1.2장에서 "DB 연결을 어떤 방법으로 할 것인가"라는 관심사를 중심으로 UserDao를 상하위 클래스로 분리하였다. 추상클래스로 선언하고 이를 상속한 서브클래스에서 구체적인 getConnection()메소드를 구현했다. 하지만 자바는 단일 상속만을 허용하기때문에 상속은 비효율적이며, 상속 관계가 의외로 결합도가 높아 부모의 코드가 변경되는 경우 자식 클래스의 코드가 변경되는 일이 빈번하다는 단점이 있었다. 1.3.1 클래스의 분리 그래서 아예 다른 클래스로 화끈하게 분리한다. 상속관계도 아닌 완전히 독립적인 클래스로 만들어본다. SimpleConnectionMaker라는 새로운 클래스를 만들고, DB 생성 기능을 그 안에 넣는다. UserDao에서는 생성자를 통해 인스턴스 변수로 SimpleCo..
2022.05.25 -
[DB 접근 기술] JDBC 개발 - 수정, 삭제
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1# 스프링 DB 1편 - 데이터 접근 핵심 원리 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 www.inflearn.com 김영한 강사님의 인프런 강의를 수강 후 블로그에 정리해서 포스팅합니다. 이전 포스팅의 등록, 조회에 이어 수정, 삭제를 알아본다. 먼저 수정 public void update(String memberId, int money) throws SQLException { String sql = "update..
2022.05.25 -
[DB 접근 기술] 데이터베이스 연결
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1# 스프링 DB 1편 - 데이터 접근 핵심 원리 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 www.inflearn.com 김영한 강사님의 인프런 강의를 수강 후 블로그에 정리해서 포스팅합니다. 애플리케이션과 데이터베이스를 연결한다. DB 접속에 필요한 기본 정보를 쉽게 사용하도록 상수로 정의한다. public abstract class ConnectionConst { public static final String UR..
2022.05.25