📚JDBC( Java Database Connectivity )란?
- JDBC( Java DataBase Connectivity)는 Java 기발 어플리케이션의 데이터를 DB에 CRUD를 지원하는
자바 API
- 표준 인터페이스 - 연결 - java.sql.Connection
- 표준 인터페이스 - SQL담은 내용 - java.sql.Statement
- 표준 인터페이스 - SQL요청 응답 - java.sql.ResultSet
- JDBC란 Java어플리케이션내에 JDBC API를 통한 DB접근 구조 (JDBC드라이버 로딩 후 DB연결)
- DB통신 담당 인터페이스
- Orclae, Mysql, Mssql등 DB에 맞는 JDBC드라이버 제공
⭐ JDBC 드라이버 로딩
- 사용하고자 하는 JDBC 드라이버를 DriverManager클래스틀 통한 로딩한다. JDBC 드라이버는
DriverManager 클래스를 통해 로딩된다.
⭐ Connection 객체 생성
- JDBC 드라이버가 정상적으로 로딩되면 DriverManager를 통해 데이터베이스와 연결되는
세션(Session)인 Connection 객체를 생성한다.
⭐ Statement 객체 생성
- Statement 객체는 작성된 SQL 쿼리문을 실행하기 위한 객체로 정적 SQL 쿼리 문자열을 입력으로 가진다.
⭐ Query 실행
- 생성된 Statement 객체를 이용하여 입력한 SQL 쿼리를 실행한다.
⭐ ResultSet 객체로부터 데이터 조회
- 실행된 SQL 쿼리문에 대한 결과 데이터 셋이다.
⭐ ResultSet, Statement, Connection 객체들의 Close
- JDBC API를 통해 사용된 객체들은 생성된 객체들을 사용한 순서의 역순으로 Close 한다.
⭐커넥션 풀(Connection Pool)
JDBC API를 사용하여 데이터베이스 연결을 위한 Connection 객체를 생성하는 작업은 비용이 많이 드는 작업 중 하나이다.
🧨커넥션 객체를 생성하는 과정
🧨 어플리케이션에서 DB드라이버를 통해 커넥션을 조회
🧨 DB드라이버는 DB와 TCP/IP커넥션을 연결함(3way handshake와 같은 네트워크 연결 동작발생)
🧨 DB드라이버는 DB와 TCP/IP 커넥션이 연결되면 아이디, 패스워드, 기타 부가 정보를 DB에 전달
🧨 DB아이디, 패스워드를 내부인증을 거친 후 내부에 DB를 생성
🧨 DB는 이후 커넥셔 생성이 완료 되었다는 응답을 보냄
🧨 DB드라이버는 커넥션 객체를 생성하여 클라이언트에 반환
이러한 신규 생성시 많은 비용 발생과 비효율적인 부분에 대해 어플리케이션 성능향상을 위해 커넥션풀(Connection Pool)이 등장하였습니다. Connection 객체를 미리 생성하고 보관 및 필요시 꺼내 사용할수 있게 하는걸 의미합니다.
🧨 어플리케이션 시작 시점에 커넥션 풀은 필요한 만큼 커넥션을 미리 생성 및 보관
🧨 서비스의 특징과 스펙에 따라 생성되는 Connection 객체의 개수는 다르지만 기본 10개 생성
🧨 커넥션 풀에 들어있는 Connection 객체는 TCP/IP로 DB와 연결되어 있는 상태이기 때문에 즉시 SQL을 DB에 전달가능
🧨 DB드라이버를 통해 새로운 커넥션 획득하는 것이 아닌 이미 생성된 커넥션을 참조 사용
🧨 커넥션 풀에 있는 커넥션을 요청하면 커넥션 풀이 자신이 가지고 있는 커넥션 객체 중 하나를 반환
이런식로 Connection Pool을 통해 접근을 하게 되면 조회, 연결, 인증, SQL실행 시간에 대한 과정은 생략 할수 있다.
BUT. Spring Boot 2.0 이전버전에서는 Apache재단의 오픈소스인 Apache Commons DBCP를 주로 사용하였지만, 스프링 부트 2.0이후 HikariCP를 기본 DBCP로 채택하여 사용된다.
⭐HikariCP란?
HikariCP는 가벼운 용량과 빠른 속도를 가지는 우수한 성능의 JDBC Connection Pool Framework이며 스프링 부트 2.0이후부터는 커넥션 풀을 관리하기 위해 HikariCP를 사용하고 있습니다.
HikariCP는 미리 정해놓은 크기만큼의 Connection을 Connection Pool에 담아 놓는데 이후 요청이 들어오면 Thread가 Connection을 요청하고 Connection Pool에 있는 Connection을 연결해 줍니다.
📚ibatis란?
- ibatis란 데이터 베이스에 있는 자원들을 보다 편하게 가져오기 위한 프레임워크
- Apache Software Foundation(ASF)에 의해 개발된 자바 기반의 ORM프레임워크
- JDBC( Java Database Connectivity - 자바 API(DB접속))보다 코드 간결화( 40%⬇️)
- SQL문장에 대한 코드 분리로 인한 가독성, 유지보수성, 생성성 ⬆️
📚Mybatis란?
- ibatis의 후속 버전으로 개발된 ORM프레임워크
- ibatis의 코드 베이스를 기반으로 개선, 확장
- ibatis의 XML기반 설정 파일을 계승하였고 XML네임스페이스와 어노테이션을 활용하여 유연한 설정방식 제공
📚ibatis VS mybatis
⭐ ibatis -> mybatis : 명칭변경 이유 - Apache project 팀에서 Google code 팀으로 이동에 따른 명칭비교
⭐ ibtias / JDK 1.4 이상 사용 가능 | mybatis JDK 1.5 이상 사용가능(mybatis 3.2이상 버전은 JDK 1.6이상)
⭐ ibatis 패키지 : com.ibatis.* | mybatis 패키지 : org.apache.ibatis.*
⭐sqlmap.xm내부구조 변경
parameterMap -> parameterType으로 변경dtd 변경 - http://mybatis.org/dtd/mybatis-3-mapper.dtd사용 용어 변경
iBATIS | MyBatis |
SqlMapConfig | Configration |
sqlMap | Mapper |
resultClass | resultType |
#var# | #{var} |
$var$ | ${var} |
⭐ pom.xml설정 변경
🧨ibatis
<!-- iBATIS pom.xml -->
<dependency>
<groupid>org.apache.ibatis</groupid>
<artifactid>ibatis-sqlmap</artifactid>
<version>2.3.4.726</version>
</dependency>
🧨mybatis
<!-- MyBatis pom.xml -->
<dependency>
<groupid>org.mybatis</groupid>
<artifactid>mybatis</artifactid>
<version>3.4.5</version>
</dependency>
<dependency>
<groupid>org.mybatis</groupid>
<artifactid>mybatis-spring</artifactid>
<version>1.3.1</version>
</dependency>
⭐네임스페이스 변경
iBATIS : <sqlMap namespace="memberDAO">
MyBatis : <mapper namespace="com.tistory.sdevstudy.MemberMapper">
📚JPA란?
자바 ORM(Object Relational Mapping) 기술에 대한 API 표준 명세를 말하며 ORM을 사용하기 위한 인터페이스의 모음
⭐ Hibernate란?
- JPA를 구현한 구현체로 JPA 핵심인 EntityManagerFactory, EntityManager, EntityTransaction등을
상속받아 구현한다
- JPA를 구현한 다른 구현체로는 EclipseLink나 DataNucleus등이 있다.
⭐ Spring Data JPA란?
- JPA를 한 단계 더 추상화한 Repository인터페이스를 제공 하고 Hibernate와 같은 JPA구현체를 사용한다.
⭐ 정리!!
- JPA는 Java ORM 기술에 대한 API표준명세
- Hibernate는 JPA의 구현체 이며 내부적으로 JDBC를 이용
- Spring Data JPA는 JPA를 사용하기 쉽게 스프링에서 제공하는 모듈로 내부적으로 JPA 구현체를 이요함
⭐ORM(Object Relational Mapping)란?
🧨 Object Relational Mapping - 객체 관계 매핑
🧨 객체와 데이터베이스의 관계를 매핑해주는 도구
🧨 프로그래밍 언어의 객체와 관계형 데이터베이스의 데이터를 자동 매핑 도구 & 중계자 역활
🧨 MVC패턴에서 모델(Model)을 기술하는 도구
🧨 객체와 모델 사이의 관게를 기술하는 도구
⭐ORM(Object Relational Mapping) 사용이유?
🧨 객체지향 프로그래밍(OOP) 은 클래스를 이용하고 관계형 데이터베이스(RealtionDatabase)는 테이블을
이용하는데 객체 모델과 관계형 모델 간의 불일치가 존대한다.
🧨 데이터베이스 접근을 프로그래밍 언어의관점에서 컨트롤 가능
🧨 객체간의 관계를 바탕으로 SQL을 자동으로 생성됨에 따라 불일치 해결
🧨 SQL문을 직접 작성하지 않고 엔티티 객체로 표현가능
🧨 객체를 통해 간접적으로 데이터베이스를 사용
⭐ORM(Object Relational Mapping) 장점?
🧨 직관적 코드(가독성⬆️)과 비지니스 로직 집중(생산성⬆️)
🧨 SQL Query가 아닌 메서드를 통한 데이터 조작 - 객체모델화로 프로그래밍 생상성⬆️
🧨 재상용 및 유지보수 편리성⬆️ 디자인 패턴화, 독립적 구성 및 재활용 가능
🧨 DBMS에 대한 종속성 ⬇️
⭐ORM(Object Relational Mapping) 단점?
🧨 설계 복잡 및 난이도증가
🧨 잘못 구현시 일관성 저하
Ref.https://velog.io/@sjsrkdgks/ibatis-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95
Ref.https://ittrue.tistory.com/250
Ref. https://adjh54.tistory.com/73
Ref. https://jinnnkcoding.tistory.com/179
Ref. https://sdevstudy.tistory.com/18
'❤️01_Java' 카테고리의 다른 글
#MVC패턴이란 #MVC_design_pattern #Model #View #Controll #MVVM(Model-View_ViewModel (0) | 2023.11.16 |
---|---|
#Null #개발자숙제 #Null이야기 (0) | 2023.11.15 |
#java #exception #CheckedException #UncheckedException #Runtime Exception #Error (1) | 2023.11.14 |
httpServletRequest(요청) & httpServletResponse(응답) (0) | 2023.01.13 |
#SSE(Server-Sent-Events) #ShortPolling #LongPolling #WebSocket (0) | 2023.01.13 |
댓글