묻고 답해요
131만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Next + React Query로 SNS 서비스 만들기
auth.ts 페이지의 credentials 관련 에러 질문
안녕하세요. 강의를 보며 코드를 작성하고 있는데, auth.ts 페이지에서'{ authorize(credentials: Record<string, string> | undefined): Promise<any>; }' 형식의 인수는 'UserCredentialsConfig<Record<string, CredentialInput>>' 형식의 매개 변수에 할당될 수 없습니다.'credentials' 속성이 '{ authorize(credentials: Record<string, string> | undefined): Promise<any>; }' 형식에 없지만 'Pick<CredentialsConfig<Record<string, CredentialInput>>, "credentials" | "authorize">' 형식에서 필수입니다.ts(2345)credentials.d.ts(12, 5): 여기서는 'credentials'이(가) 선언됩니다.(parameter) credentials: Record<string, string> | undefined이런 에러가 발생했습니다. credentials 속성을 타입과 함께 추가해주고, body에서 사용되고 있는 credentials에 ?. 연산자를 이용해 에러를 해결했는데도이러한 에러가 발생합니다.이때 500 에러가 같이 발생하는데 해당 에러도 하단에 첨부합니다. GET http://localhost:3000/api/auth/signin 500 (Internal Server Error)processMessage @ webpack-internal:///…t-dev-client.js:233eval @ webpack-internal:///…ot-dev-client.js:55handleMessage @ webpack-internal:///…lay/websocket.js:52index.js:591 Uncaught TypeError: Cannot read properties of undefined (reading 'GET')at eval (webpack-internal:///(rsc)/./src/auth.ts:14:21)at (rsc)/./src/auth.ts (file:///Users/goorm/Documents/next/y-com/.next/server/app/api/auth/[...nextauth]/route.js:182:1)at __webpack_require__ (file:///Users/goorm/Documents/next/y-com/.next/server/webpack-runtime.js:33:43)at eval (webpack-internal:///(rsc)/./src/app/api/auth/[...nextauth]/route.ts:6:63)at (rsc)/./src/app/api/auth/[...nextauth]/route.ts (file:///Users/goorm/Documents/next/y-com/.next/server/app/api/auth/[...nextauth]/route.js:172:1)at __webpack_require__ (file:///Users/goorm/Documents/next/y-com/.next/server/webpack-runtime.js:33:43)at eval (webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fauth%2F%5B...nextauth%5D%2Froute&page=%2Fapi%2Fauth%2F%5B...nextauth%5D%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fauth%2F%5B...nextauth%5D%2Froute.ts&appDir=%2FUsers%2Fgoorm%2FDocuments%2Fnext%2Fy-com%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fgoorm%2FDocuments%2Fnext%2Fy-com&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!:17:126)at (rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fauth%2F%5B...nextauth%5D%2Froute&page=%2Fapi%2Fauth%2F%5B...nextauth%5D%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fauth%2F%5B...nextauth%5D%2Froute.ts&appDir=%2FUsers%2Fgoorm%2FDocuments%2Fnext%2Fy-com%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fgoorm%2FDocuments%2Fnext%2Fy-com&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D! (file:///Users/goorm/Documents/next/y-com/.next/server/app/api/auth/[...nextauth]/route.js:162:1)at __webpack_require__ (file:///Users/goorm/Documents/next/y-com/.next/server/webpack-runtime.js:33:43)at __webpack_exec__ (file:///Users/goorm/Documents/next/y-com/.next/server/app/api/auth/[...nextauth]/route.js:192:39)at <unknown> (file:///Users/goorm/Documents/next/y-com/.next/server/app/api/auth/[...nextauth]/route.js:193:424)at __webpack_require__.X (file:///Users/goorm/Documents/next/y-com/.next/server/webpack-runtime.js:163:21)at <unknown> (file:///Users/goorm/Documents/next/y-com/.next/server/app/api/auth/[...nextauth]/route.js:193:47)at Object.<anonymous> (file:///Users/goorm/Documents/next/y-com/.next/server/app/api/auth/[...nextauth]/route.js:196:3)at Module._compile (node:internal/modules/cjs/loader:1256:14)at Module._extensions..js (node:internal/modules/cjs/loader:1310:10)at Module.load (node:internal/modules/cjs/loader:1119:32)at Module._load (node:internal/modules/cjs/loader:960:12)at Module.require (node:internal/modules/cjs/loader:1143:19)at mod.require (file:///Users/goorm/Documents/next/y-com/node_modules/next/dist/server/require-hook.js:65:28)at require (node:internal/modules/cjs/helpers:121:18)at requirePage (file:///Users/goorm/Documents/next/y-com/node_modules/next/dist/server/require.js:109:84)at <unknown> (file:///Users/goorm/Documents/next/y-com/node_modules/next/dist/server/load-components.js:59:84)at async loadComponentsImpl (file:///Users/goorm/Documents/next/y-com/node_modules/next/dist/server/load-components.js:59:26)at async DevServer.findPageComponentsImpl (file:///Users/goorm/Documents/next/y-com/node_modules/next/dist/server/next-server.js:671:36)getServerError @ client.js:417eval @ index.js:591setTimeout (async)hydrate @ index.js:579await in hydrate (async)pageBootrap @ page-bootstrap.js:24eval @ next-dev.js:25Promise.then (async)eval @ next-dev.js:23./node_modules/next/dist/client/next-dev.js @ main.js?ts=1704985593164:192options.factory @ webpack.js?ts=1704985593164:716__webpack_require__ @ webpack.js?ts=1704985593164:37__webpack_exec__ @ main.js?ts=1704985593164:1259(anonymous) @ main.js?ts=1704985593164:1260webpackJsonpCallback @ webpack.js?ts=1704985593164:1388(anonymous) @ main.js?ts=1704985593164:9Show 6 more framesShow lesswebsocket.js:46 [HMR] connected확인하시기 쉽게 같은 내용의 사진과 함께 올려드립니다.그리고 강의 내용 이외의 credentials 관련 코드를 추가하기 전인 auth.ts 파일의 코드도 첨부드립니다.import NextAuth from "next-auth"; import CredentialsProvider from "next-auth/providers/credentials"; export const { handlers: { GET, POST }, auth, signIn, } = NextAuth({ pages: { signIn: "/i/flow/login", newUser: "/i/flow/signup", }, providers: [ CredentialsProvider({ async authorize(credentials) { const authResponse = await fetch(`${process.env.AUTH_URL}/api/login`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ id: credentials.username, password: credentials.password, }), }); if (!authResponse.ok) { return null; } const user = await authResponse.json(); return user; }, }), ], }); chap3-1의 auth.ts 코드를 복붙해도 에러가 해결되지 않아 무엇이 원인인지 모르겠습니다. 도움을 주신다면 정말 감사하겠습니다...
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
assertThat이 보이지 않습니다. ㅠㅠ
안녕하세요? 강의 잘 듣고 있습니다.강의를 들으면서 진행하고 있는데, assertThat을 import 할 수가 없고, 대신 import org.junit.jupiter.api.Assertions.assertEquals 이런 식으로 assertEquals가 import 되는데 혹시 이유를 알 수 있을까요? ㅠㅠ gradle은 pdf에서 제공해주신 내용을 그대로 사용하고 있습니다.감사합니다!plugins { id 'org.springframework.boot' version '2.6.8' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'org.jetbrains.kotlin.jvm' version '1.6.21' } group = 'com.group' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' repositories { mavenCentral() } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' runtimeOnly 'com.h2database:h2' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() } compileKotlin { kotlinOptions { jvmTarget = "11" } } compileTestKotlin { kotlinOptions { jvmTarget = "11" } }
-
해결됨실전! Querydsl
h2 연결 문제
안녕하세요 querydsl 강의 초반에 환경설정 도중 기본 엔티티 생성 후 Test 하는 부분에서 h2 연결시 지정한 url 이 아니라 자꾸 인메모리 방식으로 연결이 되고 있어 글을 남기게 되었습니다. 사용하고 있는 버전은 다음과 같습니다.java : 17 spring boot : 3.2.1Ide : intellij edu 기타 설정 내용application.yml 파일 및 프로젝트 폴더 구성 h2 실행 및 console 접속은 정상적으로 되고 있습니다. h2 서버를 꺼도 연결되지 않는다는 오류가 나지 않고, show_sql 값등을 변경해도 반영되지 않는 걸 보니 application.yml 에 지정한 내용을 못 읽어오는 것 같아 File > invalidate cache test 폴더 하위에 resources 폴더 및 application.yml 추가 와 같이 시도해보았으나 문제 해결에 실패하였습니다. 혹시 이와같은 문제에 대해 해결방안이 있을까요? 검색해봐도 h2 메모리연결 방법 혹은 h2 접속 자체가 안되는 경우에 대해서만 있네요. 답변 부탁드립니다 🙂
-
미해결대세는 쿠버네티스 [초급~중급]
vagrant up 에러
==> vagrant: A new version of Vagrant is available: 2.4.0 (installed version: 2.3.4)!==> vagrant: To upgrade visit: https://www.vagrantup.com/downloads.htmlBringing machine 'k8s-master' up with 'virtualbox' provider...Bringing machine 'k8s-node1' up with 'virtualbox' provider...Bringing machine 'k8s-node2' up with 'virtualbox' provider...==> k8s-master: Box 'rockylinux/8' could not be found. Attempting to find and install... k8s-master: Box Provider: virtualbox k8s-master: Box Version: >= 0==> k8s-master: Loading metadata for box 'rockylinux/8' k8s-master: URL: https://vagrantcloud.com/rockylinux/8==> k8s-master: Adding box 'rockylinux/8' (v9.0.0) for provider: virtualbox k8s-master: Downloading: https://vagrantcloud.com/rockylinux/boxes/8/versions/9.0.0/providers/virtualbox/unknown/vagrant.boxDownload redirected to host: dl.rockylinux.org k8s-master: k8s-master: Calculating and comparing box checksum...==> k8s-master: Successfully added box 'rockylinux/8' (v9.0.0) for 'virtualbox'!There are errors in the configuration of this machine. Please fixthe following errors and try again:Vagrant:* Unknown configuration section 'disksize'.* Unknown configuration section 'vbguest'.이런 에러가 발생합니다... 어떻게 해결하나요?
-
미해결파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
Api이용중에오류가발생했네요
X-Naver-Client-Id하고 X-Naver-Client-Secret은 틀린점은없는거같은데 왜오류가 날까요 비밀번호는 재발급예정입니다
-
해결됨쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2
Helm과 Kustomize 비교하며 사용하기 (1/2) helm 설치 부분 질문입니다.
안녕하세요, 강사님 강의 잘 듣고 있습니다.수강 중 카페에 올라온 스크립트로헬름이 설치가 안돼서[root@cicd-server ~]# curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3[root@cicd-server ~]# chmod 700 get_helm.sh[root@cicd-server ~]# ./get_helm.sh이렇게 설치했습니다.그리고 인텔리제이도 우여곡절 끝에 연결해서 강의랑 똑같은 실습 환경을 만들었습니다.(바라는 점이 있다면, 인텔리제이 연결하는 법도 카페 글에 추가적으로 설명해주시면 너무 감사할 것 같습니다.)강의중 샘플파일이 있던데 제 실습환경에는 존재하지 않더라구요젠킨스로 2221 빌드하면 생기는 것인가요?helm부터 실습을 따라가기가 벅차네요..참고로 실습환경은 맥 m2입니다. 아참, 인텔리제이에서 values.yaml를 수정하는데 적용이 안되는 것 같습니다. 이 부분은 어떻게 처리해야 될까요?
-
미해결
포트폴리오 질문
현재 포트폴리오를 작성 중인데 어렵네요.. PDF로 이력서 & 포트폴리오 만들고 노션으로는 이력서와 포트폴리오를 하나로 합쳐서 만들고 있습니다.포트폴리오의 경우 프로젝트의 설명은 리드미나 Velog에서 볼 수 있게 하고 PDF나 노션에서는 API swagger 한것과 정보 구조도, 프로젝트의 모든 화면 설계를 번호로 해서 옆에 주석처럼 추가하는 식으로 했습니다. 프로젝트의 사용기술도 리드미와 Velog로 꾸몄구요. 그리고 리드미의 경우 너무 길어서 안 볼경우를 대비해서 각 기능을 동영상 형태로 만들어 놨습니다. 이런식으로 해도 되나요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원 리포지토리 테스트 케이스 작성 강의 중 findByName() 질문
"회원 리포지토리 테스트 케이스 작성" 강의 중 12분쯤 findByName()을 실행할 때 findAll()에서 만든 member1,member2가 불러와져서 테스트를 통과하지 못하고 하셨는데 이 부분이 이해가 잘 가지 않습니다.findByName()의 assertThat(result).isEqualTo(member1); 부분에서 예외가 발생합니다. 그런데 왜 첫번째 줄 Member member1 = new Member();에서 실행을 멈추지 않고 실행이 계속되나요?이미 같은 변수이름(findAll()에서 만들어진 member1, member2)이 있음에도 불구하고 예외가 발생해야 맞는데 왜 정상적으로 실행되어서 assertThat(result).isEqualTo(member1);까지 내려가서 예외가 발생하나요? findByName()의 assertThat(result).isEqualTo(member1);가 각각 어떤 객체인지 헷갈립니다.member1은 findAll()에서 만들어진 것이고, result는 findByName()의 첫번째 줄에서 만들어진건가요? 이것도 이해가 가지 않는게 clear()가 없는 상태에서 member1을 또 만들면 이름이 중복되는데 왜 예외가 발생하지 않나요?? package hello.hellospring.repository; class MemoryMemberRepositoryTest { MemoryMemberRepository repository = new MemoryMemberRepository(); @Test public void findByName() { Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); Member result = repository.findByName("spring1").get(); assertThat(result).isEqualTo(member1); } @Test public void findAll() { Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); List<Member> result = repository.findAll(); assertThat(result.size()).isEqualTo(2); } } 그리고 memberService.join(member1);package hello.hellospring.service; class MemberServiceTest { MemberService memberService = new MemberService(); @Test void 회원가입() { //given Member member = new Member(); member.setName("spring"); //when Long saveId = memberService.join(member); //then Member findMember = memberService.findOne(saveId).get(); assertThat(member.getName()).isEqualTo(findMember.getName()); } @Test public void 중복_회원_예외() { //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)); assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } }회원 서비스 테스트 강의에서도 비슷한 질문이 있습니다. 11분 50초 경에 memberService.join(member1);에서 예외가 발생한다고 하셨는데 그 이유를 잘 모르겠습니다. member1, member2의 이름을 spring으로 만들고나서 member1을 join할 때는 레포지토리에 아무런 값이 없으므로 예외가 발생할 이유가 있나요? 오히려 assertThrows(IllegalStateException.class, () -> memberService.join(member2)); 에서 중복으로 인해 예외가 발생해야하지 않나요?
-
해결됨Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 2부
혹시 다음강의부터는 ppt 한번에 묶어서 올려주실수있나요?
일일히 다운받으려니까 힘들기도하고 자료들이 피피티 파일 하나에 다 담겨있는게 나중에 복습하기도 편할거같아서요
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
아니 수업중에 뭘 먹고 있으면 어떡해요;
어이없네.. 쿰척쿰척 먹는걸 왜 돈낸 강의에서 들어야함;; 진짜 짜증나네진짜
-
미해결[코드팩토리] [초급] 8시간만에 끝내는 코드팩토리의 Typescript 완전정복 풀코스
질문이 있습니다.
type MultiplyTwoNumbers = (x: number, y: number) => number; function multiplyTwoNumbers (x, y): MultiplyTwoNumbers{ return x * y; } const multiplyTwoNumbers: MultiplyTwoNumbers = (x, y) => x * y;안녕하세요 선생님함수선언식은 파라미터의 타입 유추가 안되고 함수표현식은 타입 유추가 되는 이유가 무엇인가요?
-
미해결코드로 배우는 React with 스프링부트 API서버
Recoil 현업에서 사용해도 되나요?
Recoil이 아직 실험적 api 단계로 아는데 현업에서 써도 될정도로 안정적인가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
V5 save에서 500오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]회원 가입 페이지와 회원목록은 잘 나오는데 save에서 계속 500 오류가 뜨네요 ㅠㅠ 강의랑 똑같이 따라친거같은데 왜 오류가 발생하는지 모르겠습니다.오류코드는 이렇게 뜹니다.2024-01-11T19:21:07.392+09:00 ERROR 31571 --- [nio-8080-exec-2] a.c.c.C.[.[.[.[frontControolerServletV5] : Servlet.service() for servlet [frontControolerServletV5] in context with path [] threw exception
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
중복과 별도 클래스 선언
안녕하세요! 설계와 구현 부분과 관련하여 궁금한 점이 있습니다!중복이란 여러 클래스에서 반복적으로 나타나는 코드 덩어리라고 보면 되나요?중복되는 부분을 묶어서 별도의 클래스로 묶는건가요?클래스로 묶으면 유지보수하기가 더 좋아져서 그런건가요?감사합니다!
-
미해결따라하며 배우는 HTML, CSS
grid-template-columns에 대하여
함께 코드로 이해하는 부분에서, 강사님과 똑같이 코드를 작성했는데 아래 사진처럼 그리드가 만들어집니다. 맨 윗 줄은 auto의 개수만큼 정렬이 잘 되는데, 두 번째 줄부터는 세로로 일렬로 나열됩니다. 어떻게 해결하면 좋을까요??
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드의 시간 복잡도에 대해 궁금합니다!
function solution(str, t) { let answer; const counts = {}; const formatted = [...str]; formatted.forEach((char, i) => { if (counts[char]) { return counts[char].push(i); } counts[char] = []; counts[char].push(i); }); const tIndexs = counts[t]; answer = formatted.reduce((store, cur, i) => { const tmp = []; tIndexs.forEach((index) => { tmp.push(Math.abs(index - i)); }); store.push(Math.min(...tmp)); return store; }, []); return answer.join(' '); } let str = 'teachermode'; console.log(solution(str, 'e')); 입력값의 크기 N마다 tIndex만큼 반복하니까 O(N^2) 인지아니면 O(N)의 시간복잡도를 갖는지 궁금합니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
H2 DB 테스트 코드 실행시 무한 로딩 연결 안됨
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.테스트 코드 실행시 무한 로딩 미해결 3일차 해결 방법이 필요합니다.package hello.jdbc.connection; public abstract class ConnectionConst { public static final String URL = "jdbc:h2:tcp://localhost/~/study/test"; public static final String USERNAME = "sa"; public static final String PASSWORD = "1318!"; }
-
미해결[웹 개발 풀스택 코스] 순수 자바스크립트 기초에서 실무까지
CRUD
저는 왜 NAME과 COMPANY가 두번이나 나올까요.?아무리 생각해도 모르겠습니다.
-
미해결습관부터 바꿔주는 Node.js & Express 기초
해당 강의 깃허브 주소나
해당 강의 깃허브 주소나디스코드 주소는 어디있나요?
-
미해결스프링 핵심 원리 - 기본편
특정 타입으로 조회 시 빈 이름을 지정하는 테스트 코드 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]수업 내용 중에서 스프링 빈 조회 테스트 코드를 짤 때,동일한 타입이 둘 이상인 경우에는public class ApplicationContextSameBeanFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SameBeanConfig.class); @Test @DisplayName("타입으로 조회 시 같은 타입이 둘 이상 있으면, 빈 이름을 지정하면 된다.") void findBeanByName() { MemberRepository memberRepository = ac.getBean("memberRepository1", MemberRepository.class); assertThat(memberRepository).isInstanceOf(MemberRepository.class); } }인스턴스를 비교할 때 인터페이스인 MemberRepository.class를 사용해줬는데,상속 관계 설명 시에는public class ApplicationContextExtendsFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); @Test @DisplayName("부모 타입으로 조회 시 자식이 둘 이상 있으면, 빈 이름을 지정하면 된다.") void findBeanByParentTypeBeanName() { DiscountPolicy rateDiscountPolicy = ac.getBean("rateDiscountPolicy", DiscountPolicy.class); assertThat(rateDiscountPolicy).isInstanceOf(RateDiscountPolicy.class); } }구체화 타입인 RateDiscountPolicy.class로 인스턴스를 확인한 이유가 뭔지 궁금합니다.