본문 바로가기

개발/Spring Boot

(3)
MapStruct의 이해 배경이전 프로젝트는 Spring Cloud를 활용한 MSA 환경 구축해보기였습니다. 다들 처음이라 비동기 방식인 kafka를 사용하지 않고 feign client를 이용해 동기형식으로만 구성했죠. 정말 상당히 불편한 부분이었습니다. 예를 들어서 주문의 경우 다른 서비스들을 매우 많이 호출해야 했었는데, 동기형식으로 진행하지 반응 속도도 그렇고 한번 에러가 발생하면 어디서부터 보상 트랜잭션을 수행해줘야 할지.. 오히려 더 복잡한 느낌이었습니다. 그러다 다른 팀의 발표를 듣던 중 kafka를 이용한 팀이 있었는데, 이때 튜터님께서는 MapStruct를 이용하면 dto간 매핑이 간편해진다고 했던 기억이 있습니다. 이번 프로젝트는 kafka를 이용할 것이기 때문에 이 MapStruct에 대해 간단히 알아보려고 ..
트랜잭션 전파 배경지난 글에서 트랜잭션에 대해 조금 알아보는 시간을 가졌습니다. 그때 spring의 트랜잭션은 @Transactional을 통해 간단히 연결하고 종료가 가능하다고 했는데요, 하지만 간단한 만큼 언제 써야되고 어디까지 영향을 미치는지 알아야 나중에 문제가 생기지 않겠죠? 오늘은 이 트랜잭션이 어디까지 전파되는지 알아보도록 합시다. 내용spring에서 트랜잭션 전파는 속성에 뭘 주느냐에 따라 달라지게 됩니다. 이렇게 default 타입으로 REQUIRED 타입이 존재합니다. 다른 전파 타입은 어떤 것이 있을까요?이렇게 다양한 타입들이 존재하지만 오늘은 required와 requires_new에 대해 알아봅시다. 기존의 트랜잭션이 진행중일 때 새로운 트랜잭션이 시작되면 외부 트랜잭션과 내부 트랜잭션으로 구분..
스프링 @Transactional 배경이전 글에서는 트랜잭션 격리 수준에 대해 이야기를 했었는데 이 번 글은  스프링의 @Transactional에 대해 알아보려고 합니다. 왜 쓰고 어떻게 동작하는 것일까요? 내용[ Transaction ]우리는 DB 데이터를 수정하고 조회하는 일을 빈번하게 하고 있습니다. 도중에 예외가 발생하게 되면 이전이 상태로 되돌아가야 하는데 이렇게 작업을 진행하다가 문제가 생겼을 경우 이전 상태로 롤백하기 위해 사용되는 것이 트랜잭션입니다. 또한 트랜잭션은 더이상 쪼갤 수 없는 최소 작업단위를 의미합니다. 보통 commit과 rollback으로 관리가 되어지죠. 이런 트랜잭션을 쓰는 가장 큰 이유 중 하나는 돈과 관련된 문제가 크기 때문입니다. 예를들어서 요즘 간편하게 app을 통해서 돈을 주고받는데 트랜잭션이..