묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
콘솔에서 쿼리가 보이지 않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강사님처럼 콘솔에 INFO와 쿼리가 뜨지 않습니다.다른 분들 질문을 보니 yml 파일을 확인하라던데 yml 파일에 오타는 없는거 같은데.... 어느 부분을 수정해야할지 모르겠습니다 ㅠㅠ
-
미해결스프링 시큐리티 OAuth2
FormLogin과 Oauth2Client 둘 중 사용하는 시점
안녕하세요 FormLogin, Oauth2Client 설정 중에서요FormLogin을 설정하면 인가, 사용자 리소스까지 바로 가져올 수있고 Oauth2Client는 인가까지만 해주는데둘 중에 어떤 상황에 해당 설정들을 사용해야하는지 헷갈려서 질문드립니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
JSP파일 문제
jsp 파일이 강의 처럼 뭔가 안뜨고 자바 클래스 import도 안했는데 빨간색이 안뜨네요. 단순히 입력만되는 창이 됐는데 어떻게 해결할 수 있을까요?
-
미해결스프링 핵심 원리 - 기본편
수동 빈과 자동 빈이 충돌될 때 로그에 overriding is disabled라고 남습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. 섹션 7. 컴포넌트 스캔 - 중복 등록과 충돌 강의를 실습하던 중 @Component public class MemoryMemberRepository implements MemberRepository{} @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { @Bean(name = "memoryMemberRepository") public MemberRepository memberRepository(){ return new MemoryMemberRepository(); } } 이러한 경우 자료에서는 "수동 빈 등록이 우선권을 가져서 수동빈이 자동빈을 오버라이딩 해버린다." 라고 나와 있습니다. 근데 제 콘솔 로그에는 09:37:26.010 [main] WARN o.s.c.a.AnnotationConfigApplicationContext --Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'memoryMemberRepository' defined in class path resource [hello/core/AutoAppConfig.class]: Cannot register bean definition [Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=autoAppConfig; factoryMethodName=memberRepository; initMethodNames=null; destroyMethodNames=[(inferred)]; defined in class path resource [hello/core/AutoAppConfig.class]] for bean 'memoryMemberRepository' since there is already [Generic bean: class [hello.core.member.MemoryMemberRepository]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null; defined in file [/Users/g.u/logInDev/T.I.L/spring/basic/codebase/core/build/classes/java/main/hello/core/member/MemoryMemberRepository.class]] bound. (...생략....) The bean 'memoryMemberRepository', defined in class path resource [hello/core/AutoAppConfig.class], could not be registered. A bean with that name has already been defined in file [/Users/g.u/logInDev/T.I.L/spring/basic/codebase/core/build/classes/java/main/hello/core/member/MemoryMemberRepository.class] and overriding is disabled. Action: Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true오버라이딩을 원하면 추가 옵션을 세팅하라고 나와있습니다. 이 경우에는 오버라이딩이 된게 아니고 스프링이 중단되었다고 판단됩니다. 혹시 강의에서는 추가로 옵션을 세팅한건 지 아니면 제가 잘못 코드를 작성한건 지 궁금합니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
연관관계 관련 질문 있습니다.
public void returnBook(String bookName) { UserLoanHistory targetHistory = this.userLoanHistories.stream() .filter(history -> history.getBookName().equals(bookName)) .findFirst() .orElseThrow(IllegalArgumentException::new); targetHistory.doReturn();리팩토링 강의에서 repository 사용없이 this.userLoanHistories.stream()로 바로 데이터를 불러오던데 mappedBy로 연관관계가 존재하면 가능한건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의 자료 위치
[질문 내용]선생님께서 html코드를 복사하고 강의 중간중간 설명해주시는 강의 자료는 어디에서 찾을수있나요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
체크 예외 -> 런타임 예외 변환 시 생성자
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]서비스 계층의 순수성을 위해 체크 예외를 런타임 예외로 변환해서 던지고, 런타임 예외로 변환 시 반드시 기존 체크 예외를 포함하여 던져야 한다.왜냐하면 예외 발생 시 어떤 예외 때문에 해당 예외가 발생했는지 스택 트레이스를 참고하기 위해서이다. 그러면 차라리 런타임 예외 클래스의 생성자에서 예외를 포함하도록 강제하면 예외를 포함하여 던져야 한다. 는 부분이 해결 될 것 같은데요강의에서는 다음과 같이 파라미터가 없는 기본 생성자를 만드는 특별한 이유가 있는 것인지 아니면 중요한 주제가 아니라 남기셨는지 궁금합니다. public class MyDbException extends RuntimeException { public class MyDbException() { // 이 부분을 없애고 다음의 생성자만 남김 } public class MyDbException(Throwable cause) { // 이 생성자만 강제하면 반드시 예외를 포함하여 던져야 하므로 문제가 해결됨 } }
-
미해결스프링 핵심 원리 - 고급편
스프링부트 3.0 이슈에 대한 정리
'프록시패턴과 데코레이터패턴.pdf' p.7 하단의 설명을 이해하는데 시간이 많이 걸렸습니다.다른 수강생분들도 참고하실 수 있도록 정리했습니다. 부트3.0버전에서 나타나는 현상위 상황에서 http://localhost:8080/v2/request?itemId=hello 으로 접근하면 아래와 같은 결과가 나옵니다. 수동등록하여 컨트롤러 Bean이 생성됐다 하더라도위 @RequestMapping 만으로 컨트롤러 로 '인식' 할 수 없음 (부트 3.0부터) 개선 1 (부트3.0)@RequestMapping 과 @ResponseBody ==> @RestController 로 교체시도이렇게 만들면 컨트롤러 로 '인식'할 수 있다.하지만 아래처럼 빈충돌로 애플리케이션 구동자체가 안된다.(@RequestMapping 을 쓰던 이전에는 컴포넌트 스캔이 대상이 아니여서 자동구성 빈이 생성되지 않았고오직 수동구성 빈만 생성됐음)(@RestController로 변경하면서 컨트롤러로 인식하게 됐지만자동구성으로 빈이 등록돼버리고 , 수동구성 빈 등록으로 덮어쓰기를 시도하려하지만 스프링부트는 스프링과 달리 이것을 허용하지 않고 빈충돌 에러를 발생시킴) 위 현상은 v1, v2에서만 발생한다. ('수동구성으로 진행되도록 유도된 예제'에서 불청객으로 자동구성이 발생)반면 v3에서는 발생하지 않는다. (자동구성으로 진행됐기 때문) 따라서 자동구성 대상이 되지 않도록 v3 패키지경로를 컴포넌트스캔지정하여 v1, v2를 스캔대상에서 제외시킨다. 개선 2 (부트3.4)@RequestMapping 과 @ResponseBody ==> @RestController 로 교체이렇게 만들면 컨트롤러 로 인식할 수 있다.위 개선1과 달리 빈충돌없이 애플리케이션 구동이 잘 된다. (빈이 덮어써지게 3.4는 개선됐나보다)
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
DI 적용 중 순환 참조 발생
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]FrontControllerServletV5 에서 의존성 주입을 도전해보려고 다음과 같이 코드를 작성했습니다.FrontControllerServletV5에 HandlerMappingConfig, HandlerAdapterConfig를 이용하여 handlerMappingMap, handlerAdapter를 생성자를 통한 의존성 주입을 시도했습니다.FrontControllerServletV5@RequiredArgsConstructor @WebServlet(name = "frontControllerServletV5", urlPatterns = "/front-controller/v5/*") public class FrontControllerServletV5 extends HttpServlet { private final Map<String, Object> handlerMappingMap; private final List<MyHandlerAdapter> handlerAdapters; @Override protected void service(HttpServletRequest request, HttpServletResponse response) //... }HandlerMappingConfig@Configuration public class HandlerMappingConfig { @Bean public Map<String, Object> handlerMappingMap() { Map<String, Object> handlerMappingMap = new HashMap<>(); handlerMappingMap.put("/front-controller/v5/v3/members/new-form", new MemberFormControllerV3()); handlerMappingMap.put("/front-controller/v5/v3/members/save", new MemberSaveControllerV3()); handlerMappingMap.put("/front-controller/v5/v3/members", new MemberListControllerV3()); handlerMappingMap.put("/front-controller/v5/v4/members/new-form", new MemberFormControllerV4()); handlerMappingMap.put("/front-controller/v5/v4/members/save", new MemberSaveControllerV4()); handlerMappingMap.put("/front-controller/v5/v4/members", new MemberListControllerV4()); return handlerMappingMap; } }HandlerAdapterConfig@Configuration public class HandlerAdapterConfig { @Bean public List<MyHandlerAdapter> handlerAdapters() { List<MyHandlerAdapter> handlerAdapters = new ArrayList<>(); handlerAdapters.add(new ControllerV3HandlerAdapter()); handlerAdapters.add(new ControllerV4HandlerAdapter()); return handlerAdapters; } }하지만 다음과 같이 순환 의존성 에러가 발생했는데, 원인을 찾지 못하고 있습니다.정규 빈과 내부 빈이 서로 의존하고 있다는 것인가요..? 다른 수강생 분들의 코드와 다르게 작성해보려고 했는데, 이 에러가 발생해서 원인을 찾아보려고 했지만 찾지 못했습니다, 왜 발생한 것인지 도움 부탁드립니다..The dependencies of some of the beans in the application context form a cycle: ┌─────┐ | frontControllerServletV5 ↑ ↓ | (inner bean)#61a91c9b defined in file [.../hello/servlet/web/frontcontroller/v5/FrontControllerServletV5.class] └─────┘
-
미해결스프링 핵심 원리 - 고급편
스프링부트 3.0 이슈에 따른 컴포넌트 스캔 패키지경로
안녕하세요.위 문제에서 패키지를 v3까지 디테일하게 지정을 했는데요.hello.proxy.app.v1 와 hello.proxy.app.v2 관점에서는 어떻게 해석할 수 있는지 궁금합니다. v3는 스프링부트3.0 이전과 이후 달라진 이슈에 영향을 받지 않아보입니다.v1, v2는 어떤 영향을 받는 것인지 알 수 있으면 전체적으로 이해가 될 것같아 질문드립니다.(v1, v2에는 @Controller, @RestController가 없습니다.따라서 빈 자동등록은 부트3.0 이전 이후 모두 동작하지 않을 것으로 기대됩니다)
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
[다른 질문 파생 질문] DI 적용 시 순환 의존성 발생
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]다른 질문들 중에 "DI 적용해보기"라는 질문과 답변을 보고 저도 DI 적용을 해보려고 했습니다.그런데 일급 컬렉션을 사용했을 때는 발생하지 않는 순환 의존성이 일급 컬렉션을 사용하지 않을 때는 발생하는데 혹시 이유를 알 수 있을까요? 제가 참고했던 코드는 아래에 있습니다.https://www.inflearn.com/community/questions/1251450/di-%EC%A0%81%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0
-
미해결스프링 핵심 원리 - 고급편
스프링로드맵2 스프링기본편의 구성과 사용분리
안녕하세요. 스프링로드맵 2 스프링기본편 강의에서 MemberServiceImpl가 MemoryMemberRepository구현에 강결합되는 상황을 제시해 주셨습니다.이후 아래 그림과 같이 인터페이스 MemberRepository에만 의존하게 끔 설계를 해주셨는데요. 이 때 AppConfig가 등장합니다.public class AppConfig { public MemberService memberService(){ System.out.println("call AppConfig.memberService"); return new MemberServiceImpl(memberRepository()); } public OrderService orderService(){ System.out.println("call AppConfig.orderService"); return new OrderServiceImpl( memberRepository(), discountPolicy()); } }위 코드를 설명하실 땐 구성 이라고 표현하셨는데요. (구성과 실행을 분리) 이것도 전략패턴이라고 말할 수 있나요? 전략패턴에서는 구성대신 조립 이란 설명으로 다르게 표현하셨습니다.
-
미해결스프링 부트 - 핵심 원리와 활용
커넥션 팬딩 질문
이런 팬딩 상황이 많은 사용자 접근으로 인해 흔히 서버가 터졌다는 상황인건가요??
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
하이버네이트 버전
이 강의에서 hibernate버전 6을 쓰지 않는 이유가 있나요? 5랑 6 버전 차이가 많이 나나요?
-
미해결스프링 핵심 원리 - 기본편
스프링 빈
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]앞 전 수업까지는 @bean을 메서드에 적어주어서 메서드만 빈으로 등록을 하는건줄 알았습니다.이번 수업에서는 @Compent를 클래스 적어주어 빈을 등록한다고 하였는데 클래스를 빈으로 등록하는 것과 메서드를 등록하는것은 무슨차이인가요?클래스를 @Compent를 이용하여 빈으로 등록하면 클래스의 메서드들과 필드 모두 빈으로 등록되는건가요?
-
미해결스프링 부트 - 핵심 원리와 활용
스프링부트가 설정파일을 인식하는 방법(application.properties 파일이름)
[application.properties 파일이름]1. 해당 파일 이름을 스프링 부트가 어떻게 설정 파일인지 알고서 설정하는 것인가요? 설정 파일명을 변경하고 싶으면 어떻게 해야하는지 궁금합니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
공식 문서 링크 변경된 것 같습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]9. 스프링 트랜잭션 이해.pdf(v20240526) 32페이지에 나온 https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-source-replica-replication-connection.html이 링크는 Page Not Found가 뜹니다.https://dev.mysql.com/doc/connector-j/en/connector-j-source-replica-replication-connection.html이 링크로 바뀐 것 같습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
<빌드하고 실행하기>0:20
<빌드하고 실행하기>0:20 에서 뜨는 화면이 어떤 화면일까요..??ㅠㅠ 그냥 폴더창켜서 폴더 만들고 하는 것과 같을까요??
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
hibernate.core 버전 변경
안녕하세요 hibernate.core의 버전 변경과 관련되서 질문드립니다.아래 코드와 같이 영한님이 말씀해주신 부분을 추가하고plugins { id 'org.springframework.boot' version '2.6.5' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' ext["hibernate.versioin"] = "5.6.5.Final" configurations { compileOnly { extendsFrom annotationProcessor } }Gradle을 다시 로드했는데요 여전히 5.6.7 버전으로 구성되어 있습니다.버전이 바뀌지 않는데 어떻게 해야하나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
utf-8 해결 이후 오류 질문입니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]utf-8 오류 나는 건 해결해서 테스트 성공 뜨긴 했는데 Mockito 오류가 뜨긴 합니다... 무시해도 되는걸까요?