728x90
반응형
JDBC, SQL Mapper, ORM 세 기술은 데이터 접근을 위해 등장하였다.
자바에서는 관계형 DB를 사용하기 위해서는 서로 다른 기술 패러다임간의 인터페이스가 필요하다.
그 인터페이스가 접근 기술이며, JDBC, SQL Mapper, ORM이다.
자바가 DB에 접근하려면?
- DB Connection 얻기 - 커넥션을 연결한다.
- SQL 전달 및 실행 - 서버는 DB에게 원하는 동작을 SQL로 표현하여 연결된 커넥션을 통해 DB에 전달한다.
- DB Connection 닫기 - DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 서버는 응답 결과를 활용하고 커넥션을 닫는다.
문제는 각 DB마다 Connection 연결 방법, SQL 전달 방법, 응답 방법이 모두 다르다.
데이터 접근 기술의 어려움.
- DB를 다른 DB로 변경하면 서버에 개발된 DB 코드도 함께 변경해야 한다.
- 개발자가 각각의 DB마다 커넥션 연결, SQL 전달, 결과 응답 방법을 새로 작성해야 한다.
JDBC가 없다면?
- 현재 애플리케이션이 MySQL을 DB로 사용하고 있다.
- 이용자가 늘어서 새 DB를 구축해야 하는 상황이 되어서 Orcle DB를 추가.
- 하지만 MySQL과 Oracle DB는 접근 방식이 다르기 때문에 새로운 코드를 짜야한다.
- 사용자가 더 늘어나서 기존 코드를 버리고 커넥션 풀을 위한 코드를 새로 작성.
- 만약, 데이터 접근 방식이 같았다면 확장, 변경이 일어나도 수정할 일이 없었다.
JDBC를 사용한다면?
- JDBC는 데이터 저장 기술을 데이터 소스라는 추상화된 인터페이스를 통해 접근한다.
- 데이터 소스가 파일 시스템인지, 어떤 DB인지, 커넥션 풀 라이브러리 인지를 고려하지 않고 일관된 접근이 가능하게 한다.
JDBC란?(Java Database Connectivity)
- 자바를 이용해 다양한 데이터 저장 기술에 일관적으로 접근할 수 있는 데이터 접근 기술
JDBC 동작과정
- 처음으로 DataSource에서 커넥션을 얻으면 Connection 객체로 Statement 객체를 생성하고 Statement를 통해 SQL을 전달한다.
- 전달된 Statement에 의해 SQL이 실행되고 결과는 ResultSet에 담아 받는다.
- 사용한 자원인 Statement와 Connection을 받고 로직을 종료한다.
- 과정 중에 발생한 예외는 SQLException으로 전환되어 일관되게 예외처리 된다.
JDBC 한계
- JDBC를 통해 여러 데이터 관련 로직을 처리할 경우 일정한 작업 흐름이 반복되는 코드가 양산된다.
- 핵심 관심사 미분리이다. 데이터 접근 계층이라면 데이터를 저장, 조회, 수정, 삭제라는 CRUD가 핵심 관심사이고 이와 관련된 로직에 의해서만 수정이 일어나야 한다. 현재는 CRUD를 표현한 SQL이 핵심이다. 그 외의 코드는 핵심 관심사가 아닌데 JDBC를 사용할 경우 비핵심 관심사가 분리되지 않은 채 공존하는 문제점이 있다.
- Java Conde 내 SQL 직접 전달 문제
- (1) JDBC가 사용하는 SQL은 단순 문자열 컴파일 체크 불가, 문법 오류, 오타 발생 확률 높음
- (2) 자바 어플리케이션 내 다른 언어인 SQL을 포함 SQL이 핵심 로직을 담당하는 주객 전도
SQL Mapper란?
- SQL 문과 객체필드를 맵핑하여 데이터를 객체화 하는 것
- ex) 스프링 JDBC, MYBATIS
스프링 JDBC
- 기존의 Statement를 직접 바인딩 해주던 방식을 JDBC Template의 내부 메서드에서 처리해준다.
- 기존에 반복적으로 파라미터값을 바인딩해주던 부분을 JDBC Template이 대신 해주게 된것이다.
- 기존에 ResultSet의 값을 꺼내와서 사용할 객체로 만드는 작업을 해줬어야했는데, 이를 JDBC Templace에서는 RowMapper를 통해 해결해주었다. 해당 객체로 변환하는 작업을 매번 작성하는 것이 아니라 RowMapper를 넘겨주면 JDBC Template 내부에서 알아서 바인딩해서 결과값을 반환해준다.
- JDBC에서는 커넥션을 개발자가 직접 관리해주어야 해서 커넥션을 열고 닫는 등 작업을 직접 반복적으로 해줘야 했다. 이부분 또한 스프링 JDBC 내부에서 대신 해주기 때문에 불필요한 코드를 제거할 수 있게 되었다.
- 기존의 JDBC는 JDBC 내부에서 SQLException을 던지기 때문에 JDBC를 사용할 때 항상 try-catch를 작성해 줘야했고, 이로 인해 코드 가독성이 떨어진다는 문제점이 있었습니다. 스프링 JDBC에서는 쿼리를 실행하는 내부에서 SQLException이 발생하는 경우 Unchecked Exception인 DataAccessException 타입 또는 그 하위 타입을 던져주면서 이전과 달리 스프링 JDBC에서는 불필요한 코드를 줄일 수 있게 되었다.
스프링 JDBC의 문제점
- 반복적인 데이터 바인딩
- 자바 코드와 쿼리문 분리
- 반복적인 SQL 쿼리문
MYBATIS란?
- XML 파일이나 어노테이션을 사용해서 자바 오브젝트와 SQL사이에 자동 매핑 기능을 지원하는 자바 퍼시스턴스 프레임워크이다.
- 스프링 JDBC보다 코드가 간결하다.
ORM이란?
- 객체와 RDB 사이의 패러다임 불일치에서 오는 불편함을 해결하기 위해 객체와 RDB를 변환시켜주는 데이터 접근 기술
- ORM 프레임워크는 객체와 관계형 DB를 적절하게 변환시켜준다.
- 따라서 ORM을 사용하면 관계형 DB에 담긴 정보를 객체를 다루는 것처럼 관리할 수 있다.
- ORM을 사용하면 더 이상 반복적인 SQL을 직접 작성할 필요가 없다. 객체에 집중한 설계를 할 수 있다.
728x90
반응형
'영상 후기 > 네트워크' 카테고리의 다른 글
영상 후기 - [10분 테코톡] 🔮 수리의 TCP/IP (0) | 2023.05.01 |
---|---|
영상 후기 - 네트워크를 다시 또 내부로 자르는 서브넷팅 (0) | 2023.04.26 |
영상 후기 - [10분 테코톡] 유콩의 데이터 통신 (0) | 2023.04.25 |
영상 후기 - MAC주소, IP주소, Port번호가 식별하는 것 (0) | 2023.03.31 |
영상 후기 - 공유기의 IP주소는 왜 192.168.0.1이 되었을까요? | 쉽게보는 IT 상식, 디모의 테크 노트 (0) | 2023.03.31 |