일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- transaction
- pointcut
- 자바
- 김영한
- Proxy
- 스프링 핵심 기능
- 백준
- QueryDSL
- java
- AOP
- springdatajpa
- JDBC
- http
- SpringBoot
- 스프링
- db
- 알고리즘
- Thymeleaf
- Android
- Spring Boot
- kotlin
- 그리디
- Servlet
- 스프링 핵심 원리
- spring
- 인프런
- jpa
- Exception
- Greedy
- JPQL
- Today
- Total
목록Database (8)
개발자되기 프로젝트
애플리케이션에서 트랜잭션을 어떤 계층에 걸어야 할까? 쉽게 이야기해서 트랜잭션을 어디에서 시작하고, 어디에서 커밋해야할까? 비즈니스 로직과 transaction 트랜잭션은 비즈니스 로직이 있는 서비스 계층에서 시작해야 한다. 비즈니스 로직이 잘못되면 해당 비즈니스 로직으로 인해 문제가 되는 부분을 함께 롤백해야 하기 때문이다. 그런데 트랜잭션을 시작하려면 커넥션이 필요하다. 결국 서비스 계층에서 커넥션을 만들고, 트랜잭션 커밋 이후에 커넥션을 종료해야 한다. 애플리케이션에서 DB 트랜잭션을 사용하려면 트랜잭션을 사용하는 동안 같은 커넥션을 유지해야한다. 그래야 같은 세션을 사용할 수 있다. 커넥션과 세션 애플리케이션에서 같은 커넥션을 유지하려면 어떻게 해야할까? 가장 단순한 방법은 커넥션을 파라미터로 전..
MemberServiceV1 package hello.jdbc.service; import hello.jdbc.domain.Member; import hello.jdbc.repository.MemberRepositoryV1; import lombok.RequiredArgsConstructor; import java.sql.SQLException; @RequiredArgsConstructor public class MemberServiceV1 { private final MemberRepositoryV1 memberRepository; private void accountTransfer(String fromId, String toId, int money) throws SQLException { Member..
기본 데이터 입력 set autocommit true; delete from member; insert into member(member_id, money) values ('memberA',10000); lock 0 lock 1 - 세션1 set autocommit false; update member set money=500 where member_id = 'memberA'; 세션1이 트랜잭션을 시작하고, memberA 의 데이터를 500원으로 업데이트 했다. 아직 커밋은 하지 않았다. memberA 로우의 락은 세션1이 가지게 된다. lock 2 - 세션 2 SET LOCK_TIMEOUT 60000; set autocommit false; update member set money=1000 where..
1. 기본 데이터 입력 먼저 H2 데이터베이스 웹 콘솔 창을 2개 열어두자. 주의! H2 데이터베이스 웹 콘솔 창을 2개 열때 기존 URL을 복사하면 안된다. 꼭 http://localhost:8082 를 직접 입력해서 완전히 새로운 세션에서 연결하도록 하자. URL을 복사하면 같은 세션( jsessionId )에서 실행되어서 원하는 결과가 나오지 않을 수 있다 기본 데이터 데이터 초기화 SQL //데이터 초기화 set autocommit true; delete from member; insert into member(member_id, money) values ('oldId',10000); 2. 신규 데이터 추가 - commit 전 세션1에서 신규 데이터를 추가해보자. 아직 커밋은 하지 않을 것이다. ..
Schema 준비 drop table member if exists; create table member ( member_id varchar(10), money integer not null default 0, primary key (member_id) ); 1. 자동 커밋 자동 커밋으로 설정하면 각각의 쿼리 실행 직후에 자동으로 커밋을 호출한다. 따라서 커밋이나 롤백을 직접 호출하지 않아도 되는 편리함이 있다. 하지만 쿼리를 하나하나 실행할 때 마다 자동으로 커밋이 되어버리기 때문에 우리가 원하는 트랜잭션 기능을 제대로 사용할 수 없다. set autocommit true; //자동 커밋 모드 설정 insert into member(member_id, money) values ('data1',10000..
트랜잭션 사용법(구체적인 실제 구현은 DB마다 다름.) 데이터 변경 쿼리를 실행하고 데이터베이스에 그 결과를 반영하려면 커밋 명령어인 commit 을 호출하고, 결과를 반영하고 싶지 않으면 롤백 명령어인 rollback 을 호출하면 된다. 커밋을 호출하기 전까지는 임시로 데이터를 저장하는 것이다. 따라서 해당 트랜잭션을 시작한 세션(사용자) 에게만 변경 데이터가 보이고 다른 세션(사용자)에게는 변경 데이터가 보이지 않는다. 등록, 수정, 삭제 모두 같은 원리로 동작한다. 앞으로는 등록, 수정, 삭제를 간단히 변경이라는 단어로 표현 1. 기본 데이터 세션1, 세션2 둘다 가운데 있는 기본 테이블을 조회하면 해당 데이터가 그대로 조회된다. 2. 세션1에서 데이터 추가 세션1은 트랜잭션을 시작하고 신규 회원1..
0. MySQL설치 MySQL 설치 1. 접속 : www.mysql.com/ 2. downloads 클릭 3. 하단 GPL(General Public License) download 클릭 3. installer For Windows선택 4. 용량 큰놈 선택 5. 로그인 제껴버리기 6. 다운로드 시작됨. 7. 설치시작.. bsh-developer.tistory.com 1. MySQL설치 후 Data Source에서 MySQL추가해주자. - Advanced에서 serverTimezone 속성을 추가하자. Name : serverTimezone Value : Asia/Seoul - test Connection클릭! id/ pw을 입력해준다. - 연결 성공! - ok를 누르면 console창 확인이 가능하다. ..
0. Hibernate JPA의 구현체로 jpa를 한번 감싸서 사용하기 쉽게 해줌 JPA 소개 1. ORM(Object Relational Mapping) 객체와 관계형 Database를 자동으로 mapping시켜주는 것을 말한다. 객체지향 프로그래밍의 기본 단위는 object 이고 관계형 Datebase의 기본단위는 table이다. 따라서 객.. bsh-developer.tistory.com 1. DDL이란? 데이터 정의어(Data Definition Language)를 의미함. DataBase의 Table 생성/수정/삭제를 담당하는 명령어 2. ddl-auto 란? * ddl-auto : 5가지 옵션 제공 create 항상 새로 생성, persistance context 시작 전 drop --> cr..