JDBC 이해

Timo·2022년 8월 10일
0
post-thumbnail

데이터베이스 접근 기술 중 첫 번째 파트는 JDBC이다.
이 섹션의 강의를 듣고 실습을 하면서, 처음 자바 교육을 받았던 학원 시절이 떠올랐다.
그 당시에는 '지금 사용하는 기술만 알려주면 되지 왜 이런 불필요한 구시대적 기술을 알려주나' 싶었는데, 오히려 지금은 '그때 해보길 다행이다' 싶다.
이렇게 다시 연결되어 공부한 것이 자리를 잡으니까.

JDBC란 무엇일까?

Java Database Connectivity

자바에서 데이터베이스에 접근하기 위한 기술. 그 기술을 표준화시킨 인터페이스를 의미한다.

데이터베이스를 제공하는 벤더 사들은 JDBC 인터페이스에 맞게 구현한 라이브러리인 JDBC 드라이버를 제공한다. (ex. MySQL JDBC Driver, Oracle JDBC Driver)

JDBC 인터페이스는 내부적으로 이 드라이버를 호출해 DB와 연결하고, SQL을 실행하고, 결과를 받아온다.

JDBC가 없던 시절

어플리케이션에서 DB에 접근하는 방법이 DB마다 다 달랐다.
그렇기 때문에 어플리케이션에서는 사용하는 DB에 맞는 구체적인 데이터베이스 접근 기술에 의존하고 있어야 했다. 개발자 역시 DB별로 사용법을 각각 알고 있어야 했다.

또한 사용하는 DB의 종류가 바뀌면, 그에 의존하고 있는 어플리케이션의 코드들도 변경해야 하는 상황이 되었다. 이러한 문제는 단일 책임 원칙(SRP)을 위배하여, 결국 유지보수하기 어려운 시스템을 만든다.

JDBC의 등장과 함께 해결된 문제들

데이터베이스의 접근 기술을 추상화시킨 표준 인터페이스가 등장하자 어플리케이션 레이어는 이 인터페이스만 알고 있으면 되게 되었다.

개발자 역시 JDBC 인터페이스를 사용하는 방법만 알면 구체적인 데이터베이스 접근 기술이 뭔지 몰라도 되는 것이다.

또한 DB 종류가 변경되어도, 드라이버만 변경하면 코드의 변경 없이도 시스템이 잘 유지되기 때문에 DB 변경과 관련된 영향도 역시 어플리케이션 로직으로 전파되지 않는다.

JDBC와 SOLID 원칙

JDBC 사례를 보면 객체지향의 다섯가지 원칙인 SOLID 원칙을 잘 지키고 있는 것을 확인할 수 있다.

Single Responsibility Principle - 단일 책임 원칙

하나의 모듈은 하나의 책임만 가져야 한다

다시 말해 모듈을 변경해야 하는 이유는 한 가지여야 한다는 원칙이다.

데이터베이스의 종류가 변경된다고 해서, 어플리케이션의 비즈니스 로직의 코드들도 변경되면 안된다. JDBC는 DB 종류가 바뀐다면 Driver만 교체해주면 되므로, 어플리케이션 레이어의 코드 변경은 발생하지 않는다.

Open Closed Principle - 개방 폐쇄 원칙

소프트웨어 구성 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다

DB의 접근 기술을 어플리케이션 레이어에서 직접 변경하는 것이 아니라 어플리케이션은 추상화된 인터페이스만 알고 있는 상태로, 구체적인 기술은 여러 개의 드라이버로 확장함으로써 OCP 원칙을 지키게 되었다.

Liskov Substitution Principle - 리스코프 치환 원칙

프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.

JDBC 기술에서 제공하는 Connection과 같은 인터페이스들은 결국 이 인터페이스를 구현하는 하위 타입의 인스턴스로 역할을 수행한다.

Interface Segregation Principle - 인터페이스 분리 원칙

특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다

JDBC라는 큰 개념의 인터페이스 하나만 존재하는 것이 아니라 각 역할별로 인터페이스가 쪼개져 있다.

  1. java.sql.Connection - 데이터베이스 연결
  2. java.sql.Statement - SQL을 담은 내용
  3. java.sql.ResultSet - SQL 요청에 대한 응답

Dependency Inversion Principle - 의존관계 역전 원칙

프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다.

결국 어플리케이션의 비즈니스 로직이 JDBC Driver와 같은 DB 종류별로 구현된 기술(객체)에 의존하는 것이 아니라 JDBC라는 추상화된 인터페이스에 의존하고 있다는 점에서 DIP 역시 지켜졌다.

참고 자료

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1

profile
나는 매일 성장하는 사람

0개의 댓글