묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
jsessionid가 url에 있을때 404에러
세션을 지우고,로그인을 하면 세션이 만들어져야하는데 세션은 만들어졌는데 url에 jsessionid가 들어가면 404 에러가 나오네요이유가 멀까요 해결하신분 없나요세션을 안 지우고하면 에러는 안뜹니다 ps. 코드 문제일수도 있다 생각되어 ,강의자료에 있는 애초에 완성되있는 완성본 코드로 실험한 결과도 역시나 결과는 같았습니다. 실제로 쓸때는 session.tracking-modes를 넣을꺼라 문제는 없겠지만 정책이 바뀐건지 강의랑다르게 404에러가 나와서 답답하네요,,참고로 제 부트 버전은 3.1.5 입니다
-
미해결스프링 부트 - 핵심 원리와 활용
[intellij 무료버전]tomcat runner 실행 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 캐시 삭제도 해봤고,인텔리제이 버전도 22.3.3으로 내렸습니다. 여전히 run configuration에서 이렇게밖에 뜨지 않습니다ㅠ 추가로 build.gradle에 복붙하는 코드에서 이런 게 뜨는데, 상관이 있는 걸까요?ㅠ
-
미해결스프링부트 시큐리티 & JWT 강의
Consider defining a bean of type 'org.springframework.security.crypto.password.PasswordEncoder' in your configuration.
@Configuration public class BCryptConfig { @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } } 위와 같이 Config class에 PasswordEncoder 빈을 생성했는데도 Description:Parameter 1 of constructor in domain.Member.service.MemberService required a bean of type 'org.springframework.security.crypto.password.PasswordEncoder' that could not be found.Action:Consider defining a bean of type 'org.springframework.security.crypto.password.PasswordEncoder' in your configuration.Process finished with exit code 1 와 같이 에러가 발생하면 어떻게 해야할까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
이런 경우엔 어떤 예외와 응답 코드가 적절할까요?
..
-
미해결Java 마이크로서비스(MSA) 프로젝트 실습
/actuator/refresh 가 동작하지 않습니다.
안녕하세요~ 강의를 듣다가 제가 뭔가 잘못한건지 actuator에 refresh가 동작하지 않아 질문글을 남깁니다.강의 2-10번 DB 비밀번호 암호화까지 문제 없이 잘 진행하다재가동 없이 설정파일 갱신하는 부분을 진행하는데item-service에서 build.gradle에 의존성 추가하고 bootstrap.yml에 설정 옵션 추가했는데config-server 설정 파일 변경 후 postman 에서 refresh 요청을 날려도 response body 에는 []빈 배열만 찍히고 별다른 문구가 없고 변경된 설정이 적용되지 않더라고요강의를 봐도 크게 설정하는 부분이 많은건 아니어서 잘 적용된 것 같은데 작동하지 않는 원인이 콘솔에 찍히지 않아서 헤메고 있습니다. build.gradle 의존성과 bootstrap.yml 에 설정 추가하고config-server 실행시키고 item-service 실행시킨 후 설정 파일에 변경점을 주고 localhost:5000번으로 /actuator/refresh 요청을 날렸습니다. 그리고 물품등록 요청을 보내서 200코드 성공했는데 별도의 logs 폴더에 api-local2.log는 생기지 않았습니다. 강의와 다르게 한건 인텔리제이로 프로젝트 구성한 것과 스프링부트 마이너 버전만 달라서 크게 문제가 있지는 않을 것 같은데.. 2-10 강의까지 해본 깃 주소도 올려봅니다.https://github.com/doyoun8813/Microservice
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@PathVariable 관련 에러가 왜 발생했는지 궁금합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]제가 "상품 상세" 강의를 들으면서 BasicItemController 안에 있는 @GetMapping("/{itemId}") public String item(@PathVariable Long itemId, Model model) { log.info("BasicItemController.item"); Item item = itemRepository.findById(itemId); model.addAttribute("item", item); return "basic/item"; }강의를 따라 위의 부분처럼 작성했을 땐java.lang.IllegalArgumentException: Name for argument of type [java.lang.Long] not specified, and parameter name information not found in class file either.라는 에러가 발생하고 @GetMapping("/{itemId}") public String item(@PathVariable(name = "itemId") Long itemId, Model model) { log.info("BasicItemController.item"); Item item = itemRepository.findById(itemId); model.addAttribute("item", item); return "basic/item"; }이렇게 작성하니 에러가 해결되었습니다. 위 코드는 왜 에러가 났는 지 궁금합니다!
-
미해결토비의 스프링 부트 - 이해와 원리
어노테이션매핑정보 - 404 오류 문의드립니다
안녕하세요. 어노테이션 매핑정보 사용 강의 보고 궁금한점이 생겨 문의 남겼습니다.지금까지 강의에 나온것과 똑같이 코드를 작성했습니다. 그런데 실행하면 예상했던 값이 나오지 않고 404 오류가 떠요.실행창에는 아래와 같은 메세지가 나옵니다.16:09:26.879 [http-nio-8080-exec-1] WARN org.springframework.web.servlet.PageNotFound -- No mapping for GET /hello16:09:26.886 [http-nio-8080-exec-1] WARN org.springframework.web.servlet.PageNotFound -- No endpoint GET /hello. 그래서 HelloController 클래스위에 @RequestMapping을 지우고 대신 @Controller을 추가해봤더니 그제서야 강의와 같은 결과가 나옵니다.제 스프링 버전은 3.x, jdk17인데 이것과 관련이 있을까요? 같은 코드인데 왜 저는 404가 나오는지 궁금합니다...
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
[공유]Invalid value type for attribute 'factoryBeanObjectType': java.lang.String
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스프링 부트 버전 3.2.0 사용 하시는분들 mybatis 의존성 추가하실때 이렇게 추가하시면 돼요..!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
메시지 파일 관리를 백엔드에서 하나요?
[질문 내용]메시지를 관리하는 거를 백엔드 단에서 파일 하나 만들어서 관리하는 거 같은데 이걸 백엔드랑 프론트로 나눠서 개발을 하는 경우에도 메시지 관리를 백엔드단에서 하게 되나요? 뭔가 프론트에서 할 거 같아서 질문드립니다.
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
트랜잭션 동작 원리 정리
트랜잭션의 동작 원리에 대해서 정리해봤습니다.제대로 이해했는지 확인 부탁드립니다! 혹시 잘못 이해하고 있는 부분이 있다면 말씀 부탁드립니다. 서비스 클래스의 메소드에 @Transactional 이 있으면 스프링은 해당 비즈니스 로직을 상속한 AOP 프록시 객체를 생성한 후, 이를 스프링 빈에 등록한다.클라이언트가 해당 프록시를 호출한다. (비즈니스 로직 자체를 호출하지 않는다)스프링은 스프링 컨테이너에 등록된 트랜잭션 매니저를 획득한다.트랜잭션 매니저의 transactionManager.getTransaction()을 호출하여 트랜잭션을 시작한다.트랜잭션 매니저는 스프링 컨테이너에 등록된 데이터 소스를 이용하여 커넥션을 생성한다.커넥션의 con.setAutoCommit(false) 호출로 수동 커밋 모드로 변환한다.생성하고 설정을 끝낸 커넥션을 트랜잭션 동기화 매니저에 보관한다.실제 서비스를 호출하면, 서비스의 비즈니스 로직과 리포지토리의 데이터 접근 로직이 수행된다.리포지토리의 데이터 접근 로직은 트랜잭션 동기화 매니저에 보관된 커넥션을 획득한 후 DB에 접근하여 SQL을 수행한다.비즈니스 로직이 끝나면서 AOP 프록시에서 커밋 또는 롤백을 통해 트랜잭션을 종료한다.트랜잭션을 종료함으로써 커넥션은 커넥션 풀에 반납된다.
-
미해결스프링 핵심 원리 - 기본편
MyLogger 스코프
[질문 내용]requeste 스코프 예제 만들기 20:17초에 나오는 LogDemoService의 MyLogger에 관한 질문입니다. 해당 스코프가 request니까 각 http요청당 하나씩 생성되고 종료되는 거로 알고 있습니다. 처음 컨트롤러에서 생성된 MyLogger를 사용하고 그 다음 서비스에도 MyLogger를 사용하는데 이 때 컨트롤러에서 세팅한 값 MyLogger객체가 그대로 서비스에도 쓰이는 거 같은데 이게 어떻게 가능한거죠?? 컨트롤러와 서비스 코드 간에 같은 MyLogger 객체를 공유하는 어떤 기능이 있는 건가요? 동시에 100개의 http 요청이 들어왔을 때 구분을 어떻게 하는지 궁금합니다.
-
해결됨스프링 핵심 원리 - 기본편
의존 관계 주입이 끝나는 시점
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]초기화 메서드는 의존 관계 주입이 끝난 후에 실행된다고 이해했습니다. 그런데 의존 관계 주입 단계라는 구간은 정확히 언제까지인가요? 이 코드의 경우엔 setUrl()에서 의존 관계 주입이 일어나지만스프링이 초기화 메서드를 실행하려면 의존 관계 주입이 끝났다는 것을 정확히 파악해야 할 것 같은데 스프링은 다음 중 어떤 식으로 의존 관계 주입이 끝났다는 것을 판단하나요? 1) setUrl()이 호출된 이후, 즉시 의존 관계 주입이 끝났다는 것을 판단할 수 있다.2) networkClient() 메서드 호출이 완전히 끝날 때(return문의 실행이 끝나고 나서)까지가 의존 관계 주입이라고 판단한다.3) 기타.. 혹시 강의 때 말씀하셨었나요? pdf로 복습하는 중인데 이 부분이 궁금하네요..
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
form프로젝트 import에러 해결했어요! 도움되시라고 작성해보았습니다~
안녕하세요.오늘 수업자료 다운로드 후 form-start파일을 form으로 프로젝트명 변경 하고 에러나는 부분때문에 2시간을 막연하게 보내고 구글링 + 인프런에 있는 수강자분들의 질문과 공식서포터즈 님들의 해결방법 작성해놓은것들 그대로 셋팅해봐도 안되었던 문제를 해결했어요.해결방법 공유를 위해 작성했습니다! (질문아니예요ㅠ)저는 설정하면서 총 3개의 문제를 겪음 ㅠ제가 겪고 해결한 부분이 도움될 분들이 계실거라 생각하고 몇자 적어봅니다. (사실 좀 길어요ㅠ 그래도 제가 버린시간을 다른분들께선 알차게 쓰시길 바라는 마음으로 작성중) [진행 및 문제를 확인]프로젝트를 import 한후 build.gradle 파일을 열어서 gradle 7버전 이상, java는 17로 사용하는 것으로 설정완료.이후 윈도우에서 인텔리제이를 사용하고 있어서 setting 접속한 후 해당설정 화면에서 gradle버전을 PC에 7.4버전이 설치되어 있는 경로로 설정, 그리고 자바도 17버전으로 설정을 해줍니다. refrash하는데 에러...저는 gardle 7.4-all버전을 사용하려고 설정을 모두 gradle설정하는부분은 7.4버전대로 설정했는데 뜬금없이 console에 나타난 에러메세지는 gradle을 gradle-6.8.2-bin.zip 로 설정되어있어서 안된다고 나오더라구요.에러메세지 : Unsupported Java.Your build is currently configured to use Java 17.0.4 and Gradle 6.8.2. [원인]분명히 setting > gradle 메뉴에가서 gradle을 7버전 사용한다고 설정했는데...뭐가 문제지? 싶어서 구글링해도 뭐해도 다 해봤던 설정만 나와서 답답하더라구요.그래서 그냥 우선 gradle관련 설정파일을 하나하나 확인해봐야겠다는 마음으로 gradle설정파일을 확인하는데 그중 gardle-wrapper.properties 파일에 문제가 있음을 확인사실 설정관련 정보는 저도 잘 몰라요.. 그런데 확실하게 알수 있었던건 distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip이 부분으로 인해 프로젝트가 gradle을 다른버전을 사용하도록 설정되어 있는걸 알게됨. [문제1 해결방법]1. form > gradle > wrapper > gradle-wrapper.properties 파일을 클릭해서 오픈2. distributionUrl에 있는 설정정보를 gradle을 7버전 이상으로 설정값을 변경그런데 저는 다른정보도 변경해줘야 할것 같아서 이전에 타임리프 프로젝트에서 설정되어있는 gradle-wrapper.properties 파일의 정보를 그대로 복붙했어요.(저는 여기서 gradle-8.5-bin.zip으로 설정되어있어서 그냥 그거 설정함)distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists 3. gradle refresh [문제2 또 에러 (자바9버전 이상에서 제공되지 않는 어노테이션 문제)그런데 refresh 한 후 여기까지 하고 또 에러가 납니다.프로젝트에 자바9버전이상에서 그냥 사용할 수 없는 어노테이션이 있나봐요. 영한님이 이전 servlet강의에서 말씀해주셨던 자바8인가? 9이상부터 제공되지 않는 어노테이션들이 자바 17버전에서 제공되지 않는 문제..사용하도록 설정해야되니까 관련 코드를 찾아서 dependencies에 추가해주는걸로 해결했어요.에러메세지 : path~~~~\dev\05_스프링mvc2-백엔드웹개발활용기술\form\src\main\java\hello\itemservice\TestDataInit.java:8: error: package javax.annotation does not existimport javax.annotation.PostConstruct;^ [문제2 해결방법]1.build.gradle 파일열기2. dependencies에 아래의 코드 추가implementation group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2'3. gradle refresh [문제3 또 에러]문제1, 문제2 까지 겪고 해결방법대로 설정완료 후 잘되나 싶더만 아래의 에러메세지가 나타납니다.프로젝트가 빌드될때 java11이 사용되도록 설정이 되어있어서 발생된것 같아 17로 변경해줍니다.에러메세지 : * What went wrong: Execution failed for task ':ItemServiceApplication.main()'.> Process 'command 'C:\Program Files\Java\jdk-11.0.17\bin\java.exe'' finished with non-zero exit value 1 [문제3 해결방법]1. 우측상단 select Run/debug configuration 박스클릭2. Edit Configurations 클릭3. Run/Debug Configurations 설정 창에서 java version 7로 변경 이후 프로젝트가 잘 구동되어 강의 듣을수 있게 되었습니다 ㅋㅋㅋ 으..말주변 없어서 이거 작성하느냐고 1시간 걸림 ㅠㅠ 설명이랑 같이 작성하느냐고 두서없을수 있으나..한가지라도 도움되시길 바라면서 마침! ps. 프로젝트의 설정파일 정보가 변경되었으면 좋겠습니다!프로젝트를 다운받고 안되는 부분이 초보입장에선 동공에 지진이... 좋은강의 늘 감사합니다:)
-
미해결스프링 핵심 원리 - 기본편
빈으로 등록하지 않았는데 @Autowired를 통해 의존성 주입할 때 충돌이 납니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 @Autowired를 사용해 의존성 주입을 하다 충돌이 나서 질문드립니다.MemberRepository인터페이스 -> MemoryMemberRepository 구현체후자에만 @Component를 붙인 상황입니다.그런데Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl' defined in file [/Users/minsung/Desktop/study/core/out/production/classes/hello/core/member/MemberServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository이런식으로 memberRepository 또한 빈으로 등록되어 있었습니다.@Autowired가 클래스 타입으로 조회한다는 것은 알고 있지만 빈으로 등록되어있는 애들 중에서 조회하는 것 아닌가요...?왜 memberRepository를 빈으로 등록하지 않았는데 빈으로 등록되어있는지@Autowired는 왜 빈으로 등록되지도 않은 memberRepository를 찾을 수 있었는지@Autowired 보다는 @RequiredArgsConstructor 사용을 권장하던데 이제 @Autowired는 잘 쓰이지 않는 것인지궁금합니다!
-
해결됨스프링 핵심 원리 - 기본편
CoreApplicationTests 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]CoreApplicationTests 부분에서 오류가 나는데 강사님과는 다른 오류가 나서 질문 드립니다. Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl' defined in file [D:\core\core\out\production\classes\hello\core\member\MemberServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository memoryMemberRepo를 매칭해야 하는데 2개가 존재해서 그런 것 같은데(맞는지는 잘 모르겠습니다)MemberService에는 아무런 Annotation도 붙이지 않았는데 왜 그런 걸까요? (작성한 코드 이미지 첨부합니다) 추가Appconfig 의 @Bean 이 붙은 메소드에 모두 @Primary를 붙여서 어찌저찌 해결은 했는데무슨 이유로 저 오류가 나는건지 궁금합니다
-
해결됨Practical Testing: 실용적인 테스트 가이드
Optional에 대한 처리
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 강의 잘듣고 있습니다. persistenceLayer 계층 테스트에서 repository 를 테스트할때 Optional<Entity> 형태로 반환하는 함수를 테스트한다고 할때 어떤식으로 테스트를 작성해주어야 되나요? 예를 들어 특정 id를 가진 멤버를 조회한다고 하면 반환값이 Optional<Member>가 될텐데 무조건 찾는 테스트를 한다면 그냥 get()을 붙여서 Optional이 아닌 객체로 꺼내도 되나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
[gradle build error] gradle clear build를 할때 모두 자바 17을 사용하고 있음에도 오류가 발생하고 있습니다.
안녕하세요. 다름이 아니고 다음과 같이 gradle은 8.4 버전이고 자바는 17버전을 사용하고 있습니다. 자바 17은 gradle 실행, complie할때 등등 모든 부분해서 11이 아닌 17을 사용하고 있음에도 불구하고 지속적으로 저런 에러가 발생해서 질문드렸습니다. intellij를 껏다 켜보기도 하였구요
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ExceptionResolver 적용 우선순위 (스프링 내부 + 사용자 커스텀 구현체)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]강의를 통해 스프링 부트가 기본으로 제공하는 ExceptionResolver 는 ExceptionHandlerExceptionResolver, ResponseStatusExceptionResolver, DefaultHandlerExceptionResolver 가 있는 것을 배웠는데요,그러면 수업 내용중 WebConfig 를 통해 등록한 아래 resolver 들까지 포함하면, 우선순위 높은 순으로 나열할 때 아래 순서가 되는 게 맞나요?1) ExceptionHandlerExceptionResolver2) ResponseStatusExceptionResolver3) DefaultHandlerExceptionResolver4) MyHandlerExceptionResolver5) UserHandlerExceptionResolver@Override public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) { resolvers.add(new MyHandlerExceptionResolver()); resolvers.add(new UserHandlerExceptionResolver()); }
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
JPA 순환참조 질문 드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. EventGroupInformation.java@NotFound(action = NotFoundAction.IGNORE)@JsonBackReference@ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)@JoinColumn(name="CATEGORY_ID", insertable = false, updatable = false)private CategoryInformation categoryInformation;@BatchSize(size = 1000)@JsonManagedReference@OneToMany(mappedBy = "eventGroupInformation", cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)@Where(clause = "DBSTS = 'O' AND FEED_DISPLAY_YN = 'Y' AND START_DATE <= SYSDATE AND END_DATE >= SYSDATE ")@Column(insertable = false, updatable = false)private List<EventInformation> eventInformations; CategoryInformation.java@BatchSize(size = 1000)@JsonManagedReference@OneToMany(mappedBy = "categoryInformation", fetch = FetchType.LAZY)@Where(clause = "DBSTS = 'O' AND START_DATE <= SYSDATE AND END_DATE >= SYSDATE ")@Column(insertable = false, updatable = false)//@Access(value = AccessType.PROPERTY)public List<EventGroupInformation> eventGroupInformations; 여러개의 oneToMany가 걸려 있는 entitiy들을 강의 V5예제를 참고하여 개선중에 있습니다.CategoryInformation(Order)ㄴ EventGroupInformation(OrderItem)ㄴ EventInformation(Item)이런 식에 구조인데요, 각각 oneToMany 입니다. EventGroupInformation과 EventInformation을 fetchJoin을 통해 쿼리를@Query(value = "SELECT distinct eg FROM EventGroupInformation eg " +"LEFT JOIN FETCH eg.eventInformations e " +"WHERE eg.dbsts = :dbsts " +"AND eg.categoryId IN :categoryIds" ) 호출하면 해당 fetchjoin 쿼리 하나만 나갈꺼라고 생각을했는데,갑자기 상위 entity인 CategoryInformation 테이블에 category_id(PK)로 category_id 개수만큼의N+1 이슈가 발생 하였습니다. JsonBackReference, JsonManagedReference 해당 옵션을 주면 역참조가 안되어야 하는게 맞지 않나요?? 추가로 ManyToOne 쪽에 @JsonIgnore 도 추가 해보았으나 마찬가지입니다 ㅠ제가 놓치고 있는게 있을까요? 김영한 선생님 강의 에서는OrderItem-Item 관계에서 IN쿼리를 호출했을때 IN절에 포함되는 orderId기준의 상위 엔티티인 Order 테이블에 역으로 쿼리가 나가는건 못봤는데 말이죠..(물론, 양방향 관계를 끊고 단방향 설정시 N+1 쿼리는 나가지 않습니다.)
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
파라미터 받는 방법에 대하여
컨트롤러의 메서드에 파라미터로 VO나 도메인 객체의 경우ex) Item item만 적더라도 @ModelAttribute가 자동으로 붙기떄문에 생략해도 된다고 이해하였는데요 String이나 Integer의 경우 생략시 @RequestParam이 자동으로 붙으나 Map같은 경우에는 왜 @RequestParam을 강제로 붙여야지만 나오는지 혹시 아실까요?..