Skills/Java

Java - JDBC

aoaa 2022. 10. 4. 19:45

1. JDBC

 JDBC는 Java DataBase Connectivity의 약자로 Java 프로그램과 DB와 연결되어 주고 받을 수 있게 돕는 Java API로 DB에서 데이터를 쿼리하거나 업데이트 하는 방법을 제공합니다. 

 

 소개에 앞서 JDBC가 등장하게 된 배경부터 살펴봐야 될 것 같습니다.

애플리케이션을 개발시 중요 데이터는 DB에 보관하게 됩니다. 이 때 클라이언트가(App 혹은 브라우저에서) 애플리케이션 서버에 요청을 보내게 되면 비즈니스 로직을 수행하여 필요 데이터를 SQL로 전달하여 DB에 전달하게 됩니다.

 

 위의 설명을 그림으로 요악하면 그림과 같습니다.

여기서 문제가 있습니다. DB의 종류에는 여러가지가 있어(MySQL, Oracle, Maria 등등.. ) DB마다 커넥션 연결하는 법, SQL을 전달하는법, 결과 응답을 받는 방법이 모두 다르기 때문에 

1) 애플리케이션 서버에서 개발된 DB 코드를 변경해야하는 점

2) 각 DB마다 커넥션, SQL 전달 등 새로운 방법에 대해 학습해야하는 문제점이 나타나게 되었습니다.

 여기서 Java 진영에서는 'java.sql.Connection', 'java.sql.Statement', 'java.sql.ResultSet' 각 연결, SQL을 담은 내용, 요청응답에 대한 JDBC API를 만들어 표준화했습니다. 

 

 하지만 API만 있고 구현체가 없다면 의미가 없기 때문에, 여기서 각 DB의 벤더에서 자신의 벤더에 맞도록 구현하여 라이브러리의 형식으로 제공하게 되었는데 이를 JDBC Driver라고 합니다. 

 이렇게 하여 애플리케이션의 로직은 추상화된 JDBC 표준 인터페이스에만 의존하여 얘플리케이션 로직을 그대로 유지할 수 있게되고, JDBC 표준 인터페이스의 사용법만 안다면 DB가 아무리 바뀌더라도 모두 동일하게 적용할 수 있게되어 위에서 설명한 문제점을 모두 해결됐습니다. 


2. SQL Mapper & ORM 

 이 JDBC를 직접 사용하기에는 너무 옛날에 나와서(1997년) 번잡하여, 보다 편리하게 사용할 수 있도록 만드는 기술이 있는데 대표적으로 

SQL Mapper와 ORM 입니다. 

 

 SQL Mapper의 대표적 예는 JdbcTemplate와 MyBatis가 있습니다. 이는 SQL 응답 결과를 객체로 반환해주고 JDBC의 반복 코드를 제거해줍니다. 하지만 개발자가 SQL을 직접 작성해야한다는 단점이 있어 최근에는 ORM이라는 기술을 많이 사용하고 있습니다.

 

 ORM(Object Relational Mapping)은 위에서 설명된 SQL Mapper의 단점으로 개발자가 직접 SQL을 작성해야한다는 문제점이 있었는데, ORM은 객체를 관계형 DB의 테이블에 매핑하여 반복적 SQL 작성을 하지않아되 되고, ORM 기술이 개발자 대신 SQL을 동적으로 만들어 실행해줍니다. 

 ORM의 대표적 기술은 Java 진영의 표준 인터페이스인 JPA, JPA를 구현한 하이버네이트와 이클립스 링크가 있습니다. 

 

JDBC가 이전에 나온 기술이어서 사용하지 않는 것이 아니라 SQL Mapper나 ORM에서도 기술 내부에서는 모두 JDBC가 동작하기 때문에 원리를 알아야 문제 해결에 도움되기 때문에 알아둬야 합니다. 

 

 

 

 

 

 

 

 

참조