2주차 - 데이터베이스 다루기
- DB 연결 (Driver)
- 적절한 JDBC 드라이버를 선택하고 설정
- DB 데이터를 외부에서 다루기 (JDBC)
- JDBC를 이용해 애플리케이션에서 DB 데이터 직접 다루는 실습
03. 데이터베이스 연결(Driver)
- 데이터베이스 드라이버의 역할과 중요성을 이해하고, 적절한 드라이버 선택 및 설정 방법을 배운다.
- JDBC드라이버를 사용하여 애플리케이션과 데이터베이스 간의 연결을 구성하는 과정을 다룬다.
1. 데이터베이스 Driver 역할 및 종류
드라이버의 역할
- 데이터베이스 드라이버는 애플리케이션과 데이터베이스의 간의 통신을 중개하는 역할
- 애플리케이션의 요청을 데이터베이스가 이해할 수 있는 언어로 변환
드라이버의 종류
- Oracle, MySQL, PostgreSQL등 각 데이터베이스 제품에 맞는 특정 드라이버가 필요하다.

Java의 데이터베이스 별 Driver
2. 데이터베이스 Driver 동작
- 데이터베이스 드라이버는 애플리케이션과 데이터베이스 간의 데이터 교환을 조절하고 관리하는 역할
드라이버의 동작 방식
- 연결 초기화
- 요청 수신 : 애플리케이션은 DB 작업을 시작하기 위해 드라이버에 요청한다.
- 연결 설정 : 드라이버는 DB서버에 로그인하고 네트워크 정보, 인증 자격 증명 등을 사용해 필요한 설정을 수행하여 연결 완료
- SQL 전송 및 실행
- SQL 명령 변환 : 애플리케이션에서 발송된 SQL명령을 DB가 이해할 수 있게 해당 명령을 드라이버가 변환한다.
- 명령 처리 : 변환된 명령은 DB 서버로 전송되어 실행, DB는 Query를 처리하고, 요구된 데이터를 검색하거나 데이터에 변화를 준다.
- 결과 처리
- 결과 수신 : DB에서 작업의 결과를 보내면, 드라이버는 이 결과를 받아 애플리케이션에 해석할 수 있게 형태 변환한다.
- 결과 전달 : 드라이버는 최종적으로 애플리케이션에 전달
- 연결 종료
- 연결 해제 : 작업이 완료되면, 드라이버는 DB Server와 연결 종료, 자원을 정리하고 다음 세션을 위해 시스템 초기화
💡 JDBC Driver Manager 는 애플리케이션이 실행되고 있는 런타임 시점에
- Connection(연결 객체) 을 생성하여 쿼리를 요청할 수 있는 상태를 만들어주고
- Statement(상태) 를 생성하여 쿼리를 요청하게 해주고
- ResultSet(결과셋) 을 생성해 쿼리 결과를 받아올 수 있게 해준다. (응답 값 조회)

04. 데이터베이스 데이터를 외부에서 다루기(JDBC)
- JDBC를 통해 JAVA 애플리케이션에서 데이터베이스 데이터를 직접 다루는 방법을 소개한다.
- Connection, Statement, ResultSet 객체의 사용법을 배우며, 간단한 CRUD작업을 실습한다.
1. Spring Boot 의 JDBC 라이브러리
- Spring Boot와 JDBC : Spring Boot는 데이터베이스 연결을 쉽게 구성할 수 있도록 다양한 JDBC 드라이버를 지원한다.
**spring-boot-starter-jdbc**
- Spring Boot 프로젝트에서 JDBC를 통해 데이터베이스와 상호작용하기 위해 사용되는 스타터 패키지
- 주요 의존성과 자동 구성 기능을 제공
- DB와의 연결을 쉽고 빠르게 구성할 수 있도록 도와주는 브릿지 역할
- 주요 포함 내용
- JDBC API 지원: JDBC API를 통해 SQL 데이터베이스에 접근하고 작업을 수행할 수 있다.
- DataSource 구성: 데이터 소스 연결을 위한 기본적인 설정을 자동으로 구성한다. 이는 DB연결을 관리하는 데 필수적인 요소
- JdbcTemplate: **JdbcTemplate**은 Spring의 핵심 클래스 중 하나로. SQL 쿼리 실행, 결과 세트 처리, 예외 처리 등을 단순화
- 주요 장점 내용
- 간소화된 데이터베이스 연결: DataSource 설정과 JdbcTemplate 사용을 통해 복잡한 JDBC 코드를 간소화할 수 있다.
- 자동 구성: Spring Boot의 자동 구성 기능은 개발자가 데이터베이스 연결에 필요한 대부분의 구성을 자동으로 처리한다.
- 효율적인 예외 처리: Spring의 **DataAccessException**을 통해 JDBC에서 발생하는 예외를 Spring의 일관된 예외 체계로 변환
2. JDBC
- JDBC 드라이버란?: JDBC(Java Database Connectivity)는 자바 애플리케이션에서 데이터베이스에 접근할 수 있도록 하는 API JDBC 드라이버는 이 API를 구현하여, 자바 애플리케이션과 특정 데이터베이스 간의 연결을 가능하게 합니다.
- JDBC 드라이버 타입: JDBC 드라이버는 네 가지 유형(Type 1, 2, 3, 4)이 있으며, 각각의 특징과 사용 환경에 따라 선택할 수 있다. Type 4 드라이버(순수 자바 드라이버)가 가장 일반적으로 사용된다.
- JDBC 실습
- DriverManager 를 통해서 Connection(연결) 을 생성하여 쿼리를 요청할 수 있는 상태를 만들어주고
- Statement(상태) 를 생성하여 쿼리를 요청하고
- ResultSet(결과셋) 을 생성해 쿼리 결과를 받아온다.
Statement는 다음과 같은 동작 방식을 가진다.

구문 분석 -> 치환 -> 실행 -> 인출

- statement는 executeQuery() 나 executeUpdate() 를 실행하는 시점에 파라미터로 SQL문을 전달하는데, 이 때 전달되는 SQL 문은 완성된 형태로 한눈에 무슨 SQL 문인지 파악하기 쉽다.
- 하지만, Statement 는 SQL문을 수행하는 과정에서 구문 분석을 수행하기 때문에 Prepared Statement에 비해 효율성이 떨어진다 .
그러면 PreparedStatement는 무엇인가? PreparedStatement는 Statement를 상속하고 있는 Interface

- PreparedStatement는 내부적으로 Statement의 4단계 과정 중 첫 번째 parse 과정의 결과를 캐싱하고, 나머지 3가지 단계만 거쳐서 SQL문이 실행될 수 있게 한다.
즉, PreparedStatement를 사용하면 구문 분석(parse)의 결과를 캐싱해서 과정을 생략할 수 있으므로 성능이 향상
queryForObject는 Spring의 JdbcTemplate에서 단일 행(single row)의 값을 조회할 때 사용하는 메서드야.
SQL 쿼리를 실행하고, 결과를 하나의 객체로 매핑해 반환한다.
String sql = "SELECT name FROM users WHERE id = ?";
String name = jdbcTemplate.queryForObject(sql, String.class, 1);
System.out.println(name);
OWASP TOP 10 - SQL Injection (보안 - 매우 중요)
SQL Injection이란 - 악의적인 SQL 코드를 입력하여 데이터베이스를 조작하는 공격 기법
- 공격자가 입력 필드나 URL 파라미터를 통해 직접 SQL 쿼리를 조작해서 데이터를 탈취하거나 수정, 삭제할 수 있다.
PreparedStatement가 변수 문자열 쿼리(?)를 집어넣어 해킹하는 SQL Injection 도 방어할 수 있다.
'Sparta(JAVA심화3기) - TIL > 스파르타 강의 - JPA, Docker, 입문, 숙련, 심화' 카테고리의 다른 글
| JPA(JAVA Persistence API) - 3-3 주차 (TIL) ⭐️ (0) | 2025.02.14 |
|---|---|
| JPA(JAVA Persistence API) - 3-2주차 (TIL) (1) | 2025.02.11 |
| JPA(JAVA Persistence API) - 3-1 주차 (TIL) (2) | 2025.02.11 |
| JPA (Java Persistence API) - 2-1주차 (TIL) (0) | 2025.02.11 |
| JPA (Java Persistence API) - 1주차 (1) | 2025.02.11 |