분류 전체보기
맥북 시계 동기화 오류 해결 명령어
sudo sntp -sS time.apple.com 설정 > 일반 > 날짜 및 시간 에서 자동으로 시간설정 동기화 해도 동기화 되지 않는 경우 터미널에서 해당 명령어를 입력하고 맥 비번을 입력하면 동기화된다.
트랜잭션 분리 시 주의점
전 포스팅에서 나온 @Transactional(propagation = REQUIRES_NEW) 를 사용해서 트랜잭션을 분리한다고 했을 때, 기존 트랜잭션이 걸린 메소드와 같은 클래스안에다 메소드를 작성한다면..? 저 옵션이 무의미해진다. 스프링의 경우 트랜잭션을 적용할 때, 프록시 객체에서 트랜잭션을 관리하는 형태인데 같은 클래스 내의 메소드를 호출하는 경우 프록시를 못타기 때문에 새 트랜잭션을 사용하지 못하게 된다. 따라서, 다른 스프링 컴포넌트 클래스를 생성하여 프록시를 탈 수 있도록 따로 트랜잭션을 수행할 메소드를 호출해야한다.
트랜잭션 범위, 트랜잭션 분리하기
최근에 겪었던 이슈를 해결하면서 배운점을 적어봅니다 트랜잭션의 범위를 적당하게 잡아야하는 이유는 뭘까? 만약 시간이 오래걸리는 외부API호출이나 I/O작업을 트랜잭션 범위 내에서 수행하게 된다면 어떻게 될까? DB에 롱 트랜잭션이 발생하게 되어 아웃풋이 예상치 못한 동작이 발생할 수 있다. 예시를 들면 다음같은 로직의 메소드는 한 트랜잭션이 매우 길어질 수 있다. // 시작 1. findBy~ 2. deleteBy~ 3. 1번 결과물에 대해 시간이 많이 걸리는 로직 수행 // 종료 그렇다면 이를 해결 할 수 있는 방법은? 진입점 나누기 해당 로직을 굳이 한 진입점에서 수행할 필요가 없다면 두개 이상의 API, 진입점으로 나누어 진행하면 된다. 다른 트랜잭션에서 수행하게 하기 진입점이 반드시 한곳이어야 하..
![[Spring boot] JPA dirty checking 시행 시점](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk9UdY%2FbtrEZb8G8rE%2FJMI8q0hKeYKSMMnGUSa3K0%2Fimg.png)
[Spring boot] JPA dirty checking 시행 시점
직접 @Transactional 어노테이션이 달린 메소드를 실행해보며 언제 db에 저장되는지 확인해보자 PostApiController.java @PostMapping("api/v1/post/{id}") public PostResponseDto update(@PathVariable Long id, @RequestBody PostUpdateRequestDto requestDto){ System.out.println("transaction 시작"); PostResponseDto dto= postService.update(id, requestDto); System.out.println("transaction 종료"); return dto; } PostService.java @Transactional publi..