JDBC란?
자바에서 DB 프로그래밍을 하기 위해 사용되는 API
*데이터베이스 종류에 상관없다.
*JDBC 드라이버 : 각 DBMS에 알맞는 클라이언트
JDBC(Java Database Connectivity)
- 자바 프로그램 내에서 DB와 관련된 작업을 처리할 수 있도록 도와주는 일을 한다.
- java에서 DB를 사용할 때에는 JDBC API를 이용하여 프로그래밍한다.
- 자바는 DBMS종류에 상관없이 하나의 JDBC를 사용하여 DB작업을 처리할 수 있기 때문에 알아두면 어떤 DBMS든 작업을 처리 할 수 있게 된다.
JDBC API가 생긴 이유
JDBC API가 없었던 옛날에는 각각의 데이터베이스마다(ms-sql, my-sql, oracle..) 각각의 SQL문을 사용한다.
그래서 DB의 종류에 따라 SQL문의 작성 방법이 너무나 차이가 나서 개발자들의 항의가 많았다.
그러다가 더 이상 무한 경쟁을 하지말고 메서드나 일부 용어를 통일하여 회사간 협의가 이루어진다.
그 결과로 function이나 structure, 전역변수 등을 통합하여 문법으로 통일시켰고, 그 통일시킨것이 바로 JDBC API
즉, JDBC API를 사용할 경우 DBMS에 알맞는 JDBC드라이버만 있다면 어떤 DB라도 사용 가능하다.
현재 Oracle, MySQL, MS-SQL등 주요 DBMS가 자신에 알맞는 JDBC드라이버를 제공하기 때문에 문제없이 DB를 사용 가능하다.
자바에서 JDBC코딩하는 대략적인 순서
- JDBC드라이버를 로딩시킨다.
- DirverManager, getConnection을 통해 DB connection을 구현한다.
- Query실행을 하기 위해서 Statement 객체를 생성한다.
- Query를 실행한다.
- Query실행 결과 사용
- Statement 종료
- 데이터베이스 커넥션 종료
JDBC 시스템 아키텍처(System Architecture)
JDBC API는 2-tier(2 계층)와 3-tier(3 계층)를 모두 지원한다.
tier
tier란 일련의 유사한 객체가 나열된 상태에서 계층 또는 열을 나타낸다. 프로그램의 일부가 여러 객체에 나뉘어 존재할 수 있으며 그 계층 또한 네트워크 상에서 다른 컴퓨터에 위치할 수 있다.
- 2-tier
- 자바 애플릿이나 애플리케이션이 JDBC를 이용하여 DBMS에 직접 접근하는 방식이다.
- 가장 대표적인 C/S (Client/Server) 구조이다.
- 프로그래밍이 간단하다는 장점이 있다.
- 하지만 보안, 로드밸런싱(서버 부하 분담), 확장성(오브젝트 재사용) 등의 문제점이 있다.
2-tier가 적합한 경우는 다음과 같다.
- 애플리케이션의 하나의 데이터베이스만을 사용하는 경우
- 데이터베이스 엔진이 하나의 CPU에서 동작하는 경우
- 데이터베이스가 계속 거의 같은 크기로 유지되는 경우
- 사용자 기반이 같은 크기로 유지되는 겨우
- 요구가 확정되어, 변환 가능성이 극히 적거나 없는 경우
- 애플리케이션을 종료한 후에도 최소한의 지속성을 요구하는 경우
- 3-tier
- 자바 애플릿이나 어플리케이션이 DBMS에 직접 접근하지 않고 중간에 미들웨어(미들티어)를 거쳐서 데이터베이스에 접근하는 방식이다.
- 데이터베이스와 연동 부분을 분리시킴으로써 Presentation Layer가 데이터 저장 방법에 신경을 쓰지 않아도 된다.
- 클라이언트는 단지 미들티어만을 참조한다.
- 미들티어 서버는 DBMS와 같이 특정한 작업만 수행하는 최종 서버와 통신을 하여 결과를 얻은 후 이 결과를 클라이언트에 전달한다.
- 2-tier 모델과 비교했을때 훨씬 안정적이고 유연하며 보안이 강화된다.
다음 그림은 2-tier와 3-tier를 표현한 것이다. 왼쪽부터 1-tier로 시작하여 오른쪽으로 갈수록 한 계층씩 증가한다.
3-tier 아키텍처 같은 경우에는 중간 2-tier에 http, 코바(CORBA) 등을 지원하기 위한 응용 처리 서버(Application Server)가 온다.
'👨🏫Study > JAVA' 카테고리의 다른 글
[JAVA] Garbage Collector (0) | 2022.04.19 |
---|---|
[JAVA] EJB(Enterprise JavaBeans) (0) | 2022.04.15 |
[JAVA] Servlet(서블릿), JSP(Java Server Page) (0) | 2022.04.14 |
[JAVA] Java EE (0) | 2022.04.11 |
[JAVA] 19. NIO 기반 입출력 및 네트워킹(6) (0) | 2022.04.06 |
댓글