-
JDBC란 무엇일까?spring/스프링 입문 주차 2024. 1. 18. 17:56
애플리케이션 서버와 데이터베이스는 어떻게 소통할까?
애플리케이션 서버에서 DB에 접근하기 위해서는 여러가지 작업이 필요하다.
1. 우선 DB에 연결하기 위해 커넥션을 연결해야 한다.
2. SQL을 작성한 후 커넥션을 통해 SQL을 요청한다.
3. 요청한 SQL에 대한 결과를 응답 받는다.기존에 사용하던 MySQL 서버를 PostgreSQL 서버로 변경한다면 무슨일이 발생할까?
- MySQL과 PostSQL은 커넥션을 연결하는 방법, SQL을 전달하는 방법, 결과를 응답받는 방법 모두 다를 수 있다.
- 따라서 애플리케이션 서버에서 작성했던 DB 연결 로직들을 전부 수정해야 한다.- 이러한 문제를 해결하기 위해 JDBC 표준 인터페이스가 등장했다.
- JDBC는 Java Database Connectivity로 DB에 접근할 수 있도록 Java에서 제공하는 API이다.
- JDBC에 연결해야 하는 DB의 JDBC 드라이버를 제공하면 DB 연결 로직을 변경할 필요 없이 DB 변경이 가능하다.
- DB 회사들은 자신들의 DB에 맞도록 JDBC 인터페이스를 구현한 후 라이브러리로 제공하는데
이를 JDBC 드라이버라 부른다.
JdbcTemplate이란?
- JDBC의 등장으로 손쉽게 DB교체가 가능해졌지만, 아직도 DB에 연결하기 위해 여러가지 작업 로직들을
직접 작성해야한다는 불편함이 남았다.
- 이러한 불편함을 해결하기 위해 커넥션 연결, statement 준비 및 실행, 커넥션 종료 등의 반복적이고
중복되는 작업들을 대신 처리해주는 JdbcTemplate이 등장했다.JdbcTemplate 사용법
실무에서 JdbcTemplate를 사용할 확률은 매우 적기 때문에, 코드는 눈으로만 보고 넘어가자
1. application.properties에 DB에 접근하기 위한 정보를 작성한다.
spring.datasource.url=jdbc:mysql://localhost:3306/memo spring.datasource.username=root spring.datasource.password={비밀번호} spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
2. build.gradle에 JDBC 라이브러리와 MySQL을 등록한다.// MySQL implementation 'mysql:mysql-connector-java:8.0.28' implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
3. DB연결이 필요한 곳에서 JdbcTemplate을 주입받아와 사용한다.
private final JdbcTemplate jdbctemplate; public MemoRepository(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; }
INSERT
String sql = "INSERT INTO memo (username, contents) VALUES (?, ?)"; jdbcTemplate.update(sql, "Robbie", "오늘 하루도 화이팅!");
UPDATE
String sql = "UPDATE memo SET username = ? WHERE id = ?"; jdbcTemplate.update(sql, "Robbert", 1);
DELETE
String sql = "DELETE FROM memo WHERE id = ?"; jdbcTemplate.update(sql, 1);
SELECT
String sql = "SELECT * FROM memo"; return jdbcTemplate.query(sql, new RowMapper<MemoResponseDto>() { @Override public MemoResponseDto mapRow(ResultSet rs, int rowNum) throws SQLException { // SQL 의 결과로 받아온 Memo 데이터들을 MemoResponseDto 타입으로 변환해줄 메서드 Long id = rs.getLong("id"); String username = rs.getString("username"); String contents = rs.getString("contents"); return new MemoResponseDto(id, username, contents); } });
코드를 봤다면 느꼈겠지만, 굉장히 복잡하고 어렵다.
이러한 점을 극복하기 위해 DB와 자바의 객체를 매핑하여 소통할 수 있는 ORM 이라는 기술이 등장했다.이는 JPA 파트에서 자세하게 다룰 수 있을 것이다.
'spring > 스프링 입문 주차' 카테고리의 다른 글
제어의 역전, ApplicationContext (2) 2024.01.22 IoC Container 와 Bean (0) 2024.01.22 HTTP 데이터를 객체로 처리하는 방법 (0) 2024.01.18 PathVariable과 ReqestParam (0) 2024.01.18 스프링에서 Jackson 형태로 반환하는 법 (0) 2024.01.18