묻고 답해요
131만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
index.html이 webapp 아래에서도 welcom page로 잡히는 이유가 궁금합니다.
https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-welcome-page 다음 링크를 읽어보면 SpringBoot의 정적 자원 접근을 위한 default 설정이 /static, /public, /resources 밑으로 되어있다고 나와있습니다.그런데 default 설정을 건든적이 없음에도 어떻게 webapp폴더 아래에 있는 index.html파일을 찾아내서 welcom page로 사용하는건지 궁금합니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
UI 화면과 프로젝트 연결
안녕하세요. 선생님께서 제공해주신 UI 화면을 저희 프로젝트 서버에 연결하는 방법이 궁금합니다. 프론트엔드에서 버튼을 클릭했을 때 API와 연결되어 동작하는 과정이 궁금합니다!
-
미해결스프링 부트 - 핵심 원리와 활용
AppInitV2Spring 오류 및 AppInitV3SpringMvc 미동작 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]"스프링 컨테이너 등록" 강의에서 작성하는 코드HelloConfig, HelloController, AppInitV2Spring 이렇게 작성하게 되는데요. 무료버전의 톰캣 설정 문제가 아니라는 것은 이전 강의 V1까지는 제대로 실행이 완료된 상태입니다.그래서 V1까지는 잘 되었으나 AppInitV2Spring 코드를 작성하고 빌드하면IllegalStateException: 자식 컨테이너를 시작하는 중 오류 발생 -> caused by LifecycleException: 구성요소[StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]을(를) 시작하지 못했습니다.-> caused by java.lang.NoClassDefFoundError-> ClassNotFoundException 형태로 오류가 뜹니다.자세한 오류는 맨 아래 첨부합니다. 신기한건 기존에 war 파일 형태로 빌드($gradlew build)하여tomcat/libs/webapps에 ROOT.war 로 올리고 톰캣을 별도로 실행한다음에localhost:8080/spring/hello-spring주소를 입력하고 테스트 할 때는 잘뜨니까 미치겠습니다. ..ㅜㅜ 오류가 나니 AppInitV2Spring 내용은 주석처리하고 다음강의인 AppInitV3SpringMvc를 작성했는데요. 해당 onStartup()은 호출부터 안되네요... "AppInitV3SpringMvc.onStartup" 부터 로그가 안찍힙니다..이것 역시 혹시나...? 하고 war파일로 빌드하여 톰캣 webapps에 넣고 직접 톰캣 실행 후 localhost:8080/hello-springlocalhost:8080/spring/hello-spring.. 전부 잘됩니다.... ㅠㅠ MyContainerInitV1.onStartup MyContainerInitV1 c = null MyContainerInitV1 ctx = org.apache.catalina.core.ApplicationContextFacade@5a411614 MyContainerInitV2.onStartup MyContainerInitV2 c = [class hello.container.AppInitV1Servlet, class hello.container.AppInitV2Spring] MyContainerInitV2 ctx = org.apache.catalina.core.ApplicationContextFacade@5a411614 AppInitV1Servlet.onStartup 10-Jan-2024 19:59:26.303 SEVERE [main] org.apache.catalina.startup.HostConfig.deployDescriptor 배치 descriptor [C:\Users\oksu\.SmartTomcat\server\server\conf\Catalina\localhost\ROOT.xml]을(를) 배치하는 중 오류 발생 java.lang.IllegalStateException: 자식 컨테이너를 시작하는 중 오류 발생 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:686) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:658) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:712) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:643) at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1939) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123) at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:536) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:426) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1661) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:114) at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402) at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:345) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:893) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:845) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:240) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:917) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) at org.apache.catalina.startup.Catalina.start(Catalina.java:795) 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.apache.catalina.startup.Bootstrap.start(Bootstrap.java:347) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478) Caused by: org.apache.catalina.LifecycleException: 구성요소 [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]을(를) 시작하지 못했습니다. at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:419) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:186) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:683) ... 37 more Caused by: java.lang.NoClassDefFoundError: org/springframework/web/context/WebApplicationContext at java.base/java.lang.Class.getDeclaredConstructors0(Native Method) at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3373) at java.base/java.lang.Class.getConstructor0(Class.java:3578) at java.base/java.lang.Class.getDeclaredConstructor(Class.java:2754) at hello.container.MyContainerInitV2.onStartup(MyContainerInitV2.java:22) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4850) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) ... 38 more Caused by: java.lang.ClassNotFoundException: org.springframework.web.context.WebApplicationContext at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1353) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1165) ... 45 more 10-Jan-2024 19:59:26.312 INFO [main] org.apache.catalina.startup.HostConfig.deployDescriptor 배치 descriptor [C:\Users\oksu\.SmartTomcat\server\server\conf\Catalina\localhost\ROOT.xml]의 배치가 [747] 밀리초 내에 완료되었습니다. 10-Jan-2024 19:59:26.315 INFO [main] org.apache.coyote.AbstractProtocol.start 프로토콜 핸들러 ["http-nio-8080"]을(를) 시작합니다. 10-Jan-2024 19:59:26.491 INFO [main] org.apache.catalina.startup.Catalina.start 서버가 [996] 밀리초 내에 시작되었습니다. http://localhost:8080/ 10-Jan-2024 20:02:05.720 INFO [Thread-1] org.apache.coyote.AbstractProtocol.pause 프로토콜 핸들러 ["http-nio-8080"]을(를) 일시 정지 중 10-Jan-2024 20:02:05.748 INFO [Thread-1] org.apache.catalina.core.StandardService.stopInternal 서비스 [Catalina]을(를) 중지시킵니다. 10-Jan-2024 20:02:05.749 INFO [Thread-1] org.apache.coyote.AbstractProtocol.stop 프로토콜 핸들러 ["http-nio-8080"]을(를) 중지시킵니다. 10-Jan-2024 20:02:05.755 INFO [Thread-1] org.apache.coyote.AbstractProtocol.destroy 프로토콜 핸들러 ["http-nio-8080"]을(를) 소멸시킵니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
개념이 잘 이해가 안가요 ㅠ 도와주세요
고민.1 chap 12 부터 이해가 안갔는데 threadA.start(),threadB.start(); 이부분에서 그냥 출력하면 되지 굳이 왜 try catch를 써서 해주는지 궁금합니다. try catch는 예외 처리를 할떄 쓰는 것인데 예외 처리 할게 있는게 아닌데 왜쓰는건가요?고민 2.Runnable 인터페이스를 가져오려면 무조건 추상메소드 run을 정의해줘야하는게 아닌가요? ㅠㅠ 고민 3. Thread는 클래스고 Runnable은 인터페이스인데이런식으로 쓰레드 객체를(?) 만들 떄 runnableA를 괄호안에 넣는 이유가 runnableA를 쓰레드화를 할려고 그런건 가요? 질문을 조금 두서 없이했지만 도와주시면 감사하겠습니다.
-
해결됨[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
Fragment 에서 다른 Activity로는 Navigation을 사용하지 않나요??
초반부를 보던 중, IntroActivity의 Fragment 사이의 이동에서는 main_nav의 action을 통해 fragment의 이동을 하는 것을 보았습니다.그런데 IntroFragment2에서 SelectActivity로 이동할 때는 Intent를 이용해 Activity를 전환하더군요. 저가 궁금한 것은 Activity1의 Fragment1에서 Activity2로 이동하고 싶은데, 이때는 Navigation을 사용하는 것이 아닌,Intent를 사용해야 하나요?즉, Acitivity 사이의 이동은 Intent만을 사용해야 하나요??
-
미해결[리뉴얼] 타입스크립트 올인원 : Part1. 기본 문법편
기초가 부족할때 어떤 연습을 좀더 하면 좋을까요?
안녕하세요 예전에 타입스크립트 강의를 듣다 실제로 사용을 하나도 안해서 까먹은 상태인데요.그때도 그렇고 지금도 그렇고 타입분석 들어가는 강의부터는 도저히 스스로 분석이 안되고 설명해주시는것만 끄덕거리면서 이해하고 넘어가기만 하고 있습니다.사실 이 상태로 다음 강의로 넘어가면 안될거 같은 불안감이 있어서요.이전에 찍으셨던 타입스크립트 리액트 적용강좌를 듣고 토이프로젝트를 해볼지강의를 다시 들으면서 복기를 할지 어떤식으로 연습을 하면 좋을까요?
-
해결됨외워서 끝내는 네트워크 핵심이론 - 응용
iptables와 routing table의 차이
안녕하세요 널널님, 강의 잘 듣고 있습니다.다름이 아니라 routing table과 iptable의 차이에 대해 의문이 생겨 질문을 남깁니다.둘 다 패킷을 수정하여 ip:port 를 변경시켜주는, 일종의 nat를 수행하는 것 같은데 둘의 차이는 무엇인가요..?NAT table은 NAT 장치에 있는 routing table을 의미하는 것인가요?
-
해결됨AWS(Amazon Web Service) 입문자를 위한 강의
AWS CLI에서 Code deploy를 사용해 어플리케이션을 만드는 과정에서 막혔습니다.
이렇게 aws deploy create-application --application-name mywebapp를 실행했으나 아래와 같은 에러메시지가 떴습니다.Could not connect to the endpoint URL: "https://codedeploy.app-northeast-2.amazonaws.com/" ① 리전 확인 ② IAM 권한 확인두 가지 다 문제가 없어서 혹시 액세스 키가 문제가 아닐까 싶어액세스 키도 AWS CLI용으로 만들었습니다.그럼에도 저런 에러 메시지가 뜨는데요. 어떻게 해결해야 할까요?
-
해결됨[2024] 한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
Counter 컴포넌트가 2번씩 호출되는 이유
안녕하세요, Counter 컴포넌트 호출 회수를 디버깅 하기 위해 console.log("counter 호출!"); 구문을 아래와 같이 추가해주었는데, 강사님과는 다르게 저는 처음 렌더링 될 때와 count의 상태 값이 변화할 때 마다 counter 호출이 두 번씩 일어납니다. 이유가 무엇일까요..? 아무리 생각해봐도 이유를 모르겠습니다. 위 브라우저 콘솔 사진은 최초 렌더링 되고나서 개발자도구를 켰을 때 모습입니다. 처음부터 두 번이 호출되어 있고, 그 이후에도 count의 상태를 변화시킬 때 마다 두 번씩 로그에 찍힙니다.
-
해결됨UIUX 포트폴리오 Part.1 - Figma(피그마) 깊이 있게 배우기
iconsax 플러그인이 어디에 있는건가요...
아무리 검색해도 안나와서 결국 제공해주신 완성본 파일에서 가져와서 하고 있는데 .. 제가 못찾는건지 ㅠㅠ,..,.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
타임리프에서 ENUM에 직접 접근할때
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]타임리프에서 스프링EL 문법을 사용하여 ENUM에 직접 접근할 수 있다고 했는데 그렇게 했을 때 폴더 구조가 노출됨으로써 생기는 보안문제는 없나요?
-
미해결스프링 핵심 원리 - 기본편
인터페이스를 처음에 깔고 가야하나요?
안녕하세요 강의 잘보고 있습니다! 해당 강좌에서 회원 데이터는 자체 DB를 구축할 수도 있고, 외부 시스템과 연동할 수도 있어서 변경이 용이하도록 인터페이스로 설계하는것은 이해됐습니다.근데 만약 회원 데이터를 DB로 구축한다고 하면(미확정이 아닌 확정 사항) 인터페이스를 생략하고 바로 구현하는것이 좋나요 아니면 추후에 변동될 가능성을 생각해 인터페이스를 이용하는것이 좋을까요?
-
미해결실전! 스프링 데이터 JPA
2024년 1월 기준 p6spy dependency 추가
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' 1.9.0으로 바꾸시면 나올겁니다!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
th:action 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.코드를 작성하실 때, th:action을 비워두셨습니다.그리고 그 뒤 설명하실 때, "수정하기를 누르고 소스를 보면 action이 비워져 있는데, 이대로 저장하게 되면 이 경로 그대로 들어가게 됩니다"라고 말씀하셨습니다.설명하시는 의미는 대강 이해하겠는데 정확히 이해가 잘 안됩니다. 구체적으로 어떤 과정을 거쳐서 강사님이 말씀하신 대로 수행이 되는건가요?설명 부탁드립니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
google 로그인 문제
안녕하세요. 구글 로그인시 authService에 setRefreshToken 함수를 불러오면서 setHeader오류가 발생합니다. @UseGuards(GqlAuthGuard('google')) @Get('google') async socialGoogleLogin( @Req() req: Request & IOAuthUser, @Res() res: Response & IContext, ) { let user = await this.usersService.findOne({ findOneUserInput: { email: req.user.email }, }); if (!user) { user = await this.usersService.create({ createUserInput: { email: req.user.email, password: req.user.password, name: req.user.name, }, }); } await this.authService.setRefreshToken({ user, context: res, }); res.redirect('http://localhost:5500/social-login.html'); } async setRefreshToken({ user, context }: IAuthServiceSetRefreshToken) { const refreshToken = await this.jwtService.sign( { sub: user.id }, { secret: 'coex', expiresIn: '4h' }, ); context.res.setHeader( 'set-Cookie', `refreshToken=${refreshToken}; path=/;`, ); } @Injectable() export class JwtRefreshStrategy extends PassportStrategy(Strategy, 'refresh') { constructor() { super({ jwtFromRequest: (req) => { const cookies = req.headers.cookie; const refreshToken = cookies.replace('refreshToken=', ''); return refreshToken; }, secretOrKey: 'coex', }); } async validate(payload: any) { return { id: payload.sub }; } } front error{statusCode: 500,message: "Internal server error"}server error[Nest] 90403 - 2024. 01. 10. 오후 7:10:04 ERROR [ExceptionsHandler] Cannot read properties of undefined (reading 'setHeader')TypeError: Cannot read properties of undefined (reading 'setHeader')
-
해결됨두고두고 써먹는 유니티 VR
Environment와 Bomb이 충돌이 안되고 있어요
프로젝트 셋팅에서 Physics에 레이어 콜리젼 메트릭스도 체크 해둿는데도 폭탄이 자꾸 떨어집니다.. 해결방법이 무엇일까요?레이어도 각각 자식까지 각자로 해뒀습니다.xr toolkit버전은 2.5.2입니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 내역 전체 조회
@GetMapping("/orders") public String orderList(@ModelAttribute("orderSearch") OrderSearch orderSearch, Model model) { List<Order> orders = orderService.findOrders(orderSearch); model.addAttribute("orders", orders); return "order/orderList"; }여기 로직에서 검색조건 없이 홈 화면에서주문 내역 버튼 눌러서 들어갔을 때 어떻게 모든 주문 내역이 출력되는거죠?코드에는 orderSearch로 검색조건 받아서 검색, 출력하는 코드밖에 없는데 이해가 안가네요 ㅜㅜ 같은 메소드에서 모두 조회, 검색조건에 따른 조회가 같이 일어나는것인가요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
긍정왕 홍철이 문제 질문입니다.
문제를 보고 아래와 같이 풀었으나// Online C++ compiler to run C++ program online #include <bits/stdc++.h> using namespace std; const int n = 3; //4방향 이동 int dy[4] = { -1, 0, 1, 0 }; int dx[4] = { 0, 1, 0, -1}; int visited[n][n]; vector<int> v; //기본 맵 int a[3][3] = { {10,20,21}, {70,90,12}, {80,110,120} }; void print() { for(int i : v) { cout << i << " "; } cout << "\n"; } // 완탐 재귀 함수 void go(int y , int x) { //기저 조건 if( y == n-1 && x == n-1 ) { print(); return; } for(int i = 0; i < 4; i ++) { int ny = y + dy[i]; int nx = x + dx[i]; //범위 체크 if( ny < 0 || ny >= n || nx < 0 || ny >= n ) continue; if( visited[ny][nx] ) continue; visited[ny][nx] = 1; //방문 처리 v.push_back(a[ny][nx]); go(ny, nx); visited[ny][nx] = 0; //원복 v.pop_back(); } } //완탐과 원복 : 예제_ 긍정왕 홍철이의 구걸 여행행 int main() { visited[0][0] = 1; v.push_back(a[0][0]); go(0,0); return 0; } 출력이 위와 같이 0이 껴서 이상하게 나옵니다. 큰돌님 코드와 비교해 봤는데 다른 점을 못찾겠어요ㅜㅜ 제가 실수한 것이 있을까요??
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
강의 자료가 깨짐.
안녕하세요 강의자료를 다운받았는데 영어가 아닌 다른 문자는 깨져서 보입니다. 어떻게 하면 될까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
싱글톤 객체 사용 방법이 이해가 안됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.위에서 private final ItemRepository itemRepository라고 작성한 부분은 ItemRepository의 객체를 하나만 사용하려는 목적. 즉, 싱글톤 객체를 사용하려는 목적으로 이해를 했습니다.근데, 위에 코드는 ItemRepository의 참조값을 담을 수 있는 변수를 선언만 하고 실제 객체를 가져오는 부분(ItemRepository 객체)이 없는거 같은데 어떻게 ItemRepository 객체를 BasicItemController 클래스에서 사용할 수 있는건가요?설명 부탁드립니다.