해당 코드를 한 번 봐보자. @Test void double_commit() { log.info("트랜잭션1 시작"); TransactionStatus tx1 = txManager.getTransaction(new DefaultTransactionAttribute()); log.info("트랜잭션1 커밋"); txManager.commit(tx1); log.info("트랜잭션2 시작"); TransactionStatus tx2 = txManager.getTransaction(new DefaultTransactionAttribute()); log.info("트랜잭션2 커밋"); txManager.commit(tx2); } 우선 트랜잭션 1과 트랜잭션 2는 분명히 다른 트랜잭션이다. 트랜잭션이 각각 수행되면..
이번 포스팅에서는, 스프링 트랜잭션이 제공하는 다양한 기능들에 대해 정리해보자. (이전 DB 1편 포스팅을 참고하자) 트랜잭션 적용 확인 트랜잭션이 적용되고 있는지 테스트코드로 한번 확인해보자. @Slf4j @SpringBootTest public class TxBasicTest { @Autowired BasicService basicService; @TestConfiguration static class TxApplyBasicConfig { @Bean BasicService basicService() { return new BasicService(); } } @Test void proxyCheck() { log.info("aop class = {}", basicService.getClass()); as..
1편에 이어, 다시 한 번 코드를 봐보자. TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); try { bizLogic(fromId, toId, money); transactionManager.commit(status); } catch (Exception e) { transactionManager.rollback(status); throw new IllegalStateException(e); } 다른 서비스에서 트랜잭션을 시작하려면, 지금 코드처럼 트랜잭션을 시작하고, 성공하면 커밋하고 실패하면 롤백하는 코드를 추가로 작성해줘야 한다. 난 단순히 서비스 로직에만 집중하고 싶은데....
이제 배운 것들을 토대로 간단한 게시판을 만들어보자. 상품을 관리할 수 있는 서비스를 만들어본다 가정하자. 상품에는 id, 이름, 가격, 수량이라는 속성이 존재한다. 이 상품의 목록, 상세, 등록, 수정할 수 있는 기능을 구현하려 한다. @Data public class Item{ private Long id; private String itemName; private Integer price; private Integer quantity; public Item(){ } public Item(String itemName, Integer price, Integer quantity){ this.itemName = itemName; this.price = price; this.quantity = quantit..
출처:https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 강의를 수강한 후, 전반적인 흐름 및 나중에 복기할 수 있게 정리해보려한다..(과외 학생 설명하듯이 진행해보겠다) "승수씨.. 정말 미안한데 부탁이 있어요. 우리가 급히 기능을 만들어야해요. 회원 / 주문&할인정책 을 급하게 만들어야하는데....
*우선 로그에 대해 간단히 알아보자 우리는 평소에 System.out.println()같은 시스템 콘솔로 결과를 확인했다. 운영 시스템에서는 이러한 시스템 콘솔을 사용해서 출력하지 않고, 로그 라이브러리를 활용한다. 스프링 부트에서는 기본적으로 Logback,Log4J,Log4J2 등 수많은 라이브러리가 있는데 이를 통합해서 인터페이스로 제공하는 SLF4J 라이브러리를 기본으로 쓴다. 즉, SLF4J는 인터페이스이고, 구현체로 Logback 같은 라이브러리를 사용한다. private Logger log = LoggerFactory.getLogger(getClass()); private static final Logger log = LoggerFactory.getLogger(XXX.class) @Slf4j..
우리가 4) 파트에서 MVC를 실제로 구현한 것과 실제 스프링MVC의 구조를 비교해보자. 사실 지금까지 우리가 한 과정들은 스프링MVC의 구조를 이해하기 위해 한 행동들이다. 동일하다. 그러면 이름을 이제 스프링MVC에 맞게 수정해보자. FrontController -> DispatcherServlet handlerMappingMap -> HandlerMapping MyHandlerAddapter -> HandlerAdapter ModelView -> ModelAndView viewResolver -> ViewResolver MyView -> View 스프링 MVC도 FrontController 패턴으로 구현되어 있다. 해당 FrontController가 바로 DispatcherServlet이다. 그리고..