Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- multi-threading
- Java
- 접근제어지시자
- 자바 멀티스레딩
- 컴파일
- function
- 상수
- IntelliJ IDEA
- While
- 인텔리제이 한글 깨짐 해결법
- 반복문
- 생성자
- OPP개념
- JAVA객체지향
- for문
- this예약어
- java변수
- 형 변환
- 인텔리제이 기초 설정
- 집합관계
- break문
- Java데이터 타입
- 메서드
- 포함관계
- Thread
- continue문
- 시스템 환경 변수 편집
- 연관관계
- 메서드 오버로딩
- JAVA기초
Archives
- Today
- Total
최원종의 개발 블로그
JDBC(Java Database Connectivity) 본문
JDBC는 자바 프로그램이 데이터베이스(DB)와 연결되어 데이터를 주고받을 수 있게 해주는
자바 표준 인터페이스(API)를 말한다.

JDBC의 필요성
- MySQL, Oracle, PostgreSQL 등 수많은 데이터베이스가 있는데 JDBC가 없다면,
- 개발자는 각 데이터베이스마다 서로 다른 접속 방식과 쿼리 전송 방법을 따로 공부해서 구현해야 한다
- JDBC는 이를 하나로 통합하여, 어떤 DB를 쓰든 동일한 자바 코드(메서드)로 조작할 수 있게 해 준다

JDBC의 주요 구성 요소

- JDBC API: 자바 애플리케이션에서 DB에 접근하기 위해 사용하는 인터페이스 집합 (java.sql, javax.sql 패키지)
- JDBC Driver: 각 DB 제조사(Oracle, MySQL 등)에서 JDBC 인터페이스를 자기들의 DB에 맞게 구현한 라이브러리 (예: MySQL용 Connector/J)
JDBC 작업 흐름 (Workflow)

- 드라이버 로딩: 사용할 DB의 드라이버를 메모리에 올림.
- 연결 생성 (Connection): DB URL, 계정 정보를 통해 DB와 연결
- 문장 생성 (Statement/PreparedStatement): 실행할 SQL 쿼리를 준비
- 쿼리 실행: 준비된 SQL을 DB로 보냄
- 결과 처리 (ResultSet): SELECT 쿼리의 경우 결과 데이터를 받아와 처리
- 자원 해제 (Close): 사용한 연결과 객체들을 닫아 메모리를 관리
JDBC의 장단점

장점
- 표준화: 특정 DB에 종속되지 않는 일관된 코드를 작성할 수 있다
- 객체 지향적: 자바의 언어적 특성을 활용해 DB를 제어할 수 있
단점
- 반복적인 코드: 연결 생성, 예외 처리, 자원 해제 등 매번 작성해야 하는 코드(Boilerplate code)가 많다.
- SQL 의존성: 자바 코드 안에 SQL문이 직접 들어가 관리가 어려울 수 있다.
실습 기본 연결 코드
package ch01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JdbcHello {
public static void main(String[] args) {
// 연결 정보
String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=Asia/Seoul";
String user = "xxxxxxxx";
String password = "xxxxxxxxx";
// 실무에서 비밀번를 코드를 직접 작성 쓰지 않습니다.
// 환경변수나 설정파일 사용할 수 있음 (.env, application.properties, application.ymal)
try (Connection connection = DriverManager
.getConnection(url, user, password)) {
System.out.println("연결 성공 됨.");
System.out.println("DB 제품명 : " + connection.getMetaData().getDatabaseProductName());
System.out.println("DB 버전 : " + connection.getMetaData().getDatabaseProductVersion());
} catch (SQLException e) {
System.out.println("DB랑 연결 오류 발생 함");
e.printStackTrace();
}
}
}
환경 변수 활용 코드
package ch01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JdbcHello2 {
public static void main(String[] args) {
// 연결 정보
String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=Asia/Seoul";
String user = System.getenv("DB_USER");
String password = System.getenv("DB_PASSWORD");
System.out.println("로컬 컴퓨터에 저장한 환경 변수 이름으로 값을 확인해 보자");
System.out.println("user : " + user);
System.out.println("password : " + password);
try (Connection connection = DriverManager
.getConnection(url, user, password)) {
System.out.println("연결 성공 됨.");
System.out.println("DB 제품명 : " + connection.getMetaData().getDatabaseProductName());
System.out.println("DB 버전 : " + connection.getMetaData().getDatabaseProductVersion());
} catch (SQLException e) {
System.out.println("DB랑 연결 오류 발생 함");
e.printStackTrace();
}
}
}
코드 핵심 포인트
DriverManager.getConnection(url, user, password)
→ JDBC URL, DB 계정, 비밀번호로 데이터베이스에 연결
try (Connection connection = ...) { }
→ try-with-resources 패턴
→ 블록이 끝나면 connection.close() 가 자동 호출됨
→ 연결을 안 닫으면 DB 연결이 쌓여서 서버가 터집니다
SQLException
→ DB 연결 실패, 잘못된 SQL, 권한 없음 등
→ JDBC 작업의 모든 에러는 SQLException 으로 처리
JDBC URL 형식 이해
jdbc:mysql://localhost:3306/shop?serverTimezone=Asia/Seoul
│ │ │ │ │ └─ 옵션 파라미터
│ │ │ │ └─ 데이터베이스 이름
│ │ │ └─ 포트 번호 (MySQL 기본: 3306)
│ │ └─ 서버 주소 (내 컴퓨터: localhost)
│ └─ 데이터베이스 종류
└─ JDBC 프로토콜
다른 데이터베이스의 URL 형식
MySQL : jdbc:mysql://localhost:3306/dbname
Oracle : jdbc:oracle:thin:@localhost:1521:dbname
PostgreSQL : jdbc:postgresql://localhost:5432/dbname
H2(인메모리) : jdbc:h2:mem:testdb'Java > JAVA 유용한 클래스' 카테고리의 다른 글
| JDBC 데이터 기본 조작 (CRUD) - 3 (0) | 2026.04.14 |
|---|---|
| JDBC 구성 요소 (아키텍처) - 2 (0) | 2026.04.14 |
| HTTP Client 연습 - 5 (0) | 2026.04.01 |
| 공공데이터 API 실습 - HTTP - 4 (0) | 2026.04.01 |
| JSON 파싱 - HTTP-3 (0) | 2026.04.01 |

