
애플리케이션을 개발할 때 중요한 데이터는 대부분 데이터베이스에 보관한다. 커넥션 연결: 주로 TCP/IP를 사용해서 커넥션을 연결한다.SQL 전달: 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다.결과 응답: DB는 전달된 SQ

데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거친다.1\. 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다.2\. DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. (3 way handshake)3\. DB 드라이버는 TCP/IP 커넥션

트랜잭션 추상화는 왜 필요할까? 이걸 이해하기 위해선 왜 등장 했는지 알아야 한다.데이터베이스 구현 기술에 따른 트랜잭션 사용 방법은 다 다르다..JDBC는 con.setAutoCommit(false)로 트랜잭션을 시작해야 하고JPA는 transaction.begin(

트랜잭션을 유지하려면 트랜잭션의 시작부터 끝까지 같은 데이터베이스 커넥션을 유지해아한다. 결국 같은 커넥션을 동기화하기 위해서 이전에는 파라미터로 커넥션을 전달하는 방법을 사용했다. 메소드로 connection을 파라미터로 넘겨서 연결해주기...파라미터로 커넥션을 전달

프록시를 도입하기 전에는 기존처럼 서비스의 로직에서 트랜잭션을 직접 시작한다.프록시를 사용하면 트랜잭션을 처리하는 객체와 비즈니스 로직을 처리하는 서비스 객체를 명확하게 분리할 수 있다.프록시 도입 전에는 서비스에 비즈니스 로직과 트랜잭션 처리 로직이 함께 섞여있다.하
JdbcTemplate은 JDBC를 매우 편리하게 사용할 수 있게 도와주기 때문에 SQL을 직접 사용하는 경우에 스프링이 제공하는 JdbcTemplate은 아주 좋은 선택지다.설정의 편리함JdbcTemplate은 spring-jdbc 라이브러리에 포함되어 있는데, 이

대부분의 시스템에서는 회원을 관리하고 있고, 그에 따른 인증(Authentication)과 인가(Authorization)에 대한 처리를 해야 한다.인증(Authentication) : 해당 사용자가 본인이 맞는지 확인하는 과정인가(Authorization) : 해당
JPA에 관련된 요소들만 테스트하기 위한 어노테이션으로 JPA 테스트에 관련된 설정들만 적용해준다.메모리상에 내부 데이터베이스를 생성하고 @Entity 클래스들을 등록하고 JPA Repository 설정들을 해준다. 각 테스트마다 테스트가 완료되면 관련한 설정들은 롤백

클라이언트가 @Transactional(클래스나 메소드에 하나라도 붙어 있어야함)이 붙어있는 클래스를 의존관계 주입을 받으면 basicService$$EnhancerBySpringCGLIB...과 같은 프록시 클래스가 대신 의존관계주입이 된다.프록시 클래스가 주입될 수

트랜잭션이 이미 진행중인데, 여기에 추가로 트랜잭션을 수행하면 어떻게 될까?기존 트랜잭션과 별도의 트랜잭션을 진행해야 할까? 아니면 기존 트랜잭션을 그대로 이어 받아서 트랜잭션을 수행해야 할까?이런 경우 어떻게 동작할지 결정하는 것을 트랜잭션 전파(propagation
ThreadLocal은 Thread에 대한 로컬 변수를 제공한다.따라서 각각의 Thread가 변수에 대해서 독립적으로 접근할 수 있다.ThreadLocal은 한 Thread에서 실행되는 코드가 동일한 객체를 사용할 수 있도록 지원해주기 때문에 Thread와 관련된 코드

Controllersms ModelAndView와 View Resolver를 이용해 View를 반환하고 렌더링한다.RestController는 Controller에 ResponseBody가 추가된 어노테이션이다.RestController가 동작 방식이 더 간결하기 때문
스프링에서 비동기 프로그래밍을 구현하는 방식 중 하나다.@Async 어노테이션이 붙은 메서드가 별도의 스레드에서 실행되므로 메인 스레드에서 캐치를 할 수 없다. 예외를 처리하기 위해서는 AsyncUncaughtExceptionHandler를 사용하여 예외를 적절히 처리