묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
오류
아직 사용하기 전에 변수들이 있는 경우 아래 사진과 같이 표시되는데 오류가 발생하지 않도록 설정은 어떻게 하나요?
-
해결됨[임베디드 입문용] 임베디드 개발은 실제로 이렇게 해요.
(해결)업그레이드 질문
안녕하세요, st link를 교환받은 학생입니다. st link와 연결하여 위의 프로그램을 통해 업그레이드 진행은 성공적으로 되었습니다.이후 st link와 보드를 연결하고 ide내부에서 업그레이드를 진행(HAL_INIT();디버깅 오류가 나서 업데이트 창이 뜸)하였으나위와 같은 오류가 떴습니다.보드에도 따로 usb케이블을 연결하여 전원을 공급하여 업그레이드를 진행하였으나 2번의 오류가 다시 발생합니다.** st link와 보드를 연결시 보드에 불이 들어오지 않습니다.이후 보드에 휴대폰 충전 어댑터를 이용해 전원을 공급하면 일시적으로 빨간불이 들어오나 이내 곧 다시 꺼집니다.더 진행해봐야 할 사항이 있을까요? 해결하였습니다.고속 충전용 휴대폰 어댑터를 사용해서 보드에 전원이 바로 꺼지는 것인가 싶습니다.낮은 출력의 어댑터를 이용하여 보드에 전원 공급시 빨간불이 지속적으로 들어와있는 상태였고3.IDE에서 기존 설정해둔 폴더와 파일을 삭제 후 다시 처음부터 프로젝트를 만들었습니다. 더불어 경로상에 한글이 없도록 지정해두었습니다. 위 3가지를 모두 적용하였더니 정상적으로 HAL_Init()에서 걸렸습니다. 이것이... 임베디드의 길인가요,, 추가질문 - 보드에 별도 전원을 연결하지 않을시 보드에 LED가 들어오지 않는다면 실습하는 동안은 계속 보조 전원을 통해 전원을 공급해야하나요?
-
해결됨쉬운 모바일 테스트 자동화 시작하기 : Appium Studio
가상 Device에서 App 설치시 생기는 에러 팝업 해결 문의
Android studio 에서 가상 device를 설정 한뒤 Appium과 연결 한 후 Experibank를 install 해보려고하는데 에러 팝업이 발생하여 Android studio의 SDK Manamger > API LEVEL 확인시 34, 24, 14 다 체크표시로 확인 되는데 제가 여기서 추가적으로 설치하거나 확인 해야 하는게 있을까요? 에러팝업 문구 내용: The application installation on the device sdk_gphone 16k_x86_64 has failedfailed to install application:INSTALL_FAILED_DEPRECATED_SDK_VERSION:App package must target at least SDK Version 24, but found 14
-
미해결3D 모델링 입문을 위한 라이노(Rhino) '꿀팁' Part.2
라이노 저장
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님 수업하다가 중간에 라이노 수업 듣다가 라이노에서 파일-저장 하게되면 전에 사용하던 뒤로가기나 앞으로 가기는 당연히 안되는게 당연한거겠죠?파일을 저장하고 다시 실행하였는데 돌출을 서피스 방향을 양쪽으로 하고 싶은데 ctrl+z 눌러서 다시 전으로 돌아가려고 하니 실행 취소할 내용이 없다고 하는데 처음부터 그러면 다시 만들어야될까요?
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
name을 넣지 않을 경우 input에 입력되지 않는 이유
안녕하세요 강사님수업 도중에 input 태그에 name을 넣지 않을 경우 아무런 입력이 되지 않는걸 확인했습니다.그래서 onChange 함수에서 에러가 발생해서 이벤트가 도중에 끊겼을 것이라고 예상하고 try catch로 감았는데도 exception이 발생하지 않더라구요.혹시 왜 입력이 되지 않는 것인지 알 수 있을까요?감사합니다~~! import { useState } from "react"; const Register = () => { const [input, setInput] = useState({ name: "", birth: "", country: "", bio: "" }) const onChange = (e) => { try { setInput({ ...input, [e.target.name]: e.target.value }) } catch (err) { console.log(err); } // setInput({ // ...input, // [e.target.name]: e.target.value // }) } //const onChangeName = (e) => { // setInput({ // ...input, // name: e.target.value // }) //}; //const onChangeBirth = (e) => { // setInput({ // ...input, // birth: e.target.value // }) //}; //const onChangeCountry = (e) => { // setInput({ // ...input, // country: e.target.value // }) //}; //const onChangeBio = (e) => { // setInput({ // ...input, // bio: e.target.value // }) //}; return ( <div> <div> <input // name="name" value={input.name} //onChange={onChangeName} onChange={onChange} placeholder={"이름"} /> {input.name} </div> <div> <input name="birth" value={input.birth} //onChange={onChangeBirth} onChange={onChange} type="date" /> {input.birth} </div> <div> {/* <select value={input.country} onChange={onChangeCountry}> */} <select value={input.country} name="country" onChange={onChange}> <option value=""></option> <option value="kr">한국</option> <option value="us">미국</option> <option value="uk">영국</option> </select> {input.country} </div> <div> {/* <textarea value={input.bio} onChange={onChangeBio} /> */} <textarea value={input.bio} name="bio" onChange={onChange} /> {input.bio} </div> </div> ); }; export default Register;
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ResponseStatusException 질문 (강의 13분 54초)
[질문 내용]ResponseStatusException에 세개의 파라미터가 담기는데, 세번째 파라미터가 무엇인지 정확히 이해가 가지 않습니다. 실제로 /api/response-status-ex2가 호출 되었을 때, IlleagalArgumentException이 발생한다면,그 대신에 HttpStatus.NOT_FOUND(404)를 내보내주고, "error.bad"를 메시지로 내보내준다는 뜻이 맞나요?
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
몬스터 스폰 관련 질문
안녕하세요 강사님.강의 잘 보고 있습니다.지금 섹션 4. Multiplay의 몬스터 스폰 영상을 보고 있는데, Spawner 로직과 관련하여 궁금한 점이 있어 글을 남기게 되었습니다.영상 중에 강사님께서 “상대방의 몬스터는 위쪽에, 자신의 몬스터는 아래쪽에 나오는 것을 볼 수 있다.”라고 설명해주셨는데요,제가 직접 클라이언트 쪽 스폰 로직을 수정하여 테스트해본 결과, 호스트와 클라이언트 각각에서 상대방이 요청한 몬스터가 화면의 하단에 표시되는 것으로 확인되었습니다.물론 제가 아직 섹션 4. Multiplay의 몬스터 스폰 영상까지만 본 상태이므로, 이후 강사님께서 정정해주셨을 수도 있습니다. 다만 혹시라도 같은 부분에서 궁금증을 가지실 수강생들을 위해, 가능하시다면 이 내용을 한 번 확인해주시면 감사하겠습니다.제가 잘못 이해한 부분이 있다면 언제든 말씀 부탁드립니다.항상 좋은 강의 제공해주셔서 감사합니다.좋은 하루 되세요![Spawner에서 수정한 부분][클라이언트에서 본 각각의 몬스터]Client 0 즉, 호스트의 요청으로 스폰된 몬스터가 상대방인 클라이언트의 입장에서 아래쪽에 보이는 모습.Client 1 즉, 클라이언트 자신의 요청으로 인해 스폰된 몬스터가 상단에 위치한 모습 [호스트에서 본 각각의 몬스터]
-
미해결프로젝트로 배우는 Python 챗봇 & RAG - LangChain, Gradio 활용
[질문드립니다] poetry export -f requirements.txt --output requirements.txt
선생님께서 알려주신대로 txt 파일 뽑은 후(해시가 담겨있는) requirements.txt 업로드 시 서버에서 아래와 같은 에러가 났었습니다. 혹시 몰라서 pip freeze > requirements.txt로 생성한 뒤 업로드 해보니 제대로 실행이 되더라고요...! 이게 왜 그런걸까요? 선생님께서는 현재도 poetry export -f requirements.txt --output requirements.txt 로 만든 후 업로드 해도 실행이 잘 되시는 걸까요?'에러': ===== Application Startup at 2025-01-09 14:21:54 ===== Traceback (most recent call last): File "/home/user/app/app.py", line 2, in <module> from dotenv import load_dotenv ModuleNotFoundError: No module named 'dotenv'QnA 정리:poetry export -f requirements.txt --output requirements.txt 한 후에 업로드 했더니 서버에서 모듈을 다운로드 하지 못함pip freeze > requirements.txt 로 한 후에 업로드 했더니 서버에서 모듈을 정상적으로 다운로드 하고 app.py를 실행함
-
해결됨그림으로 쉽게 배우는 네트워크
서브넷 마스크로 IP주소 낭비를 막는 부분 질문드립니다.
서브넷 마스크에 대해 잘 이해가 안가서 질문드립니다. IP를 관리하는 기관에서 IP 클래스를 크게 줄 수 밖에 없어서, 서브넷 마스크로 더 잘게 나눠 IP주소 낭비를 막는다고 설명해주셨는데요. 만약 300개의 IP가 필요한 회사에서 기관에 클래스 C가 부족해서, 클래스 B IP(6만5천개)를 할당받는다고 가정할때서브넷 마스크는 회사의 네트워크 관리자가 관리하니까 클래스 B의 IP를 서브넷팅을 해서 분리하더라도, 할당받은 클래스 B IP는 계속 가지고 있어, 낭비되는거 아닌가요? 서브넷 마스크가 기존 IP 비효율적인 할당을 어떻게 줄일 수 있는지 추가적인 설명 부탁드려봅니다.
-
미해결모바일 웹 퍼블리싱 포트폴리오 with Figma
모바일 웹 레이아웃 도움요청드립니다! (왕초보)
CSS 구조 문의드립니다.Wrapper를 이용해서 인증번호, 재발송, 우편번호 찾기 버튼을 화면 안으로 넣고 싶은데 어떻게 하는지를 도저히 모르겠습니다.. 아시는 분은 도와주시면 정말 감사하겠습니다.style.css 일부/* Import Local CSS */ @import url('/css/reset.css'); @import url('/css/variables.css'); * { font-family: var(--primary-kr); font-weight: 500; box-sizing: border-box; } body { margin: 0; font-family: var(--primary-kr); color: var(--dark-black); font-size: 14px; } .container { width: 100%; max-width: 393px; margin: 0 auto; padding: 16px; background-color: var(--white); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); border-radius: 10px; box-sizing: border-box; font-family: var(--primary-kr); } .phone-input-wrapper { display: flex; /* 플렉스 박스 설정 */ justify-content: space-between; } .phone-input-wrapper input[type="tel"] { width: 60%; /* 입력 필드가 가변적인 공간을 차지 */ padding: 10px; border: 1px solid var(--gray); font-size: 14px; height: 40px; /* 동일한 높이 */ box-sizing: border-box; /* 패딩과 테두리를 포함한 크기 계산 */ } .phone-input-wrapper .btn-certification { width: 40%; /* 선택박스의 고정 너비 */ height: 40px; /* 입력 필드와 동일한 높이 */ padding: 10px; border: 1px solid var(--gray); font-size: 14px; box-sizing: border-box; /* 패딩 포함 */ } /* 인증번호 입력 필드 */ .auth-input-wrapper { display: flex; /* Flexbox로 가로 정렬 */ align-items: center; /* 세로 중앙 정렬 */ justify-content: space-between; width: 100%; /* 부모 요소의 너비를 꽉 채움 */ max-width: 393px; box-sizing: border-box; /* 패딩 포함 */ position: relative; /* 타이머 배치를 위해 필요 */ flex-wrap: wrap; } .auth-input-wrapper input { flex: 0; /* 입력 필드가 가용 공간을 차지 */ height: 40px; border: 1px solid var(--gray); font-size: 14px; box-sizing: border-box; min-width: 70%; /* 최소 너비 설정 */ } .auth-input-wrapper .timer { flex: 0; position: absolute; /* 입력 필드 내부 배치 */ right: 45%; top: 50%; transform: translateY(-50%); font-size: 14px; color: var(--alert-red); pointer-events: none; /* 클릭 불가 */ } .auth-input-wrapper .reset { display: flex; position: absolute; align-items: center; right: 40%; justify-content: center; text-decoration: none; /* 기본 링크 스타일 제거 */ margin-left: 10px; /* 타이머와의 간격 */ overflow: hidden; } .auth-input-wrapper .reset-link img { width: 16px; /* 아이콘 크기 */ height: 16px; } .auth-input-wrapper .reset-link:hover { background-color: var(--lightblue); /* 호버 시 색상 변경 */ transition: background-color 0.2s ease; } .auth-input-wrapper .btn-resend { flex: 1; height: 40px; font-size: 14px; color: white; background-color: var(--blue); border: none; border-radius: 6px; cursor: pointer; white-space: nowrap; /* 텍스트 줄바꿈 방지 */ min-width: 60px; /* 버튼 최소 너비 */ } /* 주소 필드 래퍼 */ .address-wrapper { display: flex; align-items: center; width: 100%; /* 화면 너비에 맞춤 */ box-sizing: border-box; } .address-wrapper input[type="text"] { width: 60%; height: 40px; padding: 10px; border: 1px solid var(--gray); font-size: 14px; box-sizing: border-box; min-width: calc(70% - 10px); /* 최소 너비 */ } .address-wrapper .btn-post-search { flex: 0 0 auto; /* 버튼 크기 고정 */ height: 40px; padding: 0 15px; font-size: 14px; color: white; background-color: var(--navybutton); border: none; border-radius: 6px; cursor: pointer; white-space: nowrap; /* 텍스트 줄바꿈 방지 */ min-width: 100px; /* 버튼 최소 너비 */ } signup-email.html <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>회원가입</title> <link rel="stylesheet" href="/css/style.css"> </head> <body> <!-- Signup Form --> <div class="signup-content"> <div class="signup-field"> <label for="username">아이디<em>*</em></label> <input type="text" id="username" placeholder="아이디 입력" required> </div> <div class="signup-field"> <label for="password">비밀번호<em>*</em></label> <input type="password" id="password" placeholder="영문+숫자+특수문자 8자 이상" required> </div> <div class="signup-field"> <label for="password-check">비밀번호 확인<em>*</em></label> <input type="password" id="password-check" placeholder="비밀번호 확인 입력" required> </div> <div class="signup-field"> <label for="name">이름<em>*</em></label> <input type="text" id="name" placeholder="이름 입력" required> </div> <div class="signup-field"> <label for="email"> 이메일<em>*</em> </label> <div class="email-input-wrapper"> <input type="email" id="email" name="email" placeholder="이메일 입력" required> <select name="email-domain" id="email-domain"> <option value="">선택하기</option> <option value="gmail.com">gmail.com</option> <option value="naver.com">naver.com</option> <option value="daum.net">daum.net</option> </select> <span class="dropdown-icon"></span> <!-- SVG 아이콘 위치 --> </div> </div> <div class="signup-field"> <label for="phone">휴대폰<em>*</em></label> <div class="phone-input-wrapper"> <input type="tel" id="phone" placeholder="숫자만 입력" required> <button class="btn-certification">인증번호</button> </div> </div> <div class="signup-field"> <label for="auth-code"></label> <div class="auth-input-wrapper"> <input type="text" id="auth-code" placeholder="인증번호 입력" required> <span class="timer">00:00</span> <a href="#" class="reset"> <img src="/images/reset.svg" alt="Reset Icon"> </a> <button class="btn-resend" type="button">재발송</button> </div> </div> <div class="signup-field"> <label for="address">주소<em>*</em></label> <div class="address-wrapper"> <input type="text" id="address" placeholder="주소 입력" required> <button class="btn-post-search">우편번호 찾기</button> </div> </div> <div class="signup-field"> <label for="address-detail"></label> <input type="text" id="address-detail"> </div> <div class="signup-field"> <label for="address-detail">상세주소<em>*</em></label> <input type="text" id="address-detail" placeholder="상세 주소 입력" required> </div> <p class="notice">배송지에 따라 상품 정보가 달라질 수 있습니다.</p> <div class="thirdline"></div> <!-- 위에 줄 --> </div> </body> </html> style.css
-
미해결리눅스 입문 - 개념으로 탄탄히!!
소프트링크 질문
안녕하세요 강의 잘 듣고있는 예비 개발자입니다.별로 쓸모없는 질문일수도 있지만 궁금해져서 여쭤봅니다.혹시 심볼릭 링크의 권환만 바꿀수 있나요?예를들어 원본파일의 권환이 777일때 심볼릭 링크만 444로 바꿔 읽기접근만 가능하게 할 수 있나요?실제로 chmod 실행시 원본파일의 권환이 바뀌어서 질문드려봅니다.
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
39:33 res 리턴값
너무 잦은 질문 죄송합니다.몇번을 돌려봐도 리턴이 헷갈리네요 재귀함수를 통해 int res = 15 를 구한다음메인함수에 int sum=nSum(n)에 들어 가는거 같은데res가 갑자기 nSum에 리턴이 되는걸 어떻게 이해해야 될지 모르겠습니다. 첫번째 호출->자기자신 호출까지는 이해했는데결과값이 리턴하는 순서? 공식?이 잘 정립이 안되네요 ㅠㅠ
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
API 다중 요청시 refreshToken 다중 요청에 대해서
Dio로 inspector을 구현한 이후 토큰 만료 시 refreshToken으로 accessToken을 재발급하는 과정에서 만약 API요청을 하나만이 아니라 동시에 3개가 요청되는 상황일 때 어떻게 되는지 궁금합니다. 시나리오는 게시글의 상세페이지로 이동하였을 때 게시글, 댓글, 사용자 정보 등의 API를 동시에 보내게 된다면 모두 요청 중인 상황이고 그 상황에서 accessToken이 만료된 상황이라면 3 모두 다 refreshToken으로 3번 accessToken을 요청되어 accessToken이 꼬이게 되는 상황이 나올 것 같아 질문 드립니다
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
MMORPG라면 서버가 어떤 기능들을 가져가야 할까요?
클라가 모든 걸 다하고 서버는 판정만 해야할지 아니면 이동(구르기 같은), 데미지, 차징, State관리, Effect 등도 서버가 처리해야 할지 궁금합니다
-
해결됨[임베디드 입문용] 임베디드 개발은 실제로 이렇게 해요.
온도계 모듈 관련 문의
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 자주 묻는 질문에 혹시 답이 있을 수 있어요.- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.현재 Ds18b20_Init(); 을 할 경우에 제대로 값을 불러오지 못하고 있습니다. 혹시나 제가 다른 옵션을 건드렸을까 새로 프로젝트를 생성해서 확인해도 값을 불러오지를 못하네요오늘 점심 쯤에 정상 작동하는 것을 확인했었는데, 갑자기 작동이 안되어 당혹스럽습니다... 온도계 모듈만 따로 구할 수 있을까요?
-
미해결파이썬으로 영화 예매 오픈 알리미 만들기
토큰을 통해서 제 고유아이디를 알아내야되는데 반환되는것이 하나도 없음
토큰을 통해서 제 고유아이디를 알아내야되는데 반환되는것이 하나도 없음안녕하세요.. 지금 인프런을 통해서 강의를 듣고있는데, 모르는것이 많아서 댓글 질문 남깁니다..참고로 저는 Mac, visual code 사용하고있습니다.현재, 진행되고있는 부분은 텔레그램봇을 통해서 몇개의 채팅 이후 반환값을 받아서 제 고유아이디를 알아내야되는데, 아래와 같이 코딩을 하여서 실행하였으나, 반환되는것이 하나도 없습니다. 문제가 무엇인지 알려주시면 너무 감사드리겠습니다.import telegramimport asynciobot = telegram.Bot(token='제 토큰')async def main():updates = await bot.getUpdates()for i in updates:print(i)asyncio.run(main())
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
만약 구현해야 할 페이지가 많아지면 Router를 효율적으로 사용하는 방법이 있나요?
안녕하세요. 좋은 강의 공유해주셔서 감사합니다. 덕분에 실무에 잘 활용하고 있습니다. 12.4) 페이지 라우팅 강의를 듣던 중 궁금한 점이 생겨 질문 드립니다. 예시 프로젝트엔 페이지가 3개로 비교적 적은 페이지수라서 App 컴포넌트 밑에 Router 로 경로를 지정해줄 수 있지만 몇 십개씩 혹은 몇 백개씩 넘어가는 페이지를 만들어야 할 때는 Router를 어떻게 활용해야 하나요? Router가 아닌 다른 방법이 있나요?
-
해결됨PM을 위한 데이터 리터러시(프로덕트 데이터 분석)
강의 시작! 수강하는 목적을 남깁니다.
안녕하세요, 저는 스타트업 4년차 운영 및 기획 업무를 맡고 있습니다. 이 강의를 통해 저는 다음과 같은 3가지를 얻고 싶습니다.(1) 더 나은 수치 해석 능력을 가지고 싶습니다. 숫자가 아닌 유의미한 데이터로의 그 이상을 확인하고 업무에 적용하고 싶습니다. (2) 팀 내 원활한 커뮤니케이션을 하고 싶습니다. 타 팀과 협업을 진행할 때 설득하는 과정과 근거에 대한 힘을 얻고 싶습니다.(3) 데이터 문화를 정착시키고 싶습니다. 운영 및 기획에 새로운 팀원이 합류했을 때에도 자연스럽게 데이터 문화를 적용할 수 있게끔 하고 싶습니다. 저는 이렇게 노력하고자 합니다.월, 화, 수(또는 목) 매일 퇴근 후 21시 한 강의씩 들을 예정입니다. 수강한 후 저는 이런 모습이고 싶습니다.데이터 프레임워크에 더 분명하고 정확한 지식을 가지고 있는 사람이 되고 싶습니다. 데이터 기반 의사결정은 무엇이고, 어떻게 하는 것인지 제 스스로 우리 팀과 회사에 맞게 정의하고 싶습니다. 툴을 단순히 수치 확인으로써 바라보는 것이 아닌 활용할 수 있는 도구로 사용하고 싶습니다. 완강하는 게 목표입니다. 감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성 컨텍스트 스냅샷 갱신 시점
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]flush()를 할 때 영속성 컨텍스트 스냅샷이 갱신되는 지 확인받고 싶습니다. 다른 질문에서 해당 내용을 찾지 못했고, Baeldung과 같은 사이트, 또는 다른 블로그 글들에서 이와 같은 내용을 확인할 수 있는 곳이 없어 ChatGPT를 통해 확인했지만, 여전히 확신이 서는 곳에서 답변을 받은 것이 아니기에 질문 남겼습니다.다음과 같은 코드를 실행할 때,EntityTransaction tx = em.getTransaction(); tx.begin(); // id는 1L, name은 AAA인 Member 엔티티 Member memberA = new Member(1L, "AAA"); em.persist(memberA); em.flush(); memberA.setName("NOTA"); tx.commit();flush를 직접 호출하는 시점은 영속성 컨텍스트에는 memberA에 대한 엔티티는 있지만 스냅샷은 없는 상태로, flush()가 수행되면서 데이터베이스와의 동기화를 위해 INSERT 쿼리문이 날라갑니다.제가 생각하기에는 이 때(첫번째 flush()), memberA에 대한 스냅샷이 생성되어야 memberA.setName()을 수행하면서 변경감지를 통해 비교할 대상인 스냅샷이 존재할 수 있다고 생각합니다.그렇기에 commit()을 호출할 때, flush()가 자동으로 호출되면서 비교할 스냅샷을 통해 UPDATE 쿼리문을 생성할 수 있다고 생각했습니다.이를 통해 제가 확인하고 싶은 것은 다음 2가지인데, 맞는지 확인 부탁드립니다.flush() 호출 시 영속성 컨텍스트에서 스냅샷이 갱신된다.persist() 시에는 스냅샷이 생성되지 않는다.관련 자료를 확인하고 싶은데 혹시 이를 확인할 수 있는 자료가 있다면 알려주시면 감사하겠습니다.강의 잘 보고 있습니다!
-
미해결
slot에서 v-if 사용 방법
저번에 이중slot 문의 올린 건과 이어서,아래와 같이 slot에 v-if로 2개의 컴포넌트를 전달하면...v == true 인 케이스만 ㅜㅜ 인식이 되는 것 같습니다. <template #iconRender="v"> <EyeTwoTone v-if="v"></EyeTwoTone> <!-- 이것만 인식 --> <EyeInvisibleOutlined v-else></EyeInvisibleOutlined> </template>