묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
IpPortToStringConverter이 호출되는 이유
11:40부터 시작하는 form을 제출했을때 호출되는 컨버터에 대한 질문입니다. 강의에서 제출 버튼 눌렀을때 127.0.0.1:8080라는 문자가 컨트롤러에 넘어간다고 하십니다. 해당 컨트롤러에는 @ModelAttribute가 있고 Form 을 변환하려고 했더니 IpPort객체가 있어서 문자를 IpPort객체로 변환해야하는데 이때 IpPortToStringConverter 이 또 호출된다고 하시는데요.여기서 왜 IpPortToStringConverter이 호출되는건가요? 문자에서 IpPort 객체로 변환해야하는 것이니까 StringToIpPortConverter가 호출되어야하는 것 아닌가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
지금들어도될지
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]혹시 나온지가 좀 된 강의인데 지금들어도 버젼이라든지 상관없을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
localhost:8080/hello일때 Whitelabel Error Page가 뜹니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] localhost:8080/hello를 가면 이렇게 뜹니다ㅜㅜ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
컨트롤러에 @PostMapping 없어도 되나요?
createMemberForm.html내의<form action="/members/new" method="post">를 보면 post메소드로 호출하고 있는데,MemberController.java에는@GetMapping("/members/new")만 있네요.@PostMapping("/members/new")이 맞지 않나요?회원가입 클릭하니 주소표시줄에 http://localhost:8080/members/new라고는 뜨는데, 500에러가 납니다
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
validation(toMember)의 위치
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 강의 수강 중 질문이 생겨 여쭤봅니다. MemberServiceV1에서 memberRespository.update(fromId, fromMember.getMoney() - money); validation(toMember); memberRespository.update(toId, toMember.getMoney() + money); 해당 코드가 있습니다. 트랜잭션을 사용하지 않아서 테스트 코드에서 예외가 발생하며 memberA는 8000원, memberEx는 10000원이 된다고 말씀하셨는데, 근본적인 원인은 validation(toMember); 의 위치 문제가 아닐까 생각이 드네요 ..! validation(toMember); memberRespository.update(fromId, fromMember.getMoney() - money); memberRespository.update(toId, toMember.getMoney() + money); 이렇게 순서를 바꾸면 검증을 먼저 수행하고 이체를 하니 테스트 코드에서 둘 다 1만원으로 변동이 되지 않던데, 단순히 트랜잭션 이해를 위한 설명으로 생각하면 될지 싶어 여쭤봅니다 !
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
인코딩 문제
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 아니오2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예안녕하세요, 강의 수강 중 문제가 생겨 여쭤봅니다. validation/v2부터 따라하며 공부 중 갑자기 인코딩 처리가 안되고 깨지는 문제가 발생했습니다. 이것 저것 찾아도 해결되지 않아서 질문드리게 되었는데 혹시 어떤 것이 문제가 될 지 여쭤봐도 될까요 ? addForm, editForm, item, items.html에는 아래 사진처럼 utf-8로 설정해두었습니다. preference의 file Encodings에서도 utf-8을 설정해주었습니다. 서버를 띄우고 캐시 메모리를 비워봐도 여전히 같은 문제가 발생하던데 혹시 짚어볼 만한 원인이 더 있을까요 ?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
libs에 폴더에 war 밖에 없습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]-a---- 2025-06-22 오후 4:15 22515429 hello-spring-0.0.1-SNAPSHOT.war gradlew 실행하고 폴더를 이동했더니 war 파일 밖에 없습니다. jar 파일이 없는거면 처음부터 잘못된건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
db연결은 되는데 웹 페이지에서 회원 정보 데이터가 반영이 안됩니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]db는 연결이 되어있다고 하는데 막상 db콘솔에서 insert한 데이터가 웹 페이지 회원 목록 조회에서는 안뜹니다. 막상 회원가입을 하면 목록에 뜨는 상황입니다.그리고 db를 끊어도 웹 페이지에서 회원 가입과 회원 목록 조회는 됩니다.그리고 db를 연결한 상태에서 웹 페이지에서 회원가입을 하면 db에는 넘어온 정보가 없습니다
-
미해결ASP.NET Core MVC +ASP.NET Core +REST API +.NET 8.0
Console.WriteLine
백엔드에서 Console.WriteLine 찍은건 어디서 볼 수 있나요 ?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의내의 인텔리제이 기능
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]다름이 아니라 3:38쯤에 옆에 아이콘을 누르면 약간 확장이 되는 기능이 제 인텔리제이에서는 보이지가 않아서요. 어떻게 설정을 하는걸까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
폼에서 에러 출력 로직? 질문 드립니다.
<form action="item.html" th:action th:object="${item}" method="post"> ... <div> <label for="price" th:text="#{label.item.price}">가격</label> <input type="text" id="price" th:field="*{price}" th:errorclass="field-error" class="form-control" placeholder="가격을 입력하세요"> <div class="field-error" th:errors="*{price}"> 가격 오류 </div> </div> ... </form>타입정보가 맞지 않는 경우 뷰에서 에러 출력 로직이 어떻게 되는지 궁금합니다.사진에서처럼 가격 정보에 qqq를 입력했고 가격 입력 폼 아래 에러 정보가 출력되었습니다.두가지 에러가 나타나는데요 한가지는 스프링이 직접 검증 오류에 추가한 경우의 오류와 저희가 직접 만든 오류입니다.여기서 html 코드를 살펴보았는데요.저는 두가지 오류가 생성되었기때문에 <div>도 두가지가 생성 되었을거라 생각했으나 페이지의 html 코드에서 <div>태그가 각각 생성되지 않고 하나의 <div>태그에 줄바꿈 태그인 <br>로 오류가 구분되었다는 점과 th:each 같은 것이 사용되지 않았다는 점에서 궁금한점이 생기는데요 어떻게 한가지 태그 안에서 두가지 오류를 출력 할 수 있나요?th:errors 에 뭔가가 있을 것 같긴한데요. 어떻게 되는건가요?현재 두가지 오류 객체가 생성되는데 이것이 리스트 같은곳에 담겨서 이 리스트 자체가 erros에 내부(?)에서 반복을 실행한다거나 그런게 있을까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
갑자기 실행이 되질 않습니다..
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':hello.itemservice.ItemServiceApplication.main()'. > Process 'command 'C:\Users\.jdks\corretto-17.0.14\bin\java.exe'' finished with non-zero exit value 1위와 같은 에러가 뜹니다.어제까지 잘 하다가 오늘 갑자기 되질 않네요.사실 섹션 6까지 다 듣고 다음 섹션인 로그인 처리로 넘어가서 프로젝트 생성하는데 이상하게 계속 안돼서 어제 한것을 실행해보는데 이것마저 안되네요..뭔가 연관이 있는건지... 왜이런건가요?해결완료했습니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Appearance 에서 번외로 알려주신 설정 적용하면 작동 안합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.기본 설정인 Gradle로 할때는 문제없는데, 번외로 알려주신 설정인 인텔리제이로 돌리게 되면 스프링부트가 작동하지 않습니다. 해결 방법이 있나요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
순수 jdbc, jdbc 템플릿 ,통합 테스트할때 결과 주소값 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요.복습 할겸, 새로운 헬로우 스프링을 만들어서 다시 영상을 보면서 치고 있었습니다.그리고 나서 테스트 케이스 만드는 부분이 잇었는데, 여기에서 저는 그냥 하는 김에 전부다 테스트 케이스를 만들자! 라는 생각이 들어서 만들었습니다.그리고 나서 통합 테스트 영상까지 따라 치고 나서,(메모리 테스트 케이스를 복사 붙여 놓기를 한다음 @SpringBootTest @Transactional @Autowired는 추가 햇음) 테스트 케이스를 실행햇는데테스트 케이스에서 노랑색 에러 메시지가 뜹니다. 이렇게요. 그래서. 전에 만든 helloSpring어떤가 시범을 해봤는데(코드를 똑같이 완전히 복사 붙여 놓기 하고 코드에 문제 없는지 확인.)잘 되더 라고요.근데. 빈 을 안 건드린게 생각나서 jpa템플릿에서 jdbc로 바꾸니 똑같이 오류나는 것을 확인할 수 있었습니다.(전에는 getId로 비교해서 테스트 케이스를 통과한 것 같습니다.)(jpa 메모리 에서 통합 테스트 한것) 여기서 궁금증이왜 jdbc에서는 객체의 주소값 이 다른지 알고싶습니다.테스트에서는 뭐 알수가 없더라고요.답변 부탁 드립니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ControllerAdvice와 Controller 이후 계층에서 발생하는 예외들
ControllerA - ServiceA - RepositoryA위의 계층끼리 서로 연관되어있고 ControllerAdvice의 대상은 글로벌 컨트롤러이고 모든 예외를 @ExceptionHandler로 잡아놓았을 때,Q1. ServiceA나 RepositoryA에서 사용자예외 또는 자바,스프링이 제공하는 예외가 발생했을 때 따로 try-catch 같은 방법으로 예외를 처리하지 않으면 ControllerAdvice가 처리해주나요?Q2. 만약 처리해준다고 하면, 컨트롤러의 핸들러까지 예외가 역으로 전달되는 순간에 ControllerAdvice가 처리해주는 방식인가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
프로젝트 빌드 에러
이번 강의 시작하면서 message-start 폴더를 message 로 변경(받은 소스 파일 모음집에는 message 폴더가 있어 다른 폴더로 이동후 변경하였습니다) 변경 후 빌드 open project로 했는데처음에스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 | 학습 페이지이분과 비슷한 에러가나서 gradle.properties 를distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip로 변경했습니다. 이것은 현재 spring.stat.io에서 프로젝트 생성시 생기는 버전을 그대로 들고온것입니다.그리고 싱크 후 다시 빌드하니 아래와 같은 에러가 뜹니다,.여기서는 지금 어떻게 해야할지 모르겠습니다.이전 프로젝트도 그렇고 이번 프로젝트도 그렇고.. 에러가 나는 분들은 많은 것같은데 다른 경우와 달리 pdf 파일에도 안내가 없어서 강의 진행에 좀 답답하네요. 이전 프로젝트처럼 다른 분께서 알려주신대로 start.spring.io 에서 message 라는 이름의 프로젝트를 생성후 강의에 올라온 main과 resource 폴더를 복사 붙여놓기해야하나요?
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다
@SpringBootTest class MemberServiceTest { @Autoworied lateinit var memberService: MembersService @Test fun get() { memberService.get(1L) } }@Service class MemberService( private val txManager: PlatformTransactionManager, ) { @Transactional(readOnly = true) fun get(id: Long) { val tx = txManager.getTransaction(DefaultTransactionAttribute()) println("isCurrentTransactionReadOnly()=${TransactionSynchronizationManager.isCurrentTransactionReadOnly()}") println("isActualTransactionActive()=${TransactionSynchronizationManager.isActualTransactionActive()}") println("isNewTransaction()=${tx.isNewTransaction()}") // get } } 제가 기대한건isNewTransaction = true인데요 -> 가장 처음 호출된 @Transactional이 있는 service 메서드이기 때문에 그런데테스트 코드로 실행해도 그렇고, API로 get 메서드가 호출되도록 해봐도 그렇고모두 isNewTransaction = false 로 나옵니다. 내부 트랜잭션이 아니라 외부 트랜잭션이라고 생각했는데 왜 false일까요.... 09:54:40.059 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Creating new transaction with name [com.application.service.member.MemberService.get]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly 09:54:40.062 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Opened new EntityManager [SessionImpl(16208286<open>)] for JPA transaction 09:54:40.075 [Test worker] DEBUG o.h.e.t.i.TransactionImpl - On TransactionImpl creation, JpaCompliance#isJpaTransactionComplianceEnabled == false 09:54:40.075 [Test worker] DEBUG o.h.e.t.i.TransactionImpl - begin 09:54:40.081 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Exposing JPA transaction as JDBC [org.springframework.orm.jpa.member.HibernateJpaDialect$HibernateConnectionHandle@486e4af6] 09:54:40.083 [Test worker] TRACE o.s.t.i.TransactionInterceptor - Getting transaction for [com.application.service.member.MemberService.get] 09:54:40.084 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Found thread-bound EntityManager [SessionImpl(16208286<open>)] for JPA transaction 09:54:40.084 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Participating in existing transaction TransactionSynchronizationManager.isCurrentTransactionReadOnly()=true TransactionSynchronizationManager.isActualTransactionActive()=true outer.isNewTransaction()=falseCreating new transaction with name이 나오는데 09:54:40.084 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Participating in existing transaction 이 로그도 나옵니다,,
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@ModelAttribute와 model.addAttribute() 이름 차이.
강의 9분 20초 경부터 설명하는 pdf 내용모델에 데이터를 담을 때는 이름이 필요하다. 이름은 @ModelAttribute에 지정한 name(value) 속성을 사용한다. 만약 다음과 같이 @ModelAttribute의 이름을 다르게 지정하면 다른 이름으로 모델에 포함된다.@ModelAttribute("hello") Item item -> 이름을 'hello'로 지정model.addAttribute("hello", item); -> 모델에 'heelo' 이름으로 저장 이 설명에 대해서 궁금한 점이있는데요. 만약 다음과 같이 @ModelAttribute의 이름을 다르게 지정하면 다른 이름으로 모델에 포함된다. 이 부분이 이해가 잘 가지 않습니다. 위 두 코드 모두 모델의 키(이름?)이 결국 'hello'로 사용되고 뷰에서 또한 hello로 데이터를 꺼낼 수 있는 것 아닌가요? 그런데다음과 같이 @ModelAttribute 이름을 다르게 지정 이라는 부분 때문에 헷갈립니다.. 어느 부분이 다른건지 모르겠고 제가 어느 것을 놓치고 있는지 잘못이해하고있는지 잘모르겠습니다. 둘다 hello로 모델에 저장되는 것은 매한가지같은데 어느 부분이 차이점이라는 것인가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
gradlew 빌드 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.계속 "내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다." 라고 뜹니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
중복회원예외()에서 오류 발생
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]중복 회원 예외()에서 오류가 자꾸 발생합니다. @Test public void 중복_회원_예외() throws Exception { //Given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); //When memberService.join(member1); IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2)); //Then assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } }Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appendedjava.lang.IllegalStateException: 이미 존재하는 회원입니다. at hello.hello_spring.service.MemberService.lambda$validateDuplicateMember$0(MemberService.java:39) at java.base/java.util.Optional.ifPresent(Optional.java:178) at hello.hello_spring.service.MemberService.validateDuplicateMember(MemberService.java:38) at hello.hello_spring.service.MemberService.join(MemberService.java:31) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:380) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:728) at hello.hello_spring.service.MemberService$$SpringCGLIB$$0.join(<generated>) at hello.hello_spring.service.MemberServiceIntegrationTest.중복_회원_예외(MemberServiceIntegrationTest.java:45) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)