묻고 답해요
144만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
index.html 500오류
에러뜨고 안돼여 ㅠㅠ<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul> <li><a href="basic.html">서블릿 basic</a></li> <li>서블릿 <ul> <li><a href="/servlet/members/new-form">회원가입</a></li> <li><a href="/servlet/members">회원목록</a></li> </ul> </li> <li>JSP <ul> <li><a href="/jsp/members/new-form.jsp">회원가입</a></li> <li><a href="/jsp/members.jsp">회원목록</a></li> </ul> </li> <li>서블릿 MVC <ul> <li><a href="/servlet-mvc/members/new-form">회원가입</a></li> <li><a href="/servlet-mvc/members">회원목록</a></li> </ul> </li> <li>FrontController - v1 <ul> <li><a href="/front-controller/v1/members/new-form">회원가입</a></li> <li><a href="/front-controller/v1/members">회원목록</a></li> </ul> </li> <li>FrontController - v2 <ul> <li><a href="/front-controller/v2/members/new-form">회원가입</a></li> <li><a href="/front-controller/v2/members">회원목록</a></li> </ul> </li> <li>FrontController - v3 <ul> <li><a href="/front-controller/v3/members/new-form">회원가입</a></li> <li><a href="/front-controller/v3/members">회원목록</a></li> </ul> </li> <li>FrontController - v4 <ul> <li><a href="/front-controller/v4/members/new-form">회원가입</a></li> <li><a href="/front-controller/v4/members">회원목록</a></li> </ul> </li> <li>FrontController - v5 - v3 <ul> <li><a href="/front-controller/v5/v3/members/new-form">회원가입</a></li> <li><a href="/front-controller/v5/v3/members">회원목록</a></li> </ul> </li> <li>FrontController - v5 - v4 <ul> <li><a href="/front-controller/v5/v4/members/new-form">회원가입</a></li> <li><a href="/front-controller/v5/v4/members">회원목록</a></li> </ul> </li> <li>SpringMVC - v1 <ul> <li><a href="/springmvc/v1/members/new-form">회원가입</a></li> <li><a href="/springmvc/v1/members">회원목록</a></li> </ul> </li> <li>SpringMVC - v2 <ul> <li><a href="/springmvc/v2/members/new-form">회원가입</a></li> <li><a href="/springmvc/v2/members">회원목록</a></li> </ul> </li> <li>SpringMVC - v3 <ul> <li><a href="/springmvc/v3/members/new-form">회원가입</a></li> <li><a href="/springmvc/v3/members">회원목록</a></li> </ul> </li> </ul> </body> </html>plugins { id 'java' id 'war' id 'org.springframework.boot' version '3.3.4' id 'io.spring.dependency-management' version '1.1.6' } group = 'hello.servlet' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(21) } } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' //JSP 추가 시작 implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' implementation 'jakarta.servlet:jakarta.servlet-api'//스프링 부트 3.0이상 implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api'//스프링부트3.0이상 implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl' //JSP 추가 끝 compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } tasks.named('test') { useJUnitPlatform() }왜 화면이 안넘어갈까요???ㅠ ㅠㅠ
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
배포까지 완료했는데 index.html 접속이 안됩니다
어디서 잘못된걸까요?ㅜㅜ
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
AOP Self Invocation 해결방법..?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요.이 영상에서 나온것처럼 최상단 서비스에서만 @Transactional 걸어주면(예전 영상에서 나온 한 클래스 내부의 2개의 트랜잭션처리[AOP Proxy때문에 this로 인한 Self Invocation]이 일어나는 경우)를 해결할 수 있을까요?레포지토리 내부에서 트랜잭션을 걸지 않고 엔티티매니저로 CRUD하는 작업을 여러개 작성해놓으면 memberRepository 내부에서 내부 메서드를 호출해도 둘 다 트랜잭션 처리가 될까요?
-
미해결Practical Testing: 실용적인 테스트 가이드
Mock 반환값 질문
프론트랑 협업 하실 때, 서비스 로직을 먼저 만드는게 아닌 반환값을 먼저 준다고 하셨는데(?) 예를 들어 어떻게 주시는지 궁금합니다. 하드코딩으로 그냥 데이터를 임의로 입력해주시는건지 예시를 보여주시면 감사하겠습니다 !컨트롤러, 서비스, 레포지토리에서 어떤식으로 진행되는지 궁금합니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
트랜잭션 및 커넥션 관련 질문 드립니다.
안녕하세요. 앞서 db1강의에서 트랜잭션 관련 내용을 바탕으로 커넥션 관련해서 제가 이해하는 바가 맞는지 질문드립니다..! 트랜잭션을 시작하고 JdbcTemplate.update() 등등이 호출되면, 먼저 데이터베이스에 접근할 수 있는 커넥션을 얻는다.이때 내부적으로 DataSourceUtils.getConnection()을 호출해서 트랜잭션 동기화 매니저에서 관리하는 커넥션을 가져오거나, 새로운 커넥션을 생성(등록된 dataSource로 부터 커넥션을 생성)한다. 그리고 나서 SQL 쿼리를 실행한다. 이때 커넥션을 통해 데이터베이스와 통신한다.즉, JdbcTemplate을 통해 update 작업을 수행할 때, 커넥션을 사용하여 데이터베이스에 접근하여 SQL 쿼리를 실행하고, 그 결과로 데이터베이스의 내용이 업데이트된다.트랜잭션을 시작하지않고 JdbcTemplate.update() 등등이 호출되면, 이때도 먼저 데이터베이스에 접근할 수 있는 커넥션을 얻는다.이때 내부적으로 DataSourceUtils.getConnection()을 호출해서 트랜잭션 동기화 매니저에서 관리하는 커넥션을 가져오거나, 새로운 커넥션을 생성(등록된 dataSource로 부터 커넥션을 생성)한다. 그리고나서 SQL쿼리를 실행한다. 이때 커넥션을 통해 데이터베이스와 통신한다.마찬가지로, 커넥션을 사용하여 데이터베이스에 접근하여 SQL 쿼리를 실행하고, 그 결과로 데이터베이스의 내용이 업데이트된다.트랜잭션을 사용하지 않고 JdbcTemplate.update()를 호출하면, 커넥션은 기본적으로 자동 커밋 모드로 동작하여, 쿼리가 실행된 후 즉시 데이터베이스에 반영된다.트랜잭션이 있든 없든 JdbcTemplate은 항상 커넥션을 사용하여 데이터베이스에 접근하고, 쿼리를 실행하여 그 결과로 데이터베이스의 내용을 수정하거나 조회하는 작업을 수행한다. 트랜잭션 및 커넥션 관련해서 이렇게 이해하면서 정리해보았는데, 이렇게 이해하면 될까요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
SQL 설치 관련
https에서 sql release까지 잘 다운로드 받았는 것 같은데 sudo yum install mysql-community-server를 하니까 이런 에러 메세지가 뜹니다...ㅠ
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
간단한 주문 조회 V4 : JPA에서 DTO로 바로 조회에 대한 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]해당 강의에서 5:35초를 보시게 되면, 원래는 fetch join이 아닌 join이지만 public List<OrderSimpleQueryDto> findOrderDtos() { return em.createQuery( "select new jpabook.jpashop.repository.OrderSimpleQueryDto(o) " + " from Order o" + " join fetch o.member m" + " join fetch o.delivery d", OrderSimpleQueryDto.class ).getResultList(); }fetch join을 하게 되면 v3메서드와 동일한 결과가 나옴과 동시에 쿼리문도 동일하게 1개가 출력된 것을 확인하였습니다. 여기서 드는 의문점은' fetch join은 select절에 entity가 아닌 DTO를 명시하게 되면 안된다' 즉, 'fetch join은 select절에 entity만을 명시해야 한다' 라고 질문 글을 찾아보며 알게되었습니다. 하지만 결과는 예상과 다르게 잘 작동하여 의문이 들게 되었습니다.
-
미해결스프링 핵심 원리 - 기본편
logback.xml 설정파일을 자동으로 읽을수있는 이유가 궁금합니다.
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]springboot 3.xx 이상에선 로그설정을 바꿔야되서 resource에 logback.xml을 추가해서 로그를 볼수있게 해결하는 방법이 왜 작동하는건지 궁금합니다. 예를들어 genericxmlapplication으로 ApplicationContext 컨테이너에 등록한다면 해당 파일의 경로를 입력해서 bean 구성파일을 넣는데 Annotation~Context일지라도 xml로 설정정보를 넘겨주는것도 의문이고, 애초에 경로지정도 따로 하지않았는데 어디에서 어떻게(어느 단에서) 자동으로 설정이 되는건지 궁금합니다. 감사합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
단순하고 실용적인 컨트롤러 v4
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.FrontControllerServletV4Map<String, Object> model = new HashMap<>(); //추가 String viewName = controller.process(paramMap, model);//모델뷰를 다 여기에 넣음여기서Map<String, Object> model = new HashMap<>(); /model.put()을 해주지않았는데model에 파라미터와 값들이 비어있지않나요? model을 파라미터로 전달해주는게 의미가있나요?:
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
오류 처리 흐름과 ExceptionResolver관련 질문
질문 1. 오류 처리 흐름을 아래와 같이 이해하였는데 맞는지 여부BasicErrorController를 활용한 오류 처리 흐름WAS(여기까지 전파) ← 필터 ← 서블릿 ← 인터셉터 ← 컨트롤러(예외 발생)WAS(/error) → 서블릿 → BasicErrorController에서 오류 처리 → View or JSON 반환ExceptionResolver를 활용한 오류 처리 흐름ExceptionResolver(response.sendError() 처리) ← 필터 ← 서블릿 ← 인터셉터 ← 컨트롤러(예외 발생)WAS(/error) → 서블릿 → BasicErrorController에서 오류 처리 → View or JSON 반환질문 2. ExceptionResolver 관련 설명을 아래와 같이 이해하였는데 맞는지 여부예외 발생 시 서블릿 컨테이너까지 예외가 전달되지 않고, 스프링 MVC의 ExceptionResolver 에서 예외를 처리한다. -> response.sendError() 가 아닌 예외(Exception)이 WAS에 전달되지 않는다.WAS 입장에서는 정상 처리된 것이다. -> response.sendError() 는 WAS 입장에서 정상 처리 된 것으로 인지한다.
-
미해결Practical Testing: 실용적인 테스트 가이드
DTO -> 엔티티, 엔티티 -> DTO 과정에서의 빌더 패턴과 정적 팩토리 메서드 사용에 대해 질문 있습니다.
DTO -> 엔티티, 엔티티 -> DTO 과정에서의 빌더 패턴과 정적 팩토리 사용에 대해 아래와 같이 정리를 했는데 제가 정리한 방식이 타당한 방식인지 궁금합니다. DTO -> 엔티티엔티티의 생성자에 빌더 패턴을 적용합니다.외부에서 엔티티를 생성하려면 빌더 패턴을 사용하여 엔티티를 생성합니다. 예를들어 서비스 레이어에서 엔티티의 빌더 패턴을 사용하여 DTO를 엔티티로 변환하는 작업을 가집니다.엔티티쪽에서 DTO를 엔티티로 변환하는 정적 팩토리 메서드를 가지지 않는 이유 변화가 심한 DTO에 엔티티가 의존하는 것은 좋지 않다고 생각했습니다. 그래서 객체 생성에 빌더 패턴만 적용했습니다. 엔티티 -> DTODTO쪽에서 생성자에 빌더 패턴을 적용합니다.또한 엔티티 -> DTO로 변환하는 정적 팩토리 메서드를 만드는데 이때 DTO 객체 생성은 DTO쪽에서 정의한 빌더 패턴을 적용합니다.DTO는 엔티티에 의존해도 아무 문제가 없다고 생각합니다. 그래서 빌더 패턴도 사용하고 정적 팩토리 메서드도 사용하여 DTO 객체를 생성했습니다.이 둘을 같이 사용할 경우 빌더 패턴과 정적 팩토리 메서드 장점 모두 사용할 수 있다고 생각하여 2가지 모두 사용하여 DTO 객체를 생성하도록 했습니다.
-
미해결스프링 핵심 원리 - 기본편
Appconfig에대해서
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.MemberService memberService; @BeforeEach public void beforEach(){ Appconfig appconfig = new Appconfig(); memberService = appconfig.memberService(); } @Test void join(){ Member member = new Member(1L,"memberA",Grade.VIP); memberService.join(member); Member findMember = memberService.findMember(1L); Assertions.assertThat(member).isEqualTo(findMember); }public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } public OrderService orderService(){ return new OrderServiceImpl(memberRepository(), discountPolicy()); } public MemberRepository memberRepository(){ return new MemoryMemberRepository(); } public DiscountPolicy discountPolicy(){ // return new FixDiscointPolicy(); return new RateDiscountPolicy(); }이코드에서 memberService _ appconfig.memberService();Appconfig클래스에서 memberSerivce()를 호출하고return MemberSergiceImpl로가서 this.memverRepository = MemoryMemberRepository()가되서 MemberServiceImpl클래스에서 memberRepository가 save하고 findby를 사용할수 있게되는건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
html 복사 ..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]html 복사하면 뭔가 줄이 자꾸 어긋나거나 하면서 안 맞는데 혹시 다른 방법이 없을까요 ..?제가 수기로 적는수밖에없을까요 ..여기에 질문 내용을 남겨주세요.
-
미해결Practical Testing: 실용적인 테스트 가이드
Service dto를 만드는 대신 도메인 객체를 생성하는 전략은 별로인가요?
안녕하세요. PresentationLayer 테스트(2) 마지막 부분에 service layer용 dto를 생성하여 서비스를 presentation layer와 분리하는 것을 확인했습니다.그렇다면 presentation Dto -> service Dto -> domain으로 변경이 이루어질 것 같은데요..혹시 컨트롤러에서 바로 도메인 객체로 바꿔서 presantatio Dto -> domain 구조로 바꾸는 것은 좋지 않은 아키텍처일까요 ???
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
httpAPI가 먼가요?
GET쿼리 파라미터 ,post-HTMLFORM방식도 Httpapi아닌가요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
제대로 이해했는지 확인하고싶습니다.
가장 처음에 했던 트랜잭션은 각각의 리포지터리에서 @Transactional을 걸어줘서 별도로 커밋, 롤백 되게끔 만들었습니다. 이후, 마지막에는 LogRepository에 @Transactional(propagation = Propagation.REQUIRES_NEW)를 사용해서 트랜잭션 동기화 매니저에서 다른 커넥션을 가져와서 별도로 커밋, 롤백 되게끔 만들었습니다. 여기서 궁금한 점은 처음과 마지막의 트랜잭션의 구성은 다르지만 결과값은 똑같은 게 맞을까요? 다른 점이 있다면 혹시 무엇인지 알려주시면 감사하겠습니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
데이터베이스 연결 에러
[질문 내용]여기에 질문 내용을 남겨주세요.2024-10-16T00:11:04.326+09:00 INFO 16884 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) 2024-10-16T00:11:04.335+09:00 INFO 16884 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2024-10-16T00:11:04.336+09:00 INFO 16884 --- [ restartedMain] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.20] 2024-10-16T00:11:04.387+09:00 INFO 16884 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2024-10-16T00:11:04.387+09:00 INFO 16884 --- [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1088 ms 2024-10-16T00:11:04.433+09:00 INFO 16884 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2024-10-16T00:11:06.881+09:00 ERROR 16884 --- [ restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. org.h2.jdbc.JdbcSQLNonTransientConnectionException: Connection is broken: "java.net.ConnectException: Connection refused: getsockopt: localhost" [90067-224]어플리케이션을 실행했더니 이러한 에러가 뜹니다... 제가 생각하기엔C:\Users\재성 이 폴더에 db파일이 없어서 생기는 오류같은데 어떻게 해결해야할 지 모르겠습니다... 다른 강의 이것저것 번갈아가면서 듣다 보니 db파일을 삭제했다가 새로 만들고 반복했었는데 오랜만에 강의 들으니까 db에서 오류가 발생합니다ㅠ
-
미해결Java/Spring 주니어 개발자를 위한 오답노트
의존하는 객체 final 선언 질문드립니다.
안녕하세요, '서비스란 무엇인가' 강의를 보고 질문드립니다. 서비스는 불변으로 만들기 위해 서비스에서 쓰고 있는 리포지토리를 final로 선언하라고 강의를 통해 배웠습니다. 컨트롤러에서 쓰는 서비스나 리포지토리에서 쓰는 것들도 final로 선언해도 될까요? 불변이면 생성된 객체가 변경할 수 없는 것 이라는 정도만 이해하고 있는데 다른 레이어도 final로 선언하면 더 안정적인 애플리케이션이 되는 거 아닌가? 라는 생각이 들어 질문드립니다! 감사합니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
강의 43분 35초쯤에 대해 질문 있습니다.
OrderResponse에서 of 메서드 부분에 빌더 패턴과 정적 팩토리 메서드를 같이 쓰는걸로 이해를 했습니다. 저는 빌더 패턴으로 객체를 생성하는 것과 정적 팩토리 메서드로 객체를 생성하는게 결이 약간 다른(?) 느낌으로 이해를 해서 이렇게 같이 써도 상관이 없는지 궁금합니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
@Transactional 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.원래는 service단에 @Transactional 을 걸어주는게 맞지만 지금은 강의하는거기때문에 JpaItemRepositoryV2에 @Transactional을 선언해준건가요 ?