티스토리 뷰
스프링 입문 - 코드로 배우는 스프링 부트, 웹 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를 사용한다.
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 설치
순서는 아래와 같다.
- mysql 설치
- DB 생성
- user 생성 및 권한 부여
- 테이블 생성
- gradle 파일에 의존성 추가
- 스프링 부트에 데이터베이스 연결 정보 추가
참고한 포스팅
- windows에 mysql 설치 : https://hongong.hanbit.co.kr/mysql-다운로드-및-설치하기mysql-community-8-0/
- ubuntu에 mysql 설치 : https://velog.io/@seungsang00/Ubuntu-우분투에-MySQL-설치하기
- 기본 세팅 : https://cotak.tistory.com/4
세팅 값
- 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
'Spring&Spring Boot' 카테고리의 다른 글
[Spring Boot] 입문 - JDBC Template(feat. 스프링 통합 테스트) (0) | 2023.02.21 |
---|---|
[Spring Boot] 입문 - 순수 JDBC로 DB 연결하기(feat. mysql) - 2 (1) | 2023.02.17 |
[Spring Boot] 입문 - 회원 관리 예제(웹 MVC 개발) (0) | 2023.02.11 |
[Spring Boot] 입문 - 스프링 빈과 컨테이너, 그리고 의존 관계(feat. IoC, DI) (0) | 2023.01.01 |
[Spring Boot] 입문 - 백엔드 개발 흐름_2 익힉기(도메인/리포지토리/서비스/테스트 케이스) (0) | 2022.12.29 |
- Total
- Today
- Yesterday
- 스프링 테스트
- spring mvc
- 쉘 코드
- Do it! 정직하게 코딩하며 배우는 딥러닝 입문
- git branch
- 파이썬 for Beginner 솔루션
- 쉽게 배우는 운영체제
- 김영환
- git
- 생활코딩 javascript
- Spring
- Thymeleaf
- Spring Data JPA
- 선형 회귀
- Python Cookbook
- 스프링 mvc
- 운영체제 반효경
- 프로그래머스
- 방명록 프로젝트
- Spring Boot
- JPA
- Computer_Networking_A_Top-Down_Approach
- git merge
- Gradle
- 파이썬 for Beginner 연습문제
- 스프링 컨테이너
- 패킷 스위칭
- 스프링
- jsp
- 지옥에서 온 git
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |