묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
H2의 트랜잭션 수행 시간 타임아웃
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]데이터베이스엔 트랜잭션 수행 시간 타임아웃이 보통 설정되어 있고, 설정한 시간을 넘어가게 되면 자동으로 rollback이 된다고 강의에서 말씀하셨는데 H2 DB의 경우 디폴트 시간이 얼만큼인가요? H2 콘솔에서 set autocommit false;insert into member(member_id, money) values ('data3',10000);insert into member(member_id, money) values ('data4',10000); 이렇게 실행하고 커밋은 안 한 다음,주기적으로 SELECT * FROM MEMBER를 해 봤는데 data3, data4에 대한 데이터가 계속 보입니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2 연결 후 localhost 거부
h2 연결 후 localhost:8080연결 시 계속 서버 거부가 다음과 같이 뜹니다. 그래서 h2 재연결 후 상태를 확인해봤는데 다음과 같이 떴습니다. h2 설치 과정은 다음과 같습니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@ExceptionHandler을 사용할 경우, 트랜잭션 롤백 질문
@Slf4j @Controller public class ExampleExceptionControllerAdvice { //사용자가 Argument를 잘못 보낸 경우 @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(IllegalArgumentException.class) public ErrorResult illegalExHandle(IllegalArgumentException e){ log.error("[exceptionHandle] ex",e); if(1==1) { //throw new RuntimeException("예외 발생"); } return new ErrorResult("BAD", e.getMessage()); } @ResponseBody @GetMapping("/api/members") public String members(){ if(1==1){ throw new IllegalArgumentException("예외"); } return "Hello"; } } members 메서드에서 오류를 강제로 발생시킨 후,illegalExHandle 메서드에서 오류를 catch한 뒤 응답을 하는 것으로 강의 내용을 이해하였습니다. 이럴 경우, 트랜잭션 롤백이 발생하기 위해서는 어떻게 해야 하는 지 알고 싶습니다. [첨부 - 챗 GPT 답변]예시 코드@Service public class MyService { @Transactional public void doSomething() { // Some business logic throw new RuntimeException("Something went wrong"); } } @Controller public class MyController { @Autowired private MyService myService; @PostMapping("/example") public String handleRequest() { myService.doSomething(); return "success"; } @ExceptionHandler(RuntimeException.class) public String handleRuntimeException(RuntimeException ex) { // Exception handling logic // If we return without re-throwing the exception return "error"; } }위의 예제에서 doSomething() 메서드에서 발생한 RuntimeException이 handleRuntimeException 메서드에서 처리되면, 예외가 다시 던져지지 않으므로 트랜잭션은 롤백되지 않습니다.결론@Transactional이 서비스 계층에 있고, @ExceptionHandler가 컨트롤러 계층에 있을 때, 예외를 @ExceptionHandler에서 잡아 처리한 후 다시 던지지 않으면 트랜잭션은 롤백되지 않습니다. 만약 트랜잭션이 롤백되길 원한다면, @ExceptionHandler에서 예외를 다시 던져야 합니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
/add에 dto사용 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]새로고침 시 상품이 중복 등록되는 문제는 POST가 멱등하기 때문인 것이 맞나요?/add에서 @ModelAttribute로 Item 객체를 바로 만들어서 save했는데, 이 경우 Dto를 거쳐서 저장하는 것이 올바른 방법인가요? @Data public class ItemDto { private String itemName; private Integer price; private Integer quantity; }@PostMapping("/add") public String addItemTest(@ModelAttribute ItemDto itemDto) { Item item = new Item(itemDto.getItemName(), itemDto.getPrice(), itemDto.getQuantity()); itemRepository.save(item); return "basic/item"; }dto를 사용하는 방식으로 변경해봤는데, id가 null이라는 예외가 발생했습니다.org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'id' cannot be found on null에러페이지가 나오지만 목록 페이지로 갔을 때 상품은 정상적으로 저장이 되고 있습니다.controller의 save부분에서 item의 id가 자동으로 생성되고 있는데, 왜 이런 문제가 발생하는지 궁금합니다. -- 수정 --@PostMapping("/add") public String addItemTest(@ModelAttribute ItemDto itemDto) { Item item = new Item(itemDto.getItemName(), itemDto.getPrice(), itemDto.getQuantity()); itemRepository.save(item); return "redirect:/basic/items/" + item.getId(); }redirect로 수정하니 3번 문제는 해결되었습니다. 하지만 이전 코드에서 왜 저런 예외가 떴는지는 아직 모르겠습니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
@Autowired를 쓰면 밑줄이 떠서 찾아보니 PrototypeBean과 ClientBean에 @Component를 붙여야 하는데 질문있습니다..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@Slf4j @SpringBootTest class MemberServiceV3_3Test { @Autowired private MemberRepositoryV3 memberRepository; @Autowired private MemberServiceV3_3 memberService; @BeforeEach void before() { DriverManagerDataSource dataSource = new DriverManagerDataSource(URL, USERNAME, PASSWORD); memberRepository = new MemberRepositoryV3(dataSource); PlatformTransactionManager transactionManager = new DataSourceTransactionManager(dataSource); memberService = new MemberServiceV3_3(memberRepository); } @AfterEach void after() throws SQLException { memberRepository.delete("memberA"); memberRepository.delete("memberB"); memberRepository.delete("ex"); } @Test @DisplayName("정상 이체") void accountTransfer() throws SQLException { //given Member memberA = new Member("memberA", 10000); Member memberB = new Member("memberB", 10000); memberRepository.save(memberA); memberRepository.save(memberB); //when memberService.accountTransfer(memberA.getMemberId(), memberB.getMemberId(), 2000); //then Member findMemberA = memberRepository.findById(memberA.getMemberId()); Member findMemberB = memberRepository.findById(memberB.getMemberId()); assertThat(findMemberA.getMoney()).isEqualTo(8000); assertThat(findMemberB.getMoney()).isEqualTo(12000); } @Test @DisplayName("이체중 예외 발생") void accountTransferEx() throws SQLException { //given Member memberA = new Member("memberA", 10000); Member memberEx = new Member("ex", 10000); memberRepository.save(memberA); memberRepository.save(memberEx); //when assertThatThrownBy(() -> memberService.accountTransfer(memberA.getMemberId(), memberEx.getMemberId(), 2000)) .isInstanceOf(IllegalStateException.class); //then Member findMemberA = memberRepository.findById(memberA.getMemberId()); Member findMemberEx = memberRepository.findById(memberEx.getMemberId()); //memberA의 돈이 롤백 되어야함 assertThat(findMemberA.getMoney()).isEqualTo(10000); assertThat(findMemberEx.getMoney()).isEqualTo(10000); } }다음과 같이 @Autowired를 쓰면 밑줄이 떠서 찾아보니 PrototypeBean과 ClientBean에 @Component를 붙이면 해결된다고 합니다. PrototypeBean과 ClientBean에 대해서는 아는게 없어서 GPT에 물어봤는데 PrototypeBean과 ClientBean을 정의하고 @Component와 @Scope를 붙히면되고, Spring 컨테이너 설정은 @ SpringbootAplication 이 붙은 클래스가 있는 경우를 전제하에 설명해줬습니다.마지막에 프로토타입빈을 주입받아서쓰면된다고 합니다. 막혔던 부분은 일반적으로 애플리케이션의 PrototypeBean과 ClientBean을 정의하는 코드는@SpringBootApplication 클래스가 위치한 패키지와 그 하위 패키지 내에 배치해야만 한다는데 따로 @ SpringbootAplication이 있는 클래스가 없는데 새로 만들어야되는지 모르겠어요ㅠ마찬가지로 spring컨테이너 설정도 @ SpringbootAplication을 전제하에 설명하는데 지금 코드에 관련 애노테이션은 @SpringBootTest만 있는데 전혀 감이 잡히질 않습니다ㅠ
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 빌드 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.gradlew build를 하면 계속 오류가 떠서 게시판 글들을 살펴보았는데요. V3 실시간 검사를 해제하면 된다는 이야기가 있길래 해보려고 했는데, 비밀번호가 걸려있어서 실시간 검사 해제가 안 됩니다..인터넷 검색을 해도 비밀번호를 찾는 방법은 안 나오네요. 이거 때문에 지금 이틀 동안 진도가 안 나가는데 어떻게 해야 할까요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
컨트롤러를 사용하지 않고 단순 html 버튼으로 상품 수정 취소 후 화면 랜더링
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]상품 수정 화면에서 수정 취소를 할 때, 컨트롤러를 사용하지 않고 단순 html 에서 버튼으로 경로를 지정해 주어서 상품 화면으로 이동합니다.이 때 상품 화면을 랜더링할 때 model에 담거나 할 필요가 없는 이유가이미 이전에 아래의 컨트롤러@GetMapping("/{itemId}") public String item(@PathVariable Long itemId, Model model) { Item item = itemRepository.findById(itemId); model.addAttribute("item", item); return "basic/item"; }를 통해서 해당 경로에 값이 다 담긴 상태가 저장되기 때문 이라고 생각하면 될까요?저장된다면 어디에 저장되는 걸까요
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
CSR 에 대한 질문입니다.
강의 9:34 쯤의 CSR 설명 부분에서 자바스크립트 링크가 어떤 정보를 내포하고 있는지 궁금합니다!2번 과정에서는 그 자바스크립트 링크를 바탕으로 요청을 해서 자바스크립트 및 클라이언트 로직, HTML 렌더링 코드를 서버로부터 받는 건가요..?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
강의 7:16 그림 나오는 부분에서 질문입니다!
WAS에서 request, response 객체를 만들어서 서블릿의 파라미터로 넘기는건 이해했는데 여기서 request 객체엔 요청 정보가 담겨있고 response 객체는 빈 객체인 상태인가요? 한 마디로 응답 메세지는 서블릿 컨테이너나 혹은 종료 후 다시 WAS 서버에 response 객체가 도달했을 때 정보가 들어간다고 보면 될까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
MessageSourceTest 실행시 오류 발생
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]MessageSourceTest 파일을 실행했을 때 오류가 발생합니다.Expecting: <"??">to be equal to: <"안녕">but was not.Expected :"안녕"Actual :"??"<Click to see difference>org.opentest4j.AssertionFailedError: Expecting: <"??">to be equal to: <"안녕">but was not.at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)at hello.itemservice.message.MessageSourceTest.helloMessage(MessageSourceTest.java:20)at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)2024-08-16 16:42:56.803 INFO 7205 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'MessageSourceTest > helloMessage() FAILED org.opentest4j.AssertionFailedError at MessageSourceTest.java:202 tests completed, 1 failed> Task :test FAILEDFAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':test'.> There were failing tests. See the report at: file:///Users/yujihun/Desktop/message-start/build/reports/tests/test/index.html* Try:Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.* Get more help at https://help.gradle.orgBUILD FAILED in 3s4 actionable tasks: 2 executed, 2 up-to-date도저히 원인을 모르겠어요
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
서블릿,서블릿 객체
@WebServlet(name = "helloServlet", urlPatterns = "/hello") public class HelloServlet extends HttpServlet {} HelloServlet 가 서블릿이고, 스프링부트 실행시 서블릿의 객체가 생성되는것 같은데name = "helloServlet" 가 의미하는것은 무엇인가요?? 서블릿 객체 이름을 의미하는건가요?아니면 그냥 서블릿 식별자 정도 인가요??
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
질문드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. public class ItemController여기에서@GetMapping("/items/new") public String newItem(@ModelAttribute ItemForm form) { return "item-form"; } 여기서 ItemForm을 @ModelAttribute로 받은거 오타아닌가요? GetMapping인데 어떻게 받아올수있죠? 그리고 메서드에서 itemForm을 쓰지도않는데
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
강의와 다르게 저만 에러가 떠요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 김영한 강사님 DB수업 1편 트랜잭션 이해 쪽의 적용 강의에서 자꾸 오류가 납니다.적용1은 에러뜨는게 너무 답답해서 적당히 이해하고 트랜잭션 적용된 코드인 적용2 강의를 듣고있었는데 계속 오류가 뜨네요.이 코드뿐만 아니라 김영한 강사님의 대부분의 수업에서 강사님은 오류가 안뜨는데 인텔리제이나 스프링의 업데이트 이후 달라진건지 모르겠지만 오류 안날코드에서도 오류가 납니다.일단 트랜잭션이 적용된 다음 코드에 있는 오류가 강의와는 다르게 왜 오류가 나는지 알려주시면 감사하겠습니다. https://drive.google.com/file/d/1jHHZ-dTRFJT8jga31k1VWrsB8cLG8OqH/view?usp=drive_link
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
localhost:8080/hello창 whitelabel error 발생
여기까지가 코드 입력 캡쳐본입니다. localhost:8080창은 잘 뜨는데localhost:8080/hello 창은 위와 같은 오류가 발생합니다.좀 수월하게 하려고 인텔리제이 유료결제했더니빨간 네모 표시한 아이콘이 떠서 클릭했더니전혀 다른 주소로 위와 같은 창이 생성되었고,F12 눌렀더니 아래와 같이 표시됩니다.뭐가 문제였던 걸까요ㅠㅠㅠ
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
섹션 2 HelloServlet 진행 도중 화이트 라벨 에러페이지 발생
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]섹션 2 HelloServlet 진행 도중 코드를 똑같이 작성하고, http://localhost:8080/hello?username=world를 입력 하였는데 화이트 라벨 에러 페이지가 발생했습니다. 어떻게 해야하나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
v3 질문
FrontControllerServletV3 코드에서 paramMap는 스프링 부트가 시작하고 http응답이 올때마다 새로운 객체가 생성되어 사용되는 건가요??private Map<String, String> createParamMap(HttpServletRequest request) { Map<String, String> paramMap = new HashMap<>(); request.getParameterNames().asIterator() .forEachRemaining(paramName -> paramMap.put(paramName, request.getParameter(paramName))); // paramName = "username","age" return paramMap; }
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의 내용대로 했는데 왜 오류가 나는지 모르겠습니다.
https://drive.google.com/file/d/1xtWyIr26d2Xj-Z8WYxTQDvjoAQkEOqc_/view?usp=drive_link
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
내부 트랜잭션 커밋
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]내부 트랜잭션을 커밋 하지 않고 바로 외부 트랜잭션을 커밋 해도 문제는 없는건가요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
프록시 객체 트랜잭션 내부 호출
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@Transactional이 작성되지 않은 메서드에서 @Transactional이 작성된 자신의 메서드를 호출하면 트랜잭션이 실행되지 않는다는 것은 이해하였습니다. 그러면 @Transactional이 작성된 메서드에서 @Transactional이 작성된 자신의 메서드를 호출하면 현재 자신이 프록시 객체이므로 트랜잭션이 실행되는걸까요? 아니면 현재 프록시 객체가 아니라 타겟 객체이므로 똑같이 트랜잭션이 실행되지않는걸까요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
"정상 이체" 정상 실행인데 "이체중 예외 발생"은 실패하는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 스프링 AOP는 스프링 컨테이너에서 등록된 빈들을 통해 DI가 되고 트랜잭션 프록시 객체를 생성하는 것은 완벽히 이해 했습니다. 근데 MemberServiceV3_3는 스프링 AOP를 쓰는데 강의처럼 Bean을 등록하기 전에 "정상 이체" 메소드는 정상 실행되고 "이체중 예외 발생"은 롤백이 일어나지 않아 실패하는건가요 ?빈들을 등록하지 않았기 때문에 "정상 이체" 메소드도 커밋이 되지 않아야 된다고 생각하는데 이유가 궁금합니다 !!