분류 전체보기 1341

Ch03. 트랜잭션 이해 - DB 락(변경, 조회)

기본 데이터 set autocommit true; delete from member; insert into member(member_id, money) values ('memberA',10000); 변경과 락 set autocommit false; update member set money=500 where member_id = 'memberA'; 세션 1이 트랜잭션을 시작하고, memberA의 데이터를 500원으로 업데이트했다. 아직 커밋은 하지 않았다. memberA 로우의 락은 세션 1이 가지게 된다. SET LOCK_TIMEOUT 60000; set autocommit false; update member set money=1000 where member_id = 'memberA'; 세션 2는 m..

Ch03. 트랜잭션 이해 - DB 락(개념 이해)

세션1이 트랜잭션을 시작하고 데이터를 수정하는 동안 아직 커밋을 수행하지 않았는데, 세션2에서 동시에 같은 데이터를 수정하게 되면 여러가지 문제가 발생한다. 바로 트랜잭션의 원자성이 깨지는 것이다. 여기에 더해서 세션1이 중간에 롤백을 하게 되면 세션2는 잘못된 데이터를 수정하는 문제가 발생한다. 이런 문제를 방지하려면, 세션이 트랜잭션을 시작하고 데이터를 수정하는 동안에는 커밋이나 롤백 전까지 다른 세션에서 해당 데이터를 수정할 수 없게 막아야 한다 세션1은 memberA 의 금액을 500원으로 변경하고 싶고, 세션2는 같은 memberA 의 금액을 1000원으로 변경하고 싶다. 데이터베이스는 이런 문제를 해결하기 위해 락(Lock)이라는 개념을 제공한다. 세션1은 트랜잭션을 시작한다. 세션1은 mem..

Ch03. 트랜잭션 이해 - 트랜잭션(DB 트랜잭션 실습)

H2 데이터 베이스 웹 콘솔 창을 2개 열어두자 H2 데이터베이스 웹 콘솔 창을 2개 열 때 기존 URL을 복사하면 안 된다. 꼭 http://localhost:8082를 직접 입력해서 완전히 새로운 세션에서 연결하도록 하자. URL을 복사하면 같은 세션( jsessionId )에서 실행되어서 원하는 결과가 나오지 않을 수 있다 초기 상태 //데이터 초기화 set autocommit true; delete from member; insert into member(member_id, money) values ('oldId',10000); 자동 커밋 모드로 별도의 Commit 호출이 필요 없다. 신규 데이터 추가 - Commit 이전 //트랜잭션 시작 set autocommit false; //수동 커밋 모..

Ch03. 트랜잭션 이해 - 트랜잭션(DB 예제 & 자동 커밋, 수동 커밋)

트랜잭션 사용법 데이터 변경 쿼리를 실행하고 데이터베이스에 그 결과를 반영하려면 커밋 명령어인 commit을 호출하고, 결과를 반영하고 싶지 않으면 롤백 명령어인 rollback을 호출하면 된다 커밋을 호출하기 전까지는 임시로 데이터를 저장하는 것이다. 따라서 해당 트랜잭션을 시작한 세션(사용자) 에게만 변경 데이터가 보이고 다른 세션(사용자)에게는 변경 데이터가 보이지 않는다 신규 데이터 추가 세션 1은 트랜잭션을 시작하고 신규 회원 1, 신규 회원 2를 DB에 추가했다. 아직 커밋은 하지 않은 상태이다. 새로운 데이터는 임시 상태로 저장된다. 세션 1은 select 쿼리를 실행해서 본인이 입력한 신규 회원 1, 신규 회원 2를 조회할 수 있다. 세션 2는 select 쿼리를 실행해도 신규 회원들을 조..

Ch03. 트랜잭션 이해 - 트랜잭션(개념 이해)

데이터를 저장할 때 단순히 파일에 저장해도 되는데, 데이터베이스에 저장하는 이유는 무엇일까? 여러 가지 이유가 있지만, 가장 대표적인 이유는 바로 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문이다 트랜잭션을 이름 그대로 번역하면 거래라는 뜻이다. 이것을 쉽게 풀어서 이야기하면, 데이터베이스에서 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻한다. 그런데 하나의 거래를 안전하게 처리하려면 생각보다 고려해야 할 점이 많다. 예를 들어서 A의 5000원을 B에게 계좌 이체한다고 생각해보자. A의 잔고를 5000원 감소하고, B의 잔고를 5000원 증가해야 한다. 모든 작업이 성공해서 데이터베이스에 정상 반영하는 것을 커밋( Commit )이라 하고, 작업 중 하나라도 실패해서 거래 이전으로..

Ch02. 커넥션풀과 데이터소스 이해 - DataSource 적용

MemberRepositoryV1 /** * JDBC - DataSource 사용, JdbcUtils 사용 */ @Slf4j public class MemberRepositoryV1 { private final DataSource dataSource; public MemberRepositoryV1(DataSource dataSource) { this.dataSource = dataSource; } public Member save(Member member) throws SQLException { String sql = "insert into member(member_id, money) values (?, ?)"; Connection con = null; PreparedStatement pstmt = nu..

Ch02. 커넥션풀과 데이터소스 이해 - DataSource 예제

DriverManager @Test public void driverManager() throws SQLException { Connection con1 = DriverManager.getConnection(URL, USERNAME, PASSWORD); Connection con2 = DriverManager.getConnection(URL, USERNAME, PASSWORD); log.info("connection={}, class={}", con1, con1.getClass()); log.info("connection={}, class={}", con2, con2.getClass()); } @Test public void dataSourceDriverManager() throws SQLExceptio..

Ch02. 커넥션풀과 데이터소스 이해 - DataSource 이해

커넥션을 얻는 방법은 앞서 학습한 JDBC DriverManager를 직접 사용하거나, 커넥션 풀을 사용하는 등 다양한 방법이 존재한다 만약 앞서 JDBC로 개발한 애플리케이션 처럼 DriverManager를 통해서 커넥션을 획득하다가, 커넥션 풀을 사용하는 방법으로 변경하려면 어떻게 해야 할까? 예를 들어서 애플리케이션 로직에서 DriverManager를 사용해서 커넥션을 획득하다가 HikariCP 같은 커넥션 풀을 사용하도록 변경하면 커넥션을 획득하는 애플리케이션 코드도 함께 변경해야 한다. 의존관계가 DriverManager에서 HikariCP로 변경되기 때문이다. 물론 둘의 사용법도 조금씩 다를 것이다 커넥션을 획득하는 방법을 추상화(DataSource) 자바에서는 이런 문제를 해결하기 위해 ja..

Ch02. 커넥션풀과 데이터소스 이해 - 커넥션 풀 이해

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

Ch01. 프로젝트 환경설정 - View 환경 설정

thymeleaf 공식 사이트: https://www.thymeleaf.org/ Thymeleaf Integrations galore Eclipse, IntelliJ IDEA, Spring, Play, even the up-and-coming Model-View-Controller API for Java EE 8. Write Thymeleaf in your favourite tools, using your favourite web-development framework. Check out our Ecosystem to see more integrati www.thymeleaf.org 작성하지 않아도 볼 수 있다는 장점이 있다. 스프링 공식 튜토리얼: https://spring.io/guides/gs/se..