티스토리 뷰

728x90
반응형

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 김영한 인프런 강의 참고

이전 포스팅 : 2023.02.11 - [Web Programming/Spring&Spring Boot] - [Spring] 입문 - 회원 관리 예제(웹 MVC 개발)

이번 포스팅에서는 데이터 저장소를 메모리에서 외부 DB로 변경하여, 서버를 다시 시작해도 데이터가 온전히 보존될 수 있도록 한다. 그러기 위해서는 스프링에서 외부 DB에 접속하는 방법을 배워야 한다.

20년 전만 해도 DB를 연결하기 위해서는 설정부터 시작해서 DB에 접근하는 방법도 매우 복잡하고, SQL문 역시 개발자가 거의 작성해야 했다. 하지만 요즘은 JPA라는 ORM(Object-Relational Mapping) 기술 표준 덕분에 이러한 작업들이 상당히 간편해지고, SQL도 직접 작성하는 일 없이 DB 접근부터 설계까지 가능하다.

이제는 이러한 도구를 적극 활용하여 능률과 정확성을 올리면 된다. 하지만 처음 공부하는 단계이니, 어떤 순서로 JDBC API가 DB에 접근하는 지 등을 살짝 맛보면서 추후 JPA를 사용했을 때 어떤 이점들이 있는지 느껴보는 것도 좋을 것 같다.

  • JDBC API
  • mysql 설치
  • 순수 JDBC API로 DB 접근하기
  • DB 교체를 위한 스프링 설정 변경

JDBC API


스프링은 자바에서 데이터베이스에 접속할 수 있도록 도와주는 자바 API인 JDBC를 사용한다.

https://www.tutorialspoint.com/jdbc/jdbc-introduction.htm

JDBC는 각 DB 회사가 제공하는 JDBC Driver 압축 파일을 포함하고 있다. 이를 JDBC Driver Manager가 일괄적으로 관리하고 있다. 그렇게 다형성과 추상화가 반복되어 자바 어플리케이션은 DB에 종속되지 않고 JDBC API를 사용하여 일관되게 DB에 접근할 수 있게 된다.

전체적인 순서는 아래와 같다.

1. JDBC Driver 로드

데이터베이스에 맞는 Driver 클래스를 로딩한다.

2. Connection 객체 생성

데이터베이스의 연결 정보를 가지고 일정 시간 동안 데이터베이스와 연결할 수 있도록 통로 역할을 하는 객체다.

한 번 연결하면 해제될 때까지 재 연결 없이 계속해서 사용할 수 있다.

3. Statement 객체 생성

Connection 객체로부터 생성된다.

다양한 SQL 구문들을 정의하고 바인딩 하는 방법들과 실제 DB로 전송하는 방법들이 정의된 객체다.

4. Query 수행

Statement 객체 내에 정의된 executeQuery(), executeUpdate() 등의 메소드들로 sql 문자열을 입력받아 실행된다.

그 결과는 ResultSet 타입 객체다.

5. ResultSet 객체로부터 데이터 저장

쿼리 결과 값을 ResultSet 객체 타입의 변수에 저장한다.

ResultSet 인터페이스는 반환된 결과 값들을 row 별로, column 별로 조회할 수 있는 메서드들을 제공한다.

6. 리소스 해제

위에서 생성한 객체 리소스들을 역순으로 해제한다.

ResultSet close()Statement close()Connection close()

mysql 설치


순서는 아래와 같다.

  1. mysql 설치
  2. DB 생성
  3. user 생성 및 권한 부여
  4. 테이블 생성
  5. gradle 파일에 의존성 추가
  6. 스프링 부트에 데이터베이스 연결 정보 추가

참고한 포스팅

세팅 값

  • database : test_db
  • table : member
  • user : test

테이블 관리를 위해 프로젝트 루트 경로에 sql/ddl.sql 파일을 생성

CREATE TABLE member (
    id BIGINT NOT NULL AUTO_INCREMENT,
    name VARCHAR(255),
    PRIMARY KEY(id)
);

설치한 mysql을 spring boot 프로젝트와 연동하기 위해서 몇 가지 설정을 해준다.

build.gradle 파일에 jdbc, mysql 데이터베이스 관련 라이브러리 추가

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.0.0'
	id 'io.spring.dependency-management' version '1.1.0'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.springframework.boot:spring-boot-starter-jdbc' // 추가
	runtimeOnly 'mysql:mysql-connector-java'  // 추가
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
	useJUnitPlatform()
}

스프링 부트에 데이터베이스 연결 설정 추가

src/…/resources/application.properties

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test_db?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.username=test
spring.datasource.password=test

여기까지 설정을 마친 뒤 스프링을 실행했을 때 에러가 없으면 거의 성공이다.

이제 MemberRepository를 JDBC API를 활용하여 구현한 뒤, DB를 교체하면 된다. 이를 위해 초기 설계에서 MemberRepository를 인터페이스로 구현한 것이다. JdbcMemberRepository를 구현한 뒤, 의존성을 MemoryMemberRepository에서 JdbcMemberRepository로 옮기기만 하면 된다.

다음 포스팅에서…

Reference

728x90
반응형
댓글