분류 전체보기(250)
-
[토비의 스프링 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 -
[DB 접근 기술] 커넥션 풀과 데이터 소스 이해 - 커넥션 풀 이해
커넥션 풀 이해 서버에서 DB로 요청을 보낼 때, 데이터베이스 커넥션을 매번 획득해야 한다. 하지만 매번 커넥션을 획득할 때마다 다음과 같은 복잡한 과정을 거친다. 1. 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다. 2. DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다. 3. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달한다. 4. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다. 5. DB는 커넥션 생성이 완료되었다는 응답을 보낸다. 6. DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다. 요약하자..
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 접근 기술] JDBC 개발 - 등록, 조회
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1# 스프링 DB 1편 - 데이터 접근 핵심 원리 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 www.inflearn.com 김영한 강사님의 인프런 강의를 수강 후 블로그에 정리해서 포스팅합니다. 먼저 Member 테이블을 생성한다. create table member ( member_id varchar(10), money integer not null default 0, primary key (member_id) ); D..
2022.05.25