728x90
반응형
SMALL

Spring + DB 6

Index란? (DB)

데이터베이스에서 빼놓을 수 없는 개념인 Index. 이 내용을 정리해보고자 한다. 우선 다음과 같이 데이터베이스에 데이터가 저장되어 있다고 가정해보자. 그리고 질문은 다음과 같다.Q: age = 20인 행을 찾으려면? 간단한 쿼리를 통해 가져올 수 있다.SELECT * FROM XXX WHERE age = 20; 이 쿼리를 날리면 컴퓨터는 age가 20인 행을 찾기위해 모든 행을 하나씩 다 뒤지게 된다. 뭐 지금처럼 레코드가 5개만 있으면 1초도 안 걸린다. 근데 1억개가 넘게 있으면 또는 그 이상 있으면 있을수록 느리게 동작할 것이다. 그러다가 어떤 특이점에 도달하게 되면 데이터베이스는 굉장히 무시무시한 일이 일어날 수 있다. 그렇기 때문에 이러한 특이점이 일어나기 전 컴퓨터에게 도움을 줄 수 있는데 ..

Spring + DB 2024.04.05

선언적 트랜잭션(@Transactional) 내부 호출 주의

스프링과 데이터베이스를 사용할 때 @Transactional 애노테이션을 사용해서 트랜잭션을 시작하고 종료하는데, 이 @Transactional 애노테이션을 사용하는 것을 '선언적 트랜잭션'이라고 한다. 근데 이 선언적 트랜잭션을 사용할 때 주의할 점이 있다. 그리고 이 주의사항은 너무너무너무 중요하다! 트랜잭션 프록시 객체우선 @Transactional이 달려있는 클래스 또는 메소드를 스프링이 실행할 때 쭉 돌면서 찾는다. 찾으면 클래스 단위로 빈을 등록하는데 이 때, 등록되는 것은 실제 해당 객체가 아닌 '프록시'이다. 아래 그림을 보자. 위 그림처럼 실제 Service에 @Transactional 애노테이션이 클래스 단위로 붙든, 특정 메소드에 붙든 있기만 하면 해당 클래스를 프록시로 만든다. 그..

Spring + DB 2023.12.07

MyBatis

이번에는 MyBatis라는 기술을 이용해서 Spring에서 Database와 통신하는 법을 알아보자. 이 역시 나는 사용하지 않을것 같다. 왜냐하면 이 MyBatis를 사용하기엔 Querydsl과 Spring Data JPA가 너무 강력하기 때문이다. 그래도 공부를 한 이유는 왜 이 MyBatis가 게임체인저가 되지 못하고 JPA, Querydsl이 나왔을까?에 초점을 두었다. 이전 포스팅인 JdbcTemplate은 다 좋은데 동적 쿼리를 만들어내기가 쉽지만은 않았다. https://cwchoiit.tistory.com/71 JdbcTemplate Spring과 데이터베이스를 연동할 때 사용되는 기술 중 빠지지 않고 잘 사용되는 기술인 JdbcTemplate을 사용하는 법을 정리하고자 한다. 우선, Jd..

Spring + DB 2023.12.06

JdbcTemplate

Spring과 데이터베이스를 연동할 때 사용되는 기술 중 빠지지 않고 잘 사용되는 기술인 JdbcTemplate을 사용하는 법을 정리하고자 한다. 우선, JdbcTemplate은 기존 JDBC 기술을 직접 사용할 때 겪는 문제들을 해결해 준다. 예를 들면 트랜잭션을 시작하고 종료하는 코드 작성이나 반복적인 커넥션 후처리와 같은 것들. 나는 개인적으로는 JdbcTemplate을 사용하지 않고 Spring Data JPA와 Querydsl을 같이 사용하는 방식을 선호한다. 그러나, 이 JdbcTemplate은 알아둘 만한 가치가 있다고 생각해서 기록하고자 한다. 라이브러리 다운로드 우선, JdbcTemplate 라이브러리를 받아야 한다. build.gradle //JdbcTemplate implementa..

Spring + DB 2023.12.06

Transaction, Auto Commit, Rollback, Lock

DB를 사용할 땐 반드시 이해하고 있어야 하는 키워드인 '트랜잭션'은 이것 저것 다양한 내용이 참 많은듯하다. 우선 트랜잭션이란 DB에 어떤 작업을 하기 위해선 이 트랜잭션이 살아있는 주기동안에 일어나야한다. 즉, SELECT, UPDATE, INSERT 등 모든 DB에 대한 행위는 트랜잭션이 필요하고 이 트랜잭션이라는 단위가 시작되는 순간부터 종료되는 시점 사이에 대한 내용을 적어보자한다.  Auto Commit오토 커밋은 트랜잭션이 종료될 때 자동으로 커밋을 수행하는 것을 말한다. 커밋은 DB에 어떤 행위를 수행한 후 그 행위를 DB에 적용하는 것을 말하는데 이 커밋을 수행하지 않으면 변경사항이 DB에 적용되지 않는다. 그리고 그 변경사항에 대한 적용을 자동으로 해주는 것이 오토 커밋이다.  참고로 ..

Spring + DB 2023.11.30

[Spring/Spring Data JPA] @Transactional

Spring과 Database를 같이 사용할 때 무조건 사용하게 되는 애노테이션 @Transactional. 물론 반드시 사용해야만 하는 건 아니지만 다른 방법을 쓸 필요가 없이 너무나 편리하게 트랜잭션을 시작하고 끝낼 수 있기에 안 사용할 이유가 없다.  이렇게 애노테이션 하나로 트랜잭션을 시작하는 것을 '선언적 트랜잭션'이라고 한다.  이 애노테이션은 클래스, 메소드 단위로 붙일 수 있고 더 나아가 인터페이스에도 붙일 수 있다. 그러나 인터페이스에 붙이는 건 공식 매뉴얼에서도 권장하지 않는 방식이고 클래스 또는 메소드 단위로 사용하자. 우선 데이터베이스에 어떤 작업을 하려면 반드시 트랜잭션이 필요하다. 트랜잭션은 일반적으로 다 아는 어지간한 데이터베이스에서 기본값으로 모든 행위에 대해 트랜잭션이 열린..

Spring + DB 2023.11.12
728x90
반응형
LIST