Spring/스프링 DB 1편 - 데이터 접근 핵심 원리
-
[김영한 스프링] 09. 트랜잭션 이해 - 개념 이해 & 데이터베이스 연결 구조와 DB 세션Spring/스프링 DB 1편 - 데이터 접근 핵심 원리 2023. 10. 19. 02:14
트랜잭션 - 개념 이해 데이터를 저장할 때 단순히 파일에 저장해도 되는데, 데이터베이스에 저장하는 이유는 무엇일까? 여러 가지 이유가 있지만, 가장 대표적인 이유는 바로 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문이다. 트랜잭션을 이름 그대로 번역하면 거래라는 뜻이다. 이것을 쉽게 풀어서 이야기하면, 데이터베이스에서 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해 주는 것을 뜻한다. 그런데 하나의 거래를 안전하게 처리하려면 생각보다 고려해야 할 점이 많다. 예를 들어서 A의 5000원을 B에게 계좌이체한다고 생각해 보자. A의 잔고를 5000원 감소하고, B의 잔고를 5000원 증가해야 한다. 5000원 계좌이체 A의 잔고를 5000원 감소 B의 잔고를 5000원 증가 계좌이체라는 거래는 이렇게..
-
[김영한 스프링] 08. 커넥션풀과 데이터소스 이해 - DataSource 적용Spring/스프링 DB 1편 - 데이터 접근 핵심 원리 2023. 10. 18. 03:30
DataSource 적용 기존 코드를 유지하기 위해 기존 코드를 복사해서 새로 만들자. MemberRepositoryV0 -> MemberRepositoryV1 MemberRepositoryV0Test -> MemberRepositoryV1Test MemberRepositoryV1 package hello.jdbc.repository; import hello.jdbc.connection.DBConnectionUtil; import hello.jdbc.domain.Member; import lombok.extern.slf4j.Slf4j; import org.springframework.jdbc.support.JdbcUtils; import javax.sql.DataSource; import java.sql..
-
[김영한 스프링] 07. 커넥션풀과 데이터소스 이해 - DataSource 예제Spring/스프링 DB 1편 - 데이터 접근 핵심 원리 2023. 10. 18. 03:06
DataSource 예제1 - DriverManager 기존에 개발했던 DriverManager를 통해서 커넥션을 획득하는 방법을 확인해 보자. ConnectionTest - 드라이버 매니저 package hello.jdbc.connection; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import static hello.jdbc.connection.ConnectionConst.*; @Slf4j public class ConnectionTest { @Test void..
-
[김영한 스프링] 06. 커넥션풀과 데이터소스 이해 - 커넥션 풀, DataSource 이해Spring/스프링 DB 1편 - 데이터 접근 핵심 원리 2023. 10. 18. 02:25
커넥션 풀 이해 데이터베이스 커넥션을 매번 획득 데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거친다. 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다. DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달한다. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다. DB는 커넥션 생성이 완료되었다는 응답을 보낸다. DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다. 이렇게 커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 많이 소모되는 일이다. ..
-
[김영한 스프링] 05. JDBC 이해 - JDBC 개발 조회, 수정, 삭제Spring/스프링 DB 1편 - 데이터 접근 핵심 원리 2023. 10. 18. 00:27
JDBC 개발 - 조회 MemberRepositoryV0 - 회원 조회 추가 package hello.jdbc.repository; import hello.jdbc.connection.DBConnectionUtil; import hello.jdbc.domain.Member; import lombok.extern.slf4j.Slf4j; import java.sql.*; import java.util.NoSuchElementException; /** * JDBC - DriverManager 사용 */ @Slf4j public class MemberRepositoryV0 { public Member findById(String memberId) throws SQLException { String sql = "..
-
[김영한 스프링] 04. JDBC 이해 - JDBC 개발 등록Spring/스프링 DB 1편 - 데이터 접근 핵심 원리 2023. 10. 17. 19:50
JDBC 개발 - 등록 여기서는 JDBC를 사용해서 회원(Member) 데이터를 데이터베이스에 관리하는 기능을 개발해 보자. 주의! H2 데이터베이스 설정 마지막에 있는 테이블과 샘플 데이터 만들기를 통해서 member 테이블을 미리 만들어 두어야 한다. schema.sql drop table member if exists cascade; create table member ( member_id varchar(10), money integer not null default 0, primary key (member_id) ); Member package hello.jdbc.domain; import lombok.Data; @Data public class Member { private String memb..
-
[김영한 스프링] 03. JDBC 이해 - 데이터베이스 연결Spring/스프링 DB 1편 - 데이터 접근 핵심 원리 2023. 10. 17. 02:26
데이터베이스 연결 주의 H2 데이터베이스 서버를 먼저 실행해 두자. ConnectionConst package hello.jdbc.connection; public abstract class ConnectionConst { public static final String URL = "jdbc:h2:tcp://localhost/~/test"; public static final String USERNAME = "sa"; public static final String PASSWORD = ""; } main/java/hello/jdbc/connection/ConnectionConst 생성 데이터베이스에 접속하는데 필요한 기본 정보를 편리하게 사용할 수 있도록 상수로 만들었다. 이제 JDBC를 사용해서 실제 ..
-
[김영한 스프링] 02. JDBC 이해 - JDBC 이해 & 최신 데이터 접근 기술Spring/스프링 DB 1편 - 데이터 접근 핵심 원리 2023. 10. 17. 01:50
JDBC 이해 JDBC 등장 이유 애플리케이션을 개발할 때 중요한 데이터는 대부분 데이터베이스에 보관한다. 클라이언트, 애플리케이션 서버, DB 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해서 데이터베이스를 사용한다. 애플리케이션 서버와 DB - 일반적인 사용법 커넥션 연결 : 주로 TCP/IP를 사용해서 커넥션을 연결한다. SQL 전달 : 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 결과 응답 : DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다. 애플리케이션 서버와 DB - DB 변경 문제는 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달..