묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
UPROPERTY 로 리플렉션에 등록한 언리얼 오브젝트들만이 가비지 컬렉터의 관리를 받게되나요?
11:32 부분의 PPT를 보고 궁금한 점이 있습니다. 생성한 언리얼 오브젝트들은 GUObjectArray 에 들어가고, 가비지 컬렉터는 이곳의 언리얼 오브젝트들을 관리합니다. PPT를 보면, UPROPERTY로 참조된 언리얼 오브젝트 들은 회수되지 않는다고 명시되어있는데, 반면 언리얼 오브젝트지만 리플렉션 시스템에 등록하지 않은 객체라면 GUObjectArray 에 들어가지 않고, 가비지 컬렉터의 관리대상에서도 벗어나나요? 만약 가비지컬렉터의 관리대상이 아니라면 raw pointer 처럼 직접 메모리를 관리해야하는지도 궁금합니다
-
해결됨[임베디드 입문용] 임베디드 개발은 실제로 이렇게 해요.
안녕하세요. 제 노트북이 st-link 드라이버를 인식을 못하는것 같습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 자주 묻는 질문에 혹시 답이 있을 수 있어요.- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.제 노트북이 lenovo e15 인데 usb 허브를 연결한다음 st link와 보드를 usb 허브에 연결하면장치관리자에서 인식을 못합니다 ㅠ 자꾸 장치연결 실패라고 하네요. 드라이버까지 설치햇는데 왜그런지 잘모르겟습니다.이상하게 제 pc에서는 잘됩니다... ㅠ 혹시 원격으로도 도움을 받을수있을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
환결설정 강의 원 그리기
현재 맥으로 강의를 듣고 있어서 비쥬얼스튜디오 대신 vscode로 수업을 따라가고 있습니다.이런저런 방법으로 고쳐보려해도 터미널 창에 수업과 같이 같은 위치에 동그라미가 재생산(?)되지 않고,아래줄로 무한정 그려지네요 ㅠ 저와 같이 vscode로 수업 들으시는 분은 안계신가요?...이거 해결안되면 파트2 강의는 그냥 눈으로만 봐야할까 합니다..
-
미해결Airflow 마스터 클래스
docker container network 관련 질문
안녕하세요 강사님 강의 잘 보고 있습니다.spark 관련된 질문을 드려도 될까요..?도커에 spark 컨테이너를 띄워서 airflow의 bash operator로 spark-submit을 해보려 하는데 로그가 다음과 같이 나오면서 spark-submit이 안됩니다.compose 파일도 network 설정을 다시했고,docker network inspect 로 확인해보니 잘 연결된 것이 확인됐습니다.spark submit도 master container 내부에서 잘 실행이되는 상황입니다.shell 파일을 이런식으로 작성한다고 해서 airflow dags로 spark-submit을 할 수 있는건 아닌가요 ?#!/bin/bash script=$1 echo "${script}" echo "start spark submit with bash operator" spark-submit \ --master spark://spark-master:7077 \ ${script}
-
해결됨[2025 리뉴얼]플러터플로우로 코딩 없이 한달 안에 앱 만들기
firebase 연동 permission 오류
아래와 같이 오류가 떠서 기존 질문 및 노션 페이지 참고해서 진행했는데Firebase TOS를 누르고 생성을 시도하면 위와 같은 처음 보는 permission 오류가 뜹니다ㅠㅠ test-wnbqxk가 GCP 프로젝트 ID인데 권한이 없다고 나와서 IAM을 확인해봤습니다.관리자 권한도 잘 들어가 있는것 같은데 해결 방법을 모르겠네요... 도와주세요!!
-
미해결C#.Net 0.5년차~3년차(파트2)
6강 서버 연결해제 시 NullException
Client의 연결해제 시 위 이미지 부분에서 null exception이 발생합니다.
-
해결됨350개의 개인 앱을 만들어 월급의 7배 수익을 달성한 방법
애드몹 광고소스 추가 여부
안녕하세요! 강의 너무 잘 듣고 있습니다.애드몹 광고소스에 대한 내용이 없어서 추가 질문 드려봅니다. 혹시 애드몹을 붙일 때, eCPM을 높이기 위해서 다른 광고소스도 붙이는 작업을 하시나요?만약 하신다면 어떤 광고소스를 주로 붙이시나요?만약 안하신다면 그 이유는 무엇일까요?
-
미해결
블록설정된 텍스트를 변수에 할당하기
안녕하세요 일코님늘 친절한 답변 감사합니다 ^^ # 블록 텍스트 추출 def extract_text_from_block(): hwp.InitScan(range=0xff) # 0xff <<선택된 범위 내에서 검색 _, text_blokced = hwp.GetText() # 텍스트만 추출 hwp.ReleaseScan() # 스캔을 해제. print(f"text_blokced: {text_blokced}") return text_blokced # 이경우, 해당 target이 text에 포함되어있으면 True, 아니면 False를 반환. 현재 블록 설정된 텍스트를 변수에 할당할때 text = extract_text_from_block(block_text) 이런식으로 하는데요.현재 이 방법을 썼을 때, 한줄 범위에 대해서는 이게 잘 되는데,,여러줄을 블록한 상태로 이 함수를 실행하면print(text) 했을 때,'\r\n'이렇게만 나오네요.. 혹시 뭐가 잘못된걸까요?그리고 블록텍스트를 변수에 할당하는 더 좋은 방식이 있을까요?
-
해결됨Readable Code: 읽기 좋은 코드를 작성하는 사고법
요구사항이 추가 될 때마다 하나의 일급 컬렉션을 재사용 하나요? 아니면 새롭게 만들어주나요?
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요 우빈님!프로젝트를 진행중인데, User 라는 엔티티가 있고, List<User> 를 감싸는 Users 라는 일급 컬렉션을 만들었습니다. import java.util.Collections; import java.util.List; import java.util.Optional; /** * * List<User>를 감싸는 일급 컬렉션 * */ public class Users { private final List<User> users; private Users(List<User> users) { this.users = Collections.unmodifiableList(users); } public static Users from(List<User> users) { return new Users(users); } public List<User> getUsers() { // return new ArrayList<>(users); return Collections.unmodifiableList(this.users); } // 메소드 명으로 hasNotEnoughUsers()? hasNotBothSenderAndReceiver()? public boolean hasNotEnoughUsers() { return users.size() <= 1; } public Optional<String> getSlackIdById(Long userId) { return users.stream() .filter(user -> user.getId().equals(userId)) .findFirst() .map(User::getSlackId); } } 현재 사용 용도는 slack 메시지를 보내기 위한 발신자, 수신자의 정보를 가져와서 처리하는 용도인데요. 문득 든 생각이 지금 용도 말고 새로운 용도로 일급 컬렉션을 써야 한다면, 예를 들어 배송 담당자의 정보를 가져와서 처리 하는 용도가 필요해졌고, 일급 컬렉션을 적용해야 한다면, 지금의 Users 일급 컬렉션의 메서드를 추가해서 사용하는 건지, 새롭게 DeliveryStaffUsers 를 만들어서 사용하는건지, 우빈님께서는 어떻게 사용하시는지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
JSP파일 문제
jsp 파일이 강의 처럼 뭔가 안뜨고 자바 클래스 import도 안했는데 빨간색이 안뜨네요. 단순히 입력만되는 창이 됐는데 어떻게 해결할 수 있을까요?
-
해결됨자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
확장함수 스타일 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강사님 9:54쯤에 질문이 있습니다val 또는 fun으로 확장함수를 만들 수 있는데..두가지 방식의 차이점이 있나요?또는 이펙티브 코틀린 등등에서 더 선호하는 방식이 있는지, 안티패턴이나 best practice가 있다면 알고 싶습니다.차이점이 있다면 확장함수에 val을 사용한 경우 custom getter방식으로 구현되고 호출부에 ()가 없는 반면, fun키워드를 사용한 경우에는 get()이 사용되지 않고 호출부에 ()를 해줘야 되는 것 같습니다 1번방식: 강의에서 나온대로 val_ 정의부:val List<Fruit>.samePriceFilter: List<Fruit> get() = this.filter(Fruit::isSamePrice)_ 호출부:val samePriceFruits2 = fruitsInList.flatMap { it.samePriceFilter }2번방식: fun으로 사용_ 정의부:fun List<Fruit>.samePriceFilter(): List<Fruit> { return this.filter(Fruit::isSamePrice) }_ 호출부:val samePriceFruits2 = fruitsInList.flatMap { it.samePriceFilter() }
-
미해결실무자를 위한 구글애널리틱스(GA4+GTM) 활용법(25년 Update)
전환율 관련 문의
구매 관련 세션 키 이벤트 비율과 사용자 세션 키 이벤트 비율 수동으로 확인할 수 있는 방법 문의 드립니다. 탐색 보고서에서 만들어 보려고 하니 전체 이벤트가 모두 반영 되어, 기본 보고서에서 처럼 이벤트를 선택하여 전환율을 확인할 수 없었습니다. 기본 보고서에서 바로 확인할 수 있는 수치가 아니어, 수동으로 측정 항목 기입하여 계산해야 할 것 같은데요. 분모는 측정항목으로 세션수와 총사용자로 두면 될 것 같은데 분자인 구매 완료 세션수와 구매한 사용자를 어떻게 적용하면 될가요? 별도의 이벤트 세그먼트를 만들어서 보는게 맞을지.. 하여 문의 드립니다.
-
미해결스프링 핵심 원리 - 기본편
수동 빈과 자동 빈이 충돌될 때 로그에 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오버라이딩을 원하면 추가 옵션을 세팅하라고 나와있습니다. 이 경우에는 오버라이딩이 된게 아니고 스프링이 중단되었다고 판단됩니다. 혹시 강의에서는 추가로 옵션을 세팅한건 지 아니면 제가 잘못 코드를 작성한건 지 궁금합니다.
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
CSR, SSR 렌더링 방식 문의
안녕하세요~설명해주신 CSR, SSR 렌더링 강의보고 CSR, SSR 렌더링 방식에 대해 궁금한점 두가지 남겨봅니다!(유사한 질문이 있는지 찾아봤는데 글이 많아서 찾질 못해서 중복 감안하고 올려봅니다🙏🏻) 질문1CSR은 bundle js 다운로드 레이턴시 만큼 FCP가 느리고 반대로 SSR은 bundle js 다운로드 레이턴시만큼 CSR보다 FCP가 빠르다고 이해했는데요. TTI 기준으로 보면 결국 CSR, SSR모두 차이가 없는게 맞을까요? (gzip압축 해제, js parse, hydration등의 처리에서 드는 비용의 차이가 있겠지만 이런 부분들은 크게 영향을 주진 않을거라고 생각하여 문의드립니다. 혹시 두 방식에 영향을 미치는 큰 요소가 있다면 그 부분도 고려해서 알려주시면 감사하겠습니다.) 질문2CSR의 장점으로 초기 렌더링이 느리고 이후에 페이지 이동시 빠르게 화면을 그릴 수 있다고 하셨는데요, CSR에서 초기 렌더링의 속도를 높이기 위해 코드 스플리팅 전략을 취할 수 있을거 같습니다. 이렇게 CSR에서 코드 스플리팅 방식을 취한 경우 페이지 이동시 결국 bundle js 다운르드 레이턴시가 또 발생할거 같은데요. prefetch, preload같은 전략을 취하지 않고 코드스플리팅만 적용한 CSR방식은 단점만 남는 렌더링 전략이 맞을까요? 유일한 장점은 CSR이지만 코드 스플리팅을 했기 때문에 초기 FCP가 조금 빠르다정도일거 같은데 이해한게 맞는지 문의드려봅니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
강의스크립트
강의 자막(스크립트) 다운로드 받을 수 있을까요?
-
해결됨AWS로 쉽고 빠르지만 아주 견고한 서버 환경을 구축하는 방법
로드밸런서 HTTP/HTTPS 리스너 규칙 설정 질문
안녕하세요 강사님! 항상 강의로 재미있게 공부하고 있습니다! 다름이 아니라 ACM으로 SSL 인증서를 적용하면 로드밸런서의 리스너 규칙을 HTTPS 만 허용하고 HTTP 리스너는 404 응답을 보내게 설정해도 되는 걸까요?로드밸런서 리스너 규칙HTTPSHTTP 이렇게 하려는 이유는 기존 HTTP 리스너만 있는 상태에서 웹소켓으로 통신을 하려고 하는데, 프론트에서 HTTPS로 웹소켓 연결 요청을 보내게 되면, "Handshake failed due to invalid Upgrade header: null" 이런 에러가 뜨더라고요!그래서 찾아본 결과 ALB가 리버스 프록시로서 HTTP 요청을 HTTPS로 리다이렉션 하는 과정에서 WebSocket upgrade 헤더 손실이 발생한다고 하더라고요!(이게 맞는 내용일까요..?) 아직 에러를 해결하는 중이라 이게 정답인지 아닌지는 아직 잘 모르겠지만.. 이런 문제로 HTTPS 리스너를 추가해 보려고 합니다! 그리고 하는 김에 보안강화를 위해 HTTP는 404응답, HTTPS 요청만 허용해 보려고 하는데 이렇게 해도 되는 걸까요? + 추가로 이렇게 되면 ALB 보안그룹의 인바운드를 HTTPS를 허용하면 되는 거겠죠?!
-
미해결이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
오브젝트 소멸 관련해서 질문있습니다
안녕하십니까 교수님 다름이 아니고 발행-구독 패턴의 주체인 MyGameInstance의 Student 오브젝트 선언 부분에서 궁금한 점이 생겨서 질문 드립니다.25:47초 쯤에서 구문 실행시 아래의 오브젝트는 자동 소멸된다고 하셨습니다. 따라서 Outer가 필요 없다고 하셨고, outer가 필요없는 이유는 Student 객체가 주체에서 관리될 이유가 없기 때문이라고 이해했습니다. UStudent* Student1 = NewObject<UStudent>(); UStudent* Student2 = NewObject<UStudent>(); UStudent* Student3 = NewObject<UStudent>();근데 '구문 실행'시 자동 소멸이 된다는게 이해가 되지 않습니다. 구문 실행시가 아닌 해당 함수에서의 작업을 모두 마친 후 소멸하는게 아닌가요?아니면 student객체들이 엔진에 레퍼런스되지 않기 때문에 선언 후 소멸된다는 의미에서 저렇게 말씀하신걸까요? 혹시 제가 오브젝트 관련해서 잘못 이해했거나 부족한 지식이 있는거라면 지적해주신다면 정말 감사합니다.
-
미해결Next + React Query로 SNS 서비스 만들기
Next-Auth 관련해서 질문이 있습니다.
백엔드 취준생인데 프론트를 좀 할 일이 있어서 강의 듣고 있는데 Next-Auth 부분이 이해가 쉽지 않네요... 몇 가지 질문 드리고자 합니다.1. session 객체에 어떤게 담기는건지 잘 모르겠습니다.export default async function Home() { const session = await auth() if (session?.user) { redirect('/home') return null } return ( <Main/> ); }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.NEXT_PUBLIC_BASE_URL}/api/login`, { method: 'POST', headers: { "Content-Type": "application/json", }, body: JSON.stringify({ id: credentials.usename, password: credentials.password, }) }) if (!authResponse.ok) { return null } const user = await authResponse.json() return { email: user.id, name: user.nickname, image: user.image, ...user } } }) ], })Home 에서 auth() 를 통해 불러온 session 객체에 CredentialsProvider 가 리턴한 객체가 담기는건가요?그런데 그렇다고 하기엔 객체에 user 라는 속성이 없어서 아닌 것 같기도 해서 아닌 거 같다는 생각도 듭니다. export default function Login() { const router = useRouter() const { data: session } = useSession(); if (session?.user) { router.replace('/home') return null } router.replace("/i/flow/login") return ( <Main /> ) }마찬가지로 여기서도 session 에 어떤게 담기는지 잘 모르겠습니다 ㅠㅠ auth() 로 리턴한 세션과 같은 객체가 담기는 것 같긴 한데 도대체 session 에 뭐가 담기는지 파악이 쉽지 않네요 ㅋㅋㅋ그래서 session 객체의 user 를 클릭해서 들어가보니 다음과 같은 interface 가 나오네요.export interface DefaultSession { user?: User expires: ISODateString }auth/core 에 있는 인터페이스인 것 같은데 이 인터페이스가 어느 시점에 등장(?) 하는 건지 잘 모르겠습니다.2. 지금 진행하는 로그인 방식은 백엔드에 로그인 관련 API 가 있다고 가정하고 진행하는 것으로 저는 이해를 했는데요export const handlers = [ http.post(`${baseUrl}/api/login`, () => { console.log('로그인'); return HttpResponse.json(User[1], { headers: { 'Set-Cookie': 'connect.sid=msw-cookie;HttpOnly;Path=/' }, }) }), http.post(`${baseUrl}/api/logout`, () => { console.log('로그아웃'); return new HttpResponse(null, { headers: { 'Set-Cookie': 'connect.sid=;HttpOnly;Path=/;Max-Age=0' } }) }), http.post(`${baseUrl}/api/users`, async ({ request }) => { console.log('회원가입'); // return HttpResponse.text(JSON.stringify('user_exists'), { // status: 403 // }) return HttpResponse.text(JSON.stringify('ok'), { headers: { 'Set-Cookie': 'connect.sid=msw-cookie;HttpOnly;Path=/' }, }); }) ];이게 지금 api 를 mocking 한 건데 여기에 요청을 보내고 있으니까요.그러면 이 API 에서 리턴한 유저(User[1]) 가 세션에 담기는 것인지 궁금하네요. (이것도 1번 질문하고 좀 연관이 되네요) 그러면 만약에 백엔드 API 가 로그인 성공했을 때 http body 에 별도의 객체를 리턴하지 않으면 어떻게 되나? 이런 궁금증도 생깁니다.3. 그리고 로그아웃을 할 때는 왜 로그아웃 API 에 따로 요청을 보내지 않고 signOut 함수만 사용하는지 궁금합니다. 이것만 사용해도 쿠키가 삭제가 돼서 그런 것인가요? 그러면 백엔드 서버에 별도의 로그아웃 API 를 만들지 않아도 되는 것인지 궁금합니다. 장문의 질문글이 된 거 같은데, 뭔가 Next-Auth 를 처음 접하다보니 사용법이 좀 익숙치가 않네요. AI 에 물어보거나 구글링을 해 봐도 좀 파악이 쉽지 않아 여기에 질문 남겨봅니다.감사합니다.
-
미해결CSS Flex와 Grid 제대로 익히기
menu 아이템 반응형 변경
@media (max-width: 310px) { .menu { flex-wrap: wrap; } .menu-item { width: 100%; flex: 1 auto; } } 크기가 좁아질때 일자로 배치를 해봤는데 메뉴 아이템에 호버가 걸려있어서 사이즈가 작아지는 경우가 생겨서 flex 로 사이즈 변경이 안되게 해줬는데 저런 경우에 똑같이 menu-item:hover 이런식으로 접근하는게 맞을까요?
-
해결됨딥러닝을 활용한 자연어 처리 (NLP) 과정 (기초부터 ChatGPT/생성 모델까지)
self-attention에서 Wq, Wk, Wv weight matrix 학습과정 질문드립니다.
self-attention에 등장하는 Wq, Wk, Wv weight matrix들에 대한 학습과정 질문입니다. attention score계산 시 query vector에 대해(예를들어 강의에서 설명하신 student vector) key vector들(am, a, student 벡터)의 attention score가 낮게 나온다면, 그게 loss가 되는건가요? 예를들어, Wq, Wk, Wv weight들이 충분히 학습되지 않았을 때를 생각해보면, "I" vector가 Query vector일 때, "student" key vector의 attention score가 가장 높게 나오지 않고 "am" key vector와 attention score가 가장 높게 나올 경우엔 loss가 발생하고 "student" key vector와의 score가 높게 나오도록 Wq, Wk, Wv가 업데이트 된다고 이해하면 될까요?(I와 student는 word embedding에 의해 유사성이 있다고 판단하고)