46DAYS) [Spring MVC] JDBC 기반 데이터 액세스 계층 - JDBC, Spring Data JDBC

nacSeo (낙서)·2022년 12월 22일
0

◉ 학습목표

1. JDBC가 무엇인지 이해할 수 있다.
2. Spring Data JDBC가 무엇인지 이해할 수 있다.
  1. JDBC (Java Database Connectivity)

⦿ 학습내용

☞ JDBC (Java Database Connectivity)

✔︎ Java 기반 애플리케이션의 코드 레벨에서 사용하는 데이터데이터베이스에 저장 및 업데이트하거나, 반대로 데이터베이스에 저장된 데이터Java 코드 레벨에서 사용할 수 있도록 해주는 Java에서 제공하는 표준 API
✔︎ JDBC의 동작 흐름을 알면 Spring에서 지원하는 데이터 액세스 기술을 사용하는 데 도움이 됨

☞ JDBC의 동작 흐름

✔︎ Java 애플리케이션에서 JDBC API를 이용적절한 데이터베이스 드라이버를 로딩한 후, 데이터베이스와 인터렉션
✔︎ JDBC 드라이버

  • 데이터베이스와의 통신을 담당하는 인터페이스
  • 다양한 벤더(Oracle, MS SQL, MySQL 등)에서는 해당 벤더에 맞는 JDBC 드라이버를 구현하여 제공
  • JDBC 드라이버의 구현체를 이용해서 특정 벤더의 데이터베이스에 액세스

☞ JDBC API 사용 흐름

1. JDBC 드라이버 로딩

  • 사용하고자 하는 JDBC 드라이버는 DriverManager라는 클래스를 통해 로딩

2. Connection 객체 생성

  • DriveManager를 통해 데이터베이스와 연결되는 세션인 Connection 객체 생성

3. Statement 객체 생성

  • Statement 객체는 작성한 SQL 쿼리문을 실행하기 위한 객체로써, 객체 생성 후 정적인 SQL 쿼리 문자열 입력으로 가짐

4. Query 실행

  • 생성된 Statement 객체를 이용해 입력한 SQL 쿼리를 실행

5. ResultSet 객체로부터 데이터 조회

  • 실행된 SQL 쿼리문에 대한 결과 데이터 셋

6. ResultSet 객체 Close, Statement 객체 Close, Connection 객체 Close

  • JDBC API를 통해 사용된 객체들은 사용 후, 사용 순서의 역순으로 Close

☞ Connection Pool

✔︎ 데이터베이스 Connection 객체를 미리 만들어 보관하고 애플리케이션이 필요할 때 이 Connection을 제공해주는 역할을 하는 Connection 관리자
✔︎ Spring Boot 2.0부터 HikariCp기본 DBCP(Database Connection Pool)

  1. Spring Data JDBC

⦿ 학습내용

☞ 데이터 액세스 기술의 유형

✔︎ SQL 중심의 기술

  • 애플리케이션에서 데이터베이스에 접근하기 위해 SQL 쿼리문을 애플리케이션 내부에 직접적으로 작성하는 것이 중심이 되는 기술
  • mybatis, Spring JDBC 등

✔︎ 객체(Object) 중심의 기술

  • 데이터를 SQL 쿼리문 위주로 생각하는 것이 아니라, 모든 데이터를 객체(Object) 관점으로 바라보는 기술
  • 데이터베이스에 접근하기 위해 SQL 쿼리문을 직접 작성하기보다, 애플리케이션 내부에서 Java 객체를 SQL 쿼리문으로 자동 변환 후 데이터베이스 테이블로 접근
  • 이러한 객체 중심의 데이터 액세스 기술을 ORM (Object-Relational Mapping)이라고 함
  • JPA (Java Persistence API), Spring Data JDBC 등

☞ 인메모리 (In-Memory) DB

✔︎ 메모리 안에 데이터를 저장하는 데이터베이스
✔︎ 애플리케이션이 실행되는 동안에만 데이터를 저장하고 있고, 실행이 중지되면 데이터가 모두 사라짐
✔︎ 테스트 환경에서 유리
✔︎ 예시 : H2 등

☞ CrudRepository

✔︎ Spring에서 지원하는 CrudRepository 인터페이스는 CRUD에 대한 기본적인 메서드를 정의하고 있음
✔︎ 별도의 CRUD 기능을 개발자가 직접 구현할 필요 ❌

☞ application.properties 🆚 application.yml

✔︎ 파일의 설정 정보 등록을 통해 데이터베이스 설정, 데이터베이스의 초기화 설정 등의 다양한 설정 가능
✔︎ application.yml방식은 중복되는 프로퍼티의 입력을 줄여주기 때문에 application.properties방식보다 더 선호되는 추세

☞ 엔티티(Entity) 클래스

✔︎ 엔티티 클래스의 이름은 데이터베이스 테이블의 이름에 매핑
✔︎ 엔티티 클래스 각각의 멤버 변수는 데이터베이스 테이블의 컬럼에 매핑
✔︎ 엔티티 클래스의 멤버 변수에 @Id 애너테이션을 추가하면 데이터베이스 테이블의 기본키(Primary Key) 컬럼과 매핑됨

☞ Spring Data JDBC 적용 순서

  1. build.gradle에 사용할 데이터베이스를 위한 의존 라이브러리 추가
  2. application.yml파일에 사용할 데이터베이스에 대한 설정
  3. schema.sql파일에 필요한 테이블 스크립트 작성
  4. application.yml파일에서 schema.sql파일을 읽어서 테이블을 생성할 수 있도록 초기화 설정 추가
  5. 데이터베이스의 테이블과 매핑할 엔티티 클래스 작성
  6. 작성한 엔티티 클래스를 기반으로 데이터베이스의 작업을 처리할 Repository 인터페이스 작성
  7. 작성된 Repository 인터페이스를 서비스 클래스에서 사용할 수 있도록 DI 수행
  8. DI된 Repository의 메서드를 사용해서 서비스 클래스에서 데이터베이스에 CRUD 작업 수행

◉ 느낀 점

☞ JDBC의 흐름을 직접 그려보며 어느 정도 이해했고, Spring Data JDBC 적용 순서 또한 직접 코드를 작성해보면서 몸소 이해하려 노력했다. 그러나 아직 아무 것도 없는 상황에서 내가 직접 해보라하면 못할 듯 ,,, 🥲

데이터 액세스 계층의 내용들은 앞으로 계속 이어질 예정이다. Spring Data JDBC vs JPA vs Spring Data JPA 등이 있는데 어떤 기술을 위주로 학습하는 느낌이 아니라, 어느 기술은 기초가 되고 그 기초를 바탕으로 실무에서 가장 많이 사용하는 기술도 있기에 뭐 하나 빠짐없이 차근차근 이해해갈 생각이다.

기초없는 성취는 없다.
기초없이 성취를 이룬다면, 이룬 뒤 다시 기초로 돌아가게 된다.

◉ 내일의 키워드

・ Spring Data JDBC 기반 도메인 엔티티 및 테이블 설계
・ Spring Data JDBC 통한 데이터 액세스 계층 구현
profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글