스프링 DB 1(김영한 강의) - 섹션 1 : JDBC 이해
섹션 목적 : JDBC를 이해해보자
1. JDBC는 어떻게 등장하게 되었는가?
(1) 클라이언트 -> 서버 -> DB, 이 흐름에서 서버가 DB에 데이터를 저장하거나 조회함
(2) 그래서 서버는
① DB와 커넥션을 연결
② SQL을 전달
③ 결과를 응답
하는 흐름을 가짐
(3) 그런데 DB마다 ①, ②, ③ 방식이 모두 다르다보니, DB를 변경하면 방법을 학습해야하고 코드를 바꿔야함
(4) 이러한 문제를 해결하기 위해 JDBC가 등장
2. JDBC
(1) JDBC는 위에서 발생한 3가지 문제를 interface로 제공함
(2) 그래서 각 DB들은 이 interface를 구현해서 드라이버(ex. MySQL JDBC Driver, Oracle JDBC Driver)로 제공하고, 개발자는 이 interface에 의존해서 개발하면 됨
(3) JDBC 등장으로 DB가 바뀌더라도, 새로 학습하거나 코드를 바꿔야할 필요가 없어짐
(4) 하지만, DB마다 기본적으로 SQL, 일부 사용법들이 다르기 때문에 이 부분은 변경해야함
(5) JPA는 이런 부분도 많이 해결할 수 있도록 도와줌
3. JDBC와 최신 데이터 접근 기술
(1) JDBC는 오래된 기술이어서 사용방법이 복잡함. 그래서 이러한 JDBC를 편리하게 사용할 수 있도록 도와주는 기술이 등장함. 대표적으로 SQL Mapper 기술과 ORM 기술이 있음
(2) SQL Mapper(ex. JDBC Template, MyBatis)
① SQL 응답결과를 객체로 편리하게 변환해줌
(3) ORM(ex. JPA)
① 객체를 관계형 DB 테이블과 매핑해주는 기술임
(4) 하지만 이 기술 모두 JDBC를 편리하게 사용할 수 있도록 도와주는 기술임. 내부적으로 모두 JDBC를 사용한다는 뜻
4. 애플리케이션과 DB를 연결
(1) Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD)
(2) Connection은 JDBC 표준 커넥션 인터페이스임
(3) DriverManager.getConnection(...)은 H2 JDBC Driver가 제공하는 H2 전용 커넥션임(현재 H2를 사용하고 있으므로)
5. JDBC DriverManager 이해
(1) DriverManager는 라이브러리에 등록된 DB 드라이버들을 관리함(말 그대로)
(2) DriverManager는 라이브러리에 등록된 DB 드라이버들에게 (URL, USERNAME, PASSWORD)를 넘겨서 커넥션을 획득할 수 있는지 확인하고, 그 DB 드라이버에서 커넥션을 획득함
6. JDBC를 이용해서 CRUD 구현
(1) DB 커넥션을 가지고 온다 - Connection
(2) 커넥션에 SQL을 세팅한다 - Statement
(3) DB에 커넥션을 전달하고 결과를 가져온다 - ResultSet
(4) 사용한 자원(Connection, Statement, ResultSet)은 닫아준다
이펙티브 자바 - 아이템 2 : 생성자에 매개변수가 많다면 빌더를 고려하라
1. 생성자에 매개변수가 많은 경우 보통 점층적 생성자 패턴을 이용한다
(1) 그렇지만, 이렇게 될 경우 매개변수가 많아지면 두 가지 문제점이 발생함
① 코드를 작성하거나 읽기가 매울 어려워짐
② 매개변수의 순서를 바꿔 입력해도 컴파일러는 알아채지 못하고 버그가 발생
2. 이 때 사용하기 좋은 방법은 빌더 패턴
(1) 해당 class에 static class로 Builder를 만들고, 이 빌더에 값을 세팅하는 형식으로 바꿈
(2) 사용방법은 NutritionFacts cocacola = new NutritionFacts.Builder(240, 8).calories(100).sodium(25).build(); 와 같음
(3) 이렇게 하면 위의 두 가지 문제점을 해결할 수 있음
3. 또한 빌더 패턴은 계층적으로 설계된 클래스와 함께 쓰기 좋음
(1) 예를 들어 Pizza 추상 클래스를 상속한 NewYorkPizza와 CalzonePizza가 있음
(2) Pizza.Builder를 상속해서 각각 피자에 Builder를 만드는 방식임
스프링 DB1을 다시 보면서, 어떻게 스프링에서 DB와 연결짓는지 확실하게 구조를 이해해보자.
이펙티브 자바 예제 코드 꼭 직접 작성해보자. 백문이 불여일타!!!
'TIL(Today I Learned)' 카테고리의 다른 글
2023.06.28 (0) | 2023.06.29 |
---|---|
2023.06.27 (0) | 2023.06.27 |
2023.06.26 (0) | 2023.06.26 |
2023.06.22 (0) | 2023.06.22 |
2023.06.21 (0) | 2023.06.21 |