순수 JDBC
애플리케이션에서 db에 연동하여 데이터베이스에 insert, select 쿼리를 날려 db에 넣고 빼기
데이터 저장 기술의 발전
build.gradle 에 추가
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
자바는 db연동을 위해 JDBC driver가 있어야 함. 이걸 가지고 서로 연동
runtimeOnly 'com.h2database:h2'
db와 붙을 때 데이터베이스가 제공하는 client 필요
resources/application.properties
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
스프링이 db랑 연결하는 작업을 다 해줌
JDBC API 가지고 개발
interface 만들었기 때문에 구현체를 만들면 됨. 기존에는 MemoryMemberRepository 사용
JDBCMemberRepository 파일 만들기
회원 저장 역할은 MemberRepository가 함.
구현을 메모리에 - MemoryMemberRepository // db와 연동해서 JDBC에 - JDBCMemberRepository 차이
JDBCMemberRepository
스프링한테 dataSource를 주입받아야 함. 스프링 부트가 dataSource (접속 정보)를 만들어놓음
dataSource.getConnection()으로 데이터베이스 커넥션을 얻을 수 있음. 여기에 sql문 통해 db에 전달
JDBCMemberRepository 실행 위해 configuration 해줘야 함
src/main/java/hello/hellospring/SpringConfig.java
SpringConfig 에서 MemoryMemberRepository를 JDBCMemberRepository로 바꾸기
JDBCMemberRepository를 스프링 빈으로 등록
DataSource 필요
@Configuration 한 것도 스프링 빈으로 관리됨
스프링 부트가 설정 파일 application.properties를 보고 데이터베이스와 연결할 수 있는 정보가 있는 dataSource를 만들어 줌
그리고 dataSource를 주입해줌 @Autowired
package hello.hellospring;
import hello.hellospring.repository.JdbcMemberRepository;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class SpringConfig {
private DataSource dataSource;
@Autowired
public SpringConfig(DataSource dataSource) {
this.dataSource = dataSource;
}
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
// return new MemoryMemberRepository();
return new JdbcMemberRepository(dataSource);
}
}
다른 코드를 손대지 않고 JDBCMemberRepository class 를 만들고 (구현체를 만들어 interface를 확장)
Configuration만 변경
localhost:8080에서 h2db에 저장했던 회원 목록 확인
회원 가입
jpa가 추가된 회원 목록 확인
DB 콘솔에서 확인
스프링을 쓰는 이유
객체지향적 설계
다형성 활용. 인터페이스를 두고 구현체 바꿔 끼기 가능. 스프링은 이것을 편리하게 되도록 스프링 컨테이너가 이것을 지원.
+ dependency injection
기존의 코드를 손대지 않고 애플리케이션 설정, 조립하는 코드 (어셈블리)만 변경하면 됨. 이것을 편리하게 해주는 것이 스프링의 장점
MemberService는 MemberRepository를 의존
MemberRepository는 구현체로 MemoryMemberRepository와 JDBCMemberRepository가 있다.
스프링 컨테이너에서 기존에는 MemoryMemberRepository를 스프링 빈으로 등록 => JDBCMemberRepository 등록
구현체 변경
solid 검색
OCP, Open-Closed Principle (개방_폐쇄 원칙)
확장에는 열려있고, 수정, 변경에는 닫혀있다.
확장 - 기능 추가
객체지향의 다형성 개념을 활용하면 기능을 완전히 변경해도 애플리케이션 전체를 수정할 필요가 없다. 애플리케이션 조립 코드만 수정
빈으로 등록 + 나머지 DI
데이터를 DB에 저장하므로 스프링 서버를 다시 실행해도 데이터가 안전하게 저장되어 있다.
'Spring_inflearn > 입문' 카테고리의 다른 글
[Spring] inflearn 스프링 입문 - 스프링 DB 접근 기술 4 (0) | 2022.09.15 |
---|---|
[Spring] inflearn 스프링 입문 - 스프링 DB 접근 기술 3 (0) | 2022.09.15 |
[Spring] inflearn 스프링 입문 - 스프링 DB 접근 기술 1 (0) | 2022.09.14 |
[Spring] inflearn 스프링 입문 - 회원 관리 예제 - 웹 MVC 개발 (0) | 2022.09.13 |
[Spring] inflearn 스프링 입문 - 스프링 빈과 의존관계 2 (0) | 2022.09.13 |
댓글