본문 바로가기

개발일지/TIL

[230625] 네트워크와 Java Spring 기본 개념 이해하기 (3)

JDBC

❓JDBC는 뭐지?
💬 JDBC는 애플리케이션과 DB 사이에서 연결 및 종료, 쿼리 전송 등을 제공하는 API다.
❓JDBC는 어떻게 동작하죠?
💬 JDBC 인터페이스를 통해 요청을 하면 DriverManager에 의해 연결된 DB로 쿼리가 보내지고 그에 따른 응답을 받을 수 있다. 그리고 DriverManager와 DB 사이에는 애플리케이션의 요청을 DBMS가 이해할 수 있게 바꿔주는 JDBC Driver가 있다.
❓JDBC Driver가 왜 필요하죠?
💬 SQL 표준이 있지만, 각 제품(MySQL, MongoDB, Oracle 등) 마다 기능이나 처리하는 방식이 조금씩 다르다. 그래서 자바 어플리케이션의 요청을 각 DBMS가 이해할 수 있게 변경해 주는 중간 다리가 필요하다. 
 

Introduction to JDBC (Java Database Connectivity) - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

JDBC Template

❓JDBC Template은 뭐고 왜 생겼지?
💬 JDBC 인터페이스를 사용하더라도 요청을 처리하기 위해서 많은 작업들이 필요했다. 그리고 반복되는 부분들(연결, 종료 등)도 많았다. 그래서 자바 스프링은 DB에 요청하는 것을 간소화하고 JDBC에서 생길 수 있는 예외들을 방지하는 JDBC Template을 만들었다. 

 

[JDBC Template 저장 코드]

public Memo save(Memo memo) {
    KeyHolder keyHolder = new GeneratedKeyHolder();

    String sql = "INSERT INTO memo (username, contents) VALUES (?, ?)";
    jdbcTemplate.update( con -> {
                PreparedStatement preparedStatement = con.prepareStatement(sql,
                        Statement.RETURN_GENERATED_KEYS);

                preparedStatement.setString(1, memo.getUsername());
                preparedStatement.setString(2, memo.getContents());
                return preparedStatement;
            },
            keyHolder);

    Long id = keyHolder.getKey().longValue();
    memo.setId(id);

    return memo;
}
 

Spring - JDBC Template - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

생각

JDBC가 DB와 연결한다는 것은 알았지만 중간에 Driver, DriverManager가 있는지 몰랐다. 다양한 작업들이 수행된다는 것도 마찬가지다. 자바 스프링에 JDBC Template이 있다는 것도 이번에 처음 알았다. 이런 것들은 전부 띄어 넘고 JPA를 사용했다니, 아쉽다. 이런 내용들을 알고 사용했더라면 더 좋았을 텐데.