스프링3 리팩터링(3) - 하다보니 보이는 것들 지난 글에 이어 리팩터링을 하다보니 보이는 것들에 대해 작성해보겠습니다. 리팩터링은 단순히 코드의 개선을 의미하지 않습니다. 코드가 개선되는 만큼 리팩터링한 개발자의 성장, 팀원의 성장으로 이어집니다. 제가 리팩터링하면서 볼 수 있었던 모든 성장, 개선에 대해 설명해보겠습니다. 리팩터링한 개발자의 성장 앞선 글들을 보았다면 리팩터링을 하기 위해 많은 과정을 거치는 것을 알 수 있을텐데요. 그 과정을 거치다보면 자연스럽게 타인이 작성한 코드를 이해하는 능력이 길러집니다. 물론 매 PR마다 코드리뷰를 진행하지만 코드 리뷰를 하는 것과 직접 팀원이 개발한 코드를 사용하는 것은 정말 다른 일입니다. 위 PR의 64개의 comment 중 절반 이상을 제가 달았음에도 막상 직접 사용하려 할 때는 이 코드를 작성한 .. 2022. 9. 25. [Spring] Transaction 추상화, 동기화 스프링은 트랜잭션을 시작(가져오기)하고, 커밋하고, 롤백하는 기능을 추상화하였습니다. 추상화 덕분에 우리는 스프링 트랜잭션을 쉽게 관리할 수 있는데요. 오늘은 스프링 트랜잭션 추상화에 대해 간단히 알아보겠습니다. public interface PlatformTransactionManager extends TransactionManager { TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; void commit(TransactionStatus status) throws TransactionException; void rollback(TransactionStatus status) thr.. 2022. 4. 27. [Spring] Spring Boot에서 트랜잭션 사용하기 일반적으로 하나의 비즈니스는 한 트랜잭션 내부에서 다룹니다. 비즈니스로직이 실행되는 도중 어떠한 이유로 메서드 실행이 중단된다면 지금껏 처리한 모든 쿼리가 롤백되어야 합니다. 체스 미션을 예시로 간단히 설명해보겠습니다. a2 포지션의 폰을 a4 포지션으로 옮기려면 a2 포지션은 blank로 a4 포지션은 폰으로 변경해야 합니다. 만약 위 비즈니스 로직이 다른 트랜잭션에서 작동하다 a2 포지션을 blank로 바꾼 후 에러가 발생하면 어떻게 될까요? 그렇다면 a2, a4 모두 blank를 갖게되고 폰은 어디론가 증발하게 될 것입니다. 이러한 문제를 해결하기 위해 주로 비즈니스 로직이 존재하는 Service 레이어에서 트랜잭션을 관리하게 됩니다. 트랜잭션을 완벽하게 이해하기 위해서는 dataSource가 co.. 2022. 4. 20. 이전 1 다음