[JDBC (8) ] DB연결 (ConnectionTest.java)

Yeonbi_Kim·2024년 7월 21일
post-thumbnail

JDBC 연결 개념 및 사용

개념 설명

•	JDBC (Java Database Connectivity): 자바에서 데이터베이스와 상호작용하기 위한 표준 API입니다.
•	DriverManager: 데이터베이스 드라이버를 관리하고, 데이터베이스 연결을 설정합니다.
•	Connection: 데이터베이스와의 연결을 나타내는 객체입니다.
•	Class.forName(“com.mysql.cj.jdbc.Driver”): JDBC 드라이버를 메모리에 로드하여 데이터베이스와의 통신을 가능하게 합니다.

사용 방법

  1. 드라이버 로드 : - Class.forName("com.mysql.cj.jdbc.Driver");
    - 데이터베이스 드라이버를 메모리에 로드한다.
    드라이버가 없을 경우 ClassNotFoundException이 발생한다.

  2. 데이터베이스 연결 : - Connection conn = DriverManager.getConnection(url, user, password)
    - 데이터베이스 URL,사용자명, 비밀번호를 사용하여 데이터베이스와 연결.

  3. Statement 생성 : - Statement stmt = conn.createStatement();
    - SQL 쿼리를 실행하기 위한 Statementr 객체를 생성.

  4. SQL 쿼리 실행 : -ResultSet rs = stmt.executeQuery("SELECT * FROM table_name");
    -SQL 쿼리를 실행하고 결과를 ResultSet 객체로 반환받는다.

  5. 연결 종료 : - conn.close();
    - 데이터베이스와의 연결을 종료.

         

유의점

  • 예외 처리 : 데이터베이스 연결 시 SQLException을 반드시 처리해야 함.
  • 리소스 해제 : 사용한 Connection,Statement,ResultSet 객체를 반드시 닫아야함.
  • 보안 : SQL 인젝션 공격에 대비하여 PreparedStatement를 사용하는 것이 좋다.

코드 분석

java

package org.scuola.jdbc_ex.test;
// 자바 패키지 선언. - 클래스를 논리적으로 그룹화하여 관리하기 위함.

//import문들 : 필요한 클래스를 가져온다. - 외부 라이브러리나 다른 패키지의 클래스를 사용하기 위하. - 불필요한 임포트가 없도록한다. 
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.scuola.jdbc_ex1.common.JDBCUtil;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionTest {

   @Test
   //JUnit테스트 메소드임을 나타냄- 테스트 프레임워크에서 이 메소드를 실행할 수 있도록 한다.
   
   @DisplayName("jdbc_ex1 데이터베이스에 접속한다. ")
   //테스트 메소드의 설명을 지정 - 테스트 실행 결과를 이해하기 쉽게 만듬.
   
   
   // 이 코드는 jdbc를 이용하여 mysql 데이터베이스에 연결하고 연결을 해제하는 과정을 포함한다. 각각의 개념과 논리적 과정을 심층 분석해보자.
   
   public void testConnection() throws SQLException,
   ClassNotFoundException {
   /* <메소드 선언> 메소드를 선언한다. public은 접근 제어자로 다른 클래스에서도 이 메소드에 접근할 수 있음을 의미한다. 
   - 예외처리 : throw SQLException, ClassNotFoundException은 이 메소드가 실행 중에 SQLException이나 ClassNotFoundException을 발생시킬 수 있음을 명시한다. */
   
           Class.forName("com.mysql.cj.jdbc.Driver");
           //드라이버 로드
           /* MySQL JDBC 드라이버를 메모리에 로드. 
           - 데이터베이스와의 통신을 가능하게 하기 위해 jdbc 드라이버를 로드함.
           - 드라이버 클래스 이름을 정확히 입력한다. 
             그렇지 않으면 ClassNotFoundException이 발생한다. */
           
           String url = "jdbc:mysql://127.0.0.1:3306/jdbc_ex1";
           //연결 문자열
           /* 데이터베이스를 연결하기 위한 URL 문자열을 선언한다. 
             구성요소 : 1) jdbc:mysql://는 JDBC와 MySQL프로토콜을 사용함을 나타냄.
                      2) 127.0.0.1는 로컬호스트 ip주소.
                      3) 3306은 MySQL의 기본 포트 번호
                      4) jdbc_ex1은 데이터베이스 이름. */
                      
           String id = "jdbc_ex1";
           String password = "jdbc_ex1";
           //사용자명과 비밀번호 선언
           /* 데이터베이스에 접속하기 위한 사용자명과 비밀번호 선언.
              데이터베이스 인증을 위해 필요함. */
              
             
           Connection conn = DriverManager.getConnection(url,id,password);
           //데이터베이스 연결
           /* 데이터베이스에 연결을 설정하고 Connection객체를 반환.
              데이터베이스 작업을 수행하기 위한 연결을 만듬.
              올바른 url, 사용자명, 비밀번호를 사용하지 않으면 SQLException이 발생. */
           
           System.out.println("DB 연결 성공");
           //성공 메시지 출력
           /* 연결이 성공했음을 콘솔에 출력 */
           
           conn.close();
           //연결 해제
           /* 사용한 리소스를 반환하여 메모리 누수를 방지.
              모든 데이터베이스 작업이 완료되면 연결을 닫아야 한다. */
   
   }
}

논리적 과정

1. 메소드 선언:
testConnection 메소드를 선언하여 데이터베이스 연결을 테스트할 준비를 합니다. 메소드가 SQLException과 ClassNotFoundException을 던질 수 있음을 명시합니다.

2. 드라이버 로드:
Class.forName("com.mysql.cj.jdbc.Driver");를 통해 MySQL JDBC 드라이버를 메모리에 로드합니다. 이 과정이 성공하면 데이터베이스와의 통신이 가능합니다.

3. 연결 문자열 선언:
데이터베이스에 연결할 URL 문자열을 선언합니다. 이 문자열에는 프로토콜, IP 주소, 포트 번호, 데이터베이스 이름이 포함됩니다.

4. 사용자명과 비밀번호 선언
데이터베이스에 접속하기 위한 사용자명과 비밀번호를 선언합니다. 이는 데이터베이스 인증에 사용됩니다.

5. 데이터베이스 연결:
DriverManager.getConnection(url, id, password);를 호출하여 데이터베이스에 연결합니다. 이 연결은 Connection 객체로 반환되며, 이를 통해 데이터베이스 작업을 수행할 수 있습니다.

6. 성공 메시지 출력:
연결이 성공했음을 확인하기 위해 “DB 연결 성공” 메시지를 콘솔에 출력합니다.

7. 연결 해제:
데이터베이스 작업이 완료되면 conn.close();를 호출하여 연결을 종료합니다. 이는 리소스 누수를 방지하기 위해 필요합니다.

0개의 댓글