Spring 177

트랜잭션 - DB 예제 2 - 자동 커밋 / 수동 커밋

자동 커밋 트랜잭션을 사용하려면 먼저 자동 커밋과 수동 커밋을 이해해야 한다. 커밋으로 설정하면 쿼리 실행 직후에 자동으로 커밋을 호출 / 커밋이나 롤백을 직접 호출하지 않아도 되는 편리함이 있다. 쿼리를 하나하나 실행할 때 마다 자동으로 커밋이 되어서 원하는 트랜잭션 기능을 제대로 사용할 수 없다. set autocommit true; //자동 커밋 모드 설정 insert into member(member_id, money) values ('data1',10000); //자동 커밋 insert into member(member_id, money) values ('data2',10000); //자동 커밋 => commit, rollback을 직접 호출하면서 트랜잭션 기능을 제대로 수행하려면 자동 커밋..

Spring/SpringDB 2022.06.15

트랜잭션 - 개념 이해

데이터베이스에서 트랜잭션이라 함은 하나의 거래를 안전하게 보장해준 다는 것 트랜잭션 ACID 트랜잭션은 ACID라 하는 원자성 일관성 격리성 지속성을 보장해야 한다. 원자성 : 원자성: 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공 하거나 모두 실패해야 한다. 일관성: 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다. 예를 들어 데이터베이스에서 정한 무결성 제약 조건을 항상 만족해야 한다. 격리성: 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다. 예를 들어 동시에 같은 데이터를 수정하지 못하도록 해야 한다. 격리성은 동시성과 관련된 성능 이슈로 인해 트랜잭션 격리 수준 (Isolation level)을 선택할 수 있다. 지속성: 트랜잭션을 성공적..

Spring/SpringDB 2022.06.15

DataSource 적용

DataSource를 사용해보자. => 의존관계 주입 받기\ 기존 코드를 유지하기 위해 기존 코드를 복사해서 새로 만들기 MemberRepositoryV0 -> MemberRepositoryV1 MemberRepositoryV0Test -> MemberRepositoryV1Test MemberRepositoryV1과 MemberRepositoryV1Test 두개를 만들어 둔다. DataSource 의존관계 주입 외부에서 DataSource를 주입 받아서 사용 -> 직접 만든 DBConnectionUtil을 사용하지 않아도 됨 DataSource는 표준 인터페이스여서 DriveManagerDataSource에서 HikariDataSource로 변경되어도 해당 코드를 변경하지 않아도 됨 JdbcUtils ..

Spring/SpringDB 2022.06.14

DataSource 예제 - DriverManager

DataSource 예제인 DriverManager를 만들어보자. 실제 커넥션을 각각 가져와 준다. 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 driverManager() throws SQLException { Connection c..

Spring/SpringDB 2022.06.14

DataSource 이해

커넥션을 얻는 방법은 앞서 학습한 JDBC DriverManager 를 직접 사용하거나, 커넥션 풀을 사용하는 등 다양한 방법이 존재한다. 커넥션을 획득하는 다양한 방법 DriverManager를 통해 커넥션 획득 우리가 앞서 JDBC로 개발한 애플리케이션 처럼 DriverManager 를 통해서 커넥션을 획득하다가, 커넥션 풀을 사용하는 방법으로 변경하려면 어떻게 해야할까? DriverManager를 통해 커넥션 획득하다가 커넥션 풀로 변경시 문제 예를 들어서 애플리케이션 로직에서 DriverManager 를 사용해서 커넥션을 획득하다가 HikariCP 같은커넥션 풀을 사용하도록 변경하면 커넥션을 획득하는 애플리케이션 코드도 함께 변경해야 한다. 의존관계가 DriverManager 에서 HikariCP..

Spring/SpringDB 2022.06.14

커넥션 풀 이해

커넥션 풀 이해 데이터베이스 커넥션을 매번 획득 데이터베이스 커넥션을 획득할 때 다음과 같은 복잡한 과정 거침 애플리케이션 로직은 DB 드라이버 통해서 커넥션 조회 DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달한다. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다. DB는 커넥션 생성이 완료되었다는 응답을 보낸다. DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다. 이렇게 커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 많이 소모되는 일이다. DB는 물론이..

Spring/SpringDB 2022.06.14

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) ); domain 패키지를 만들고 Member class를 만들어준다. package hello.jdbc.domain; import lombok.Data; @Data public class Member { private String memb..

Spring/SpringDB 2022.06.14

Spring Boot으로 웹 출시까지 #12. 권한에 맞는 화면 구성 및 API 호출 & 13. JPA 이용한 커스텀 쿼리 만들기

사용자 권한에 따라 API 제한 하기 @Secured, @RolesAllowed, @PreAuthorize 혹은 새로운 어노테이션을 만들어서 접근 권한을 설정 가장 간단한 @Secured를 이용 WebSecurityConfig Class에서 아래 부분에서 @Autowired를 주석처리 해주니 일단 에러가 임시방편으로 해결되었다. 근데 Signup하고 signin이 되는 과정으로 안넘어간다. 로그인이 안되는중 => 게시판도 안보임. MySQL [mydb]> select * from user; +----+----------+--------------------------------------------------------------+---------+ | id | username | password | ..

Spring/SpringBoot 2022.06.06