개발하는 쿠키
article thumbnail

스프링 Application에서 DBMS에 접근하는 방법 (간단한 버전)

1. 데이터베이스 드라이버 로드

Maven 또는 Gradle을 사용해서 JDBC 드라이버를 프로젝트에 추가합니다.

 

2. 데이터베이스 연결 설정

DB 연결정보를 XML, YAML, Properties 파일 또는 애노테이션을 통해 설정합니다.

// properties 파일
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=username
spring.datasource.password=password

3. JDBC 템플릿 사용

DB 연결 설정 정보를 받아와서 내부적으로 DB와 연결을 설정합니다.

그리고 SQL문을 실행하고 결과를 처리합니다.

 

4. SQL문 실행

JDBC 템플릿에 있는 메서드를 사용해서 insert, update, delete를 실행합니다.

이때 JDBC 템플릿이 내부적으로 JDBC API를 사용해서 DB와 통신합니다.

 

5. 결과 처리

JDBC 템플릿은 SQL문의 실행결과를 받아와서 처리합니다.

- SELECT : ResultSet 객체로 받아와서 필요한 정보를 추출합니다.

- INSERT, UPDATE, DELETE : 실행결과에 대한 정보를 확인합니다.

- 객체 매핑이 필요한 경우 :  RowMapper를 사용합니다. 

스프링 Application에서 DBMS에 접근하는 방법 (자세한 버전)

JDBC 템플릿은 스프링 프레임워크에서 제공하는 JDBC 추상화 계층입니다.

추상화를 벗어나 좀 더 내부적으로 살펴보면,

다음 그림처럼 Spring Application -> Spring Data JDBC -> JDBC API -> JDBC Driver Manager -> JDBC Driver -> DBMS 순으로 처리가 이루어집니다.

그림 속 용어 설명

1. Spring Application

Spring Framework를 이용해 개발된 응용 프로그램입니다.

2. Spring Data JDBC

Spring Framework에서 제공하는 DB와 상호작용하는 방식입니다.

3. JDBC API

Java Database Conectivity의 약자로 자바 프로그램과 DB를 연결하는 인터페이스 집합입니다.

구성요소

- Driver Manager : DB Driver를 관리하기 위한 클래스

- Connection : DB서버와 연결을 나타내는 인터페이스

- Statement, PreparedStatement : SQL문을 실행하기 위한 인터페이스

- ResultSet : 쿼리 결과 저장, 조회

- SQLException

4. JDBC Driver Manager

JDBC API에서 제공하는 클래스 중 하나로, DB Driver를 관리하고 DB 연결을 설정합니다. (DB url, 사용자 이름, 암호) 

getConnection() 메서드를 통해 DB와의 연결을 생성합니다.

5. JDBC Driver

JDBC API를 구현한 클래스로, 자바 애플리케이션과 DB 간의 통신, SQL문 실행결과 처리, 트랜잭션을 관리합니다.

6. DBMS

Database Management System의 약자로 데이터를 저장, 관리, 조작하는 시스템입니다.

 

위의 순서에 따르면, 프로그램에서 DB에 접근하는 방법 중 하나인 Spring Data JDBC를 이용해서

- JDBC Driver Manager로 DB연결을 설정하고

- JDBC Driver로 DB와 통신해서

- DBMS를 통해 DB의 데이터를 관리할 수 있습니다.

기본 JDBC를 이용해 데이터를 가져오는 과정 vs Spring JDBC

기존에는 기본 JDBC를 사용해 DB에 접근하다가

- 반복되는 코드가 많고,

- 예외처리와 트랜잭션 관리를 수동으로 해야 한다는 점

때문에 Spring JDBC가 나왔습니다.

 

기본 JDBC를 이용해 데이터를 가져오는 과정은 다음과 같습니다.

import java.sql.*;

public class JdbcExample {
    public static void main(String[] args) {
    	// 1. 연결 파라미터 정의
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "username";
        String password = "password";

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2. 데이터베이스에 연결
            connection = DriverManager.getConnection(url, username, password);

            // 3. SQL 문 실행
            statement = connection.createStatement();
            String sql = "SELECT * FROM customers";
            resultSet = statement.executeQuery(sql);

            // 4. 결과 처리 (결과를 반복하는 루프 설정)
            while (resultSet.next()) {
            	// 5. 각 이터레이션에 대한 작업 수행
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                String email = resultSet.getString("email");
                System.out.println("ID: " + id + ", Name: " + name + ", Email: " + email);
            }
          // 6. 모든 예외 처리, 트랜젝션 제어
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 7. 리소스 해제
            try {
                if (resultSet != null) {
                    resultSet.close();
                }
                if (statement != null) {
                    statement.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

 

 

Spring JDBC를 이용해 데이터를 가져오는 방법은 다음과 같습니다.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class CustomerDao {
    // 1. 연결 파라미터 정의
    private final JdbcTemplate jdbcTemplate;

    @Autowired
    public CustomerDao(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public List<Customer> getAllCustomers() {
    	// 2. SQL문 지정, 파라미터 선언과 파라미터 값 제공
        String sql = "SELECT * FROM customers";
        return jdbcTemplate.query(sql, (rs, rowNum) -> {
        // 3. 각 이터레이션에 대한 작업 수행
            Customer customer = new Customer();
            customer.setId(rs.getInt("id"));
            customer.setName(rs.getString("name"));
            customer.setEmail(rs.getString("email"));
            return customer;
        });
    }
}

위 2가지 코드를 비교해 보면 Spring JDBC를 사용하는 것이 코드가 더 간단하고, 개발자의 역할이 줄어든다는 것을 알 수 있습니다.

 

면접 예상 질문

1. JDBC와 Spring JDBC의 차이점은 무엇인가요?

더보기

JDBC는 자바에서 데이터베이스에 접근하기 위한 자바 API입니다.

Spring JDBC는 Spring 프레임워크에서 제공하는 기능으로 개발자가 JDBC를 더 편리하게 사용할 수 있도록 편의 기능을 제공합니다.

2. Spring JDBC를 사용해서 데이터베이스에 접근하는 방법을 설명해 주세요.

더보기

Spring JDBC를 사용해서 데이터베이스에 접근할 때는 JDBC Template 클래스를 활용합니다. JDBC Template은 데이터베이스 연결, 쿼리 실행, 결과 처리 기능을 담은 편한 메서드를 제공합니다.

 

개발자는 JDBC Template을 의존성 주입을 통해 주입받고, 필요한 메서드를 호출해서 작업을 수행합니다.

3. Spring JDBC와 Hibernate 또는 JPA 와의 차이점은 무엇이며, 어떤 경우에 어떤 기술을 선택해야 할까요?

더보기

Spring JDBC는 직접 JDBC API를 사용하는 데이터베이스 접근 기술이고,

Hibernate / JPA는 객체 - 관계 매핑을 통해 데이터베이스를 조작하는 Object Relational Mapping 기술입니다. 

 

Spring JDBC는 단순한 SQL 작업이 필요한 경우에 적합하며,

Hibernate / JPA는 복잡한 객체 - 관계 매핑과 영속성 관리가 필요한 경우에 적합합니다.

 

선택은 개발 프로젝트의 요구사항과 개발자의 선호도에 따라 달라집니다.


참고자료

- https://velog.io/@arielgv829/Spring-SpringJDBC

- https://velog.io/@wook2pp/JDBC%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%A0%91%EA%B7%BC

- https://www.youtube.com/watch?v=mezbxKGu68Y

반응형
profile

개발하는 쿠키

@COOKIE_

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!