관계형 DB와 Java

1 분 소요

JDBC

데이터 베이스와 자바의 연결 고리로 자바 코드를 통하여 DB에 접속을 할 수 있도록 도와주는 라이브러리이다.

각각의 언어마다 DB와의 연동을 지원하는 라이브러리가 존재하지만 필자는 Java를 사용하므로 JDBC를 사용한다.

관계형 DB

관계형 데이터베이스는 데이터(테이블), 연관관계, 외래키, 주키를 이용하여 데이터를 식별하고 데이터의 무결성을 관리한다.

DB 자체는 언어와 독립적이다. 타 언어를 사용하여도 관계형 DB를 사용하는데 전혀 문제가 없다.

데이터의 영속화

어플리케이션에만 데이터를 저장해 놓는다면 어플리케이션이 장애가 발생하여 강제적으로 재시작 되어야하거나, 서버가 다운되었을 경우 데이터의 손실이 발생하게 된다.

그렇기에 어플리케이션의 데이터를 어딘가에 저장해놓아야만 하고, 그 데이터는 어플리케이션이 꺼졌다 켜진 후에도 유지가 되어야한다.

이것이 데이터의 영속화이다.

데이터의 영속화를 위해 여러방법이 있겠지만 DB를 사용하는 것이 가장 보편화된 방법이다.

1

  1. JDBC에 DB에 접속하기 위하여 정보를 넘긴다. (url, username, password)
  2. 위 과정을 통해 얻어온 connection을 통해 ddl, dml을 실행 시켜 데이터를 저장, 조회할 수 있다.

위 과정은 사실 많은 문제가 있다.

  1. 도메인 클래스와 매핑이 되는 테이블을 직접 생성해야한다. (번거로운 과정)
  2. 또한 테이블에서 꺼낸 데이터를 객체에 매핑해야 한다.
  3. 커넥션을 만드는 비용이 비싸다. (오래걸린다.)
  4. 커넥션을 원하는 시점에 계속해서 만들 수 없다. (Connection은 매번 만들면 안되고 pool로 관리해야한다.)
    • 커넥션을 미리 만들어 두고 필요할때마다 꺼내 사용한 후 다 사용하면 반납한다.
    • 미리 만들어두기에 런타임 시 생성하는 비용은 들지 않음.
  5. sql이 표준이 있긴 하지만 DB마다 다르기 때문에 DB가 바뀌면 다시 sql을 만들어야 한다.
  6. 전체적으로 반복되는 코드가 많기에 리팩토링 필요
  7. 데이터를 읽어올 때 혹시 몰라서 언젠가 사용할 것이라 생각하고 데이터를 다 읽어올 수 있다.
  8. 필요한 순간에만 데이터를 읽고 싶을 때 이 성능 최적화가 쉽지 않다. (LazyLoading 전략을 사용하기 쉽지 않음)

위와 같은 문제를 해결하기 위해 추후 ORM에 대하여 서술할 것이며, 다음 장에서 정리하도록 하겠다.

github https://github.com/hjhng125/jdbc-sample

참고: https://www.inflearn.com/course/스프링-데이터-jpa

댓글남기기