묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[리뉴얼] 처음하는 파이썬 백엔드와 웹기술 입문 (파이썬 중급, flask[플라스크] 로 이해하는 백엔드 및 웹기술 기본) [풀스택 Part1-1]
jsonify에서 한글이 깨져서 나옵니다.
영어는 잘 나오는데 한글이 깨져서 나오네요...
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
질문있습니다.
질문1. 안녕하세요 제로초님 swr도 서버사이드 렌더링이 된다고 하셨잖아요?? 그러면 리덕스와 사가를 통해 로드액션으로 서버사이드 렌더링 하는 것과 swr 을 통해 서버사이드 렌더링하는중 어떤게 효율적인가요? 같은 기능을 하는것 같은데 둘의 장점과 단점이 궁금합니다 질문2. Profile.js입니다 const Profile = () => { const [followingsLimit, setFollowingsLimit] = useState(3); const [followersLimit, setFollowersLimit] = useState(3); const { data: followingsData, error: followingError } = useSWR(`http://localhost:3065/user/followings?limit=${followingsLimit}`, fetcher); const { data: followersData, error: followerError } = useSWR(`http://localhost:3065/user/followers?limit=${followersLimit}`, fetcher); const { me } = useSelector((state) => state.user); profile페이지로 이동하게 되면 팔로잉과 팔로워데이터가 나타납니다. 이때 데이터는 useEffect를 사용하지않고 SWR을 사용해서 불러온것인데 SWR은 기본적으로 useEffect와 같이 페이지가 마운트 될 때 알아서 데이터를 불러오는 것인가요? useEffect와 useSWR중 어떤것이 먼저 실행되는 것인가요? 질문3. profile.js에서 export const getServerSideProps = wrapper.getServerSideProps(async (context) => { // console.log('getServerSideProps start'); // console.log(context.req.headers); const cookie = context.req ? context.req.headers.cookie : ''; axios.defaults.headers.Cookie = ''; if (context.req && cookie) { axios.defaults.headers.Cookie = cookie; } context.store.dispatch({ type: LOAD_MY_INFO_REQUEST, }); context.store.dispatch(END); // console.log('getServerSideProps end'); await context.store.sagaTask.toPromise(); }); 여기서 LOAD_MY_INFO_REQUEST액션을 서버사이드 렌더링 하는이유가 궁금합니다. 먼저 index.js에서 LOAD_MY_INFO_REQUEST로 서버사이드렌더링을 이미 했기 때문에 리덕스user에 me에 데이터가 이미 들어있어서 위의 코드가 없어도 데이터를 불러오기는 하더라구요? 그러면 위의 코드가 있는 이유가 궁금합니다. ❶ 리덕스user에 me에 데이터가 이미 들어있기 때문에 Profile.js 에서위의 코드는 필요가 없는건가요? ❷ 아니면 index.js에서 LOAD_MY_INFO_REQUEST 액션이 있음에도 불구하고 위의 코드가 있는건 profile은 index.js와 다른 페이지이기 때문에 다시 서버사이드 렌더링으로 액션을 주어야지 페이지가 렌더링될때 데이터를 빨리 받아오게 하기위함인가요? 둘중 어떤게 맞나요?
-
미해결'내 생애 첫번째 코딩 앱인벤터' 저자에게 배우는 App Inventor
15:37
연락처 , 전화번호로 되어있는 블록이 안보여요 ㅠㅜ 어떻게 해야 나올까요 ?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part6: 웹 서버
예외가 발생했습니다
최종적으로 디버그 모드에서 실행 ( ISS Express ) 하면 위와 같은 결과가 나옵니다 참고로 EntityFramework 4가지 모두 최신버전입니다
-
해결됨홍정모의 따라하며 배우는 C언어
버퍼 비우기 관련해서 질문드립니다.
안녕하세요? 강의를 세세하게 해주시는 덕분에 열심히 듣고 있습니다! 아래는 버퍼 비우기를 이해하기 위해 제가 짜본 코드인데 만약 이게 맞다면, scanf와 getchar()가 버퍼를 공유하고 있는 원리인가요? int main() { char c; int a; scanf("%c", &c); // 'asdf' 입력함 printf("%c \n", c); //'a'표시 (버퍼에서 'a'가 c에 대입) a = getchar(); //'sdf' (scanf에서 c에 대입된 'a'사라짐) putchar(a); //'s'표시('sdf'의 첫글자) return 0; }
-
미해결홍정모의 따라하며 배우는 C++
저는 영역을 제한해도 비교해도 에러가 안뜨네요.
2:40에서 저렇게 해도 저는 제한전이랑 똑같이 뜨는데요?
-
미해결스프링 핵심 원리 - 기본편
질문 있습니다!
안녕하세요, 영한님. 궁금한 사항이 생겨 질문드립니다. java 책을 공부하면 나오는 has-a 관계가 DI에서 나오는 의존관계와 동일한 관계인 건가요?
-
해결됨프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
%f에서 정수부와 소수부 에 관한 질문 있습니다
print('%1.7f' % (23.32534242353)) 이렇게 입력을 하면 ' . ' 앞 숫자에 관계없이 23.3253424 로 출력 됩니다 그렇다면 1.7이나 0.7이나 같게 줄력되는것 아닌가요? print('%1.7f' % (23.32534242353))
-
미해결리액트로 나만의 블로그 만들기(MERN Stack)
죄송하지만, 도움 요청합니다ㅠ
자주 여쭈어보아서 죄송합니다ㅠ 강의 듣기 전에 도메인 구입 후 등록하고 활성화시킨 것까지 확인했습니다. 그리고 강의처럼 greenlock 설정을 했습니다. 그런데 포트에 문제가 생겼는지 사이트가 보이지 않고, 서버도 연결이 안 되네요ㅠㅠ 이건 putty로 sudo npm run dev-watch로 연결했을 때 뜨는 에러입니다. 제가 window를 사용해서 nodemon이 아닌 babel-watch로 쓰라고 하셔서 계속 dev-watch로 썼습니다. (강의처럼 server, client 각 .env에 수정 후 적용했습니다. 컴퓨터를 다시 끄고 켜서 실행하기도 했습니다.) 이 두 개의 사진은 해당 사이트에 접속했을 때와 console입니다ㅠ (사이트가 이래서인지 build도 계속 로딩만 되고 적용이 안 되네요ㅠ) 그런데 왜인지 'vscode'에 npm run dev-watch로 연결해보니 강의와 똑같은 문구가 나오네요ㅡㅠ 강사님께 매번 감사하고 죄송스러운 마음입니다ㅠ
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
atom 실행
atom 에서 install Shell Commands를 했는데도 터미널에서 atom이 실행이 안 되는데 왜 이런 걸까요,,,
-
미해결리액트로 나만의 블로그 만들기(MERN Stack)
새로고침시 로그인이 유지 되지 않습니다.
되게 여러번 따라 했는데, 새로고침 하고난 후 로그인이 유지가 되지 않습니다..ㅠㅠ authSaga 속의 함수들이 제대로 작동하지 않는것 같습니다.... authoSaga속 함수를 호출하는 시작이 어딘지 순서 또한 잘 파악되지 않습니다..ㅠ 계속 401에러가 뜹니다. ㅠㅠ
-
미해결더 개발자, 인터뷰 가이드
미션이 누락되어 있네요 확인 부탁드립니다.
감사합니다,
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
feature map - ssd에 대해서 질문이 있습니다
안녕하세요 ssd의 이해 2강에서 anchor box 설명 전 feature map 기반으로 object detection 설명에서 질문이 있습니다 다음 그림에서 질문이 있는데, feature map이라는 것이 일정 크기의 필터 64개, 128개를 거쳐서 나온 결과값이라고 알고 있는데, 그러면 위에 32x32는 원본 이미지에서 약 10x10사이즈의 필터를 거쳐서 나온 결과값으로 이해하면 될까요? 그러면 이런 값들은 원본 이미지의 특성을 잘 나타내는 값이라고 보면되는거죠? 그리고 이어서 나오는 16x16이나 8x8도 3x3의 사이즈의 필터를 거쳐서 나온 것이고요? 이런 특성값과 여러개의 피쳐 맵을 통해서 객체가 어디 있는지 윈도우 사이즈에 의해서 판단하는 것이고요? 감사합니다
-
미해결코어 자바스크립트
11:14에 b = 15를 대입하면
5004에 'ddd' 5005에 15를 넣고 ------------ 1003 ------------ 이름 : b 값: @5005 가 되어야하는 거군요. . 감사합니다.
-
미해결Firebase 서버를 통한 Android앱 개발 지침서
Database 에서 버전이 바뀌면서 코드도 바껴서 적어 드려요
taskSnapshot.getDownloadUrl(); 이코드가 없어졌어요 그래서 업로드한 경로를 알려면 Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() { @Override public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception { if (!task.isSuccessful()) { throw task.getException(); } // Continue with the task to get the download URL return riversRef.getDownloadUrl(); }}).addOnCompleteListener(new OnCompleteListener<Uri>() { @Override public void onComplete(@NonNull Task<Uri> task) { if (task.isSuccessful()) { Toast.makeText(UploadActivity.this, "업로드 성공", Toast.LENGTH_SHORT).show(); //파이어베이스에 데이터베이스 업로드 @SuppressWarnings("VisibleForTests") Uri downloadUrl = task.getResult(); ImageDTO imageDTO = new ImageDTO(); imageDTO.setImageUrl(downloadUrl.toString()); imageDTO.setTitle(etTitle.getText().toString()); imageDTO.setDescription(etDesc.getText().toString()); imageDTO.setUid(mAuth.getCurrentUser().getUid()); imageDTO.setUserId(mAuth.getCurrentUser().getEmail()); //image 라는 테이블에 json 형태로 담긴다. //database.getReference().child("Profile").setValue(imageDTO); // .push() : 데이터가 쌓인다. database.getReference().child("Profile").push().setValue(imageDTO); Intent intent = new Intent(getApplicationContext(), UserActivity.class); startActivity(intent); } else { // Handle failures // ... } }}); Uri downloadUrl = task.getResult(); 이 코드를 쓰면 됩니다.
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
안녕하세요 . FIltering 관련해서 질문이 있습니다.!
안녕하세요. 우선 좋은 강의 감사드립니다.! 프로그래밍으로 제어하는 Filtering 방법 강의를 보다가 궁금한 점이 생겼는데, 이렇게 따로 필터링을 적용한 방법과 단순히 DTO를 따로 만들어서 객체를 리턴해주는 것과 기술적으로 차이점이 있을까요? 예를들어서 예제처럼 password만 제외하고 값을 받고 싶으면 @Getter@Setterpublic class UserDto { private Integer id; private String name; private Date joinDate; private String ssn;} 이렇게 DTO를 만들어서 DTO객체를 리턴해주는 방법과 어떤 차이점이 있는지 궁금합니다.!
-
미해결애플 웹사이트 인터랙션 클론!
강사님 질문있어서 문의드립니다!
첫번째 문제 발생현상 : 새로고침 했을 경우 간혈적으로 이런 에러 문구가 출력이 됩니다. 섹션0부분에 이미지파일은 눈으로 봤을땐 정상적으로 출력된 상황입니다. 에러문구는 하단에 붙히겠습니다. main.js:258 Uncaught TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The provided value is not of type '(CSSImageValue or HTMLImageElement or SVGImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap or OffscreenCanvas)' at playAnimation (main.js:258) at scrollLoop (main.js:364) at main.js:368 두번째 문제 발생현상 : 이것도 간혈적으로 출력되는 문제이며 main.js:352 Uncaught TypeError: Cannot read property 'scrollHeight' of undefined at scrollLoop (main.js:352) at main.js:368 이러 한 문구가 출력이 됩니다. 정말 죄송하지만 제 코드한번 봐주실수 있을까요?? (() => { let yOffset = 0; //window.pageYOffset 대신 쓸 변수 let prevScrollHeight = 0; // 현재 스크롤 위치(yOffset)보다 이전에 위치한 스크롤 섹션들의 스크롤 높이값의 합 let currentScene = 0; // 현재 활성화된(눈 앞에 보고있는) 씬(scroll-section) let enterNewScene = false; // 새로운 scene이 시작된 순간 true const sceneInfo = [{ // 0 type: 'sticky', heightNum: 5, // 브라우저 높이의 5배로 scrollHeight 세팅 scrollHeight: 0, objs: { container: document.querySelector('#scroll-section-0'), messageA: document.querySelector('#scroll-section-0 .main-message.a'), messageB: document.querySelector('#scroll-section-0 .main-message.b'), messageC: document.querySelector('#scroll-section-0 .main-message.c'), messageD: document.querySelector('#scroll-section-0 .main-message.d'), canvas: document.querySelector('#video-canvas-0'), context: document.querySelector('#video-canvas-0').getContext('2d'), videoImages: [] }, values: { videoImageCount: 300, imageSequence: [0, 299], messageA_opacity_in: [0, 1, { start: 0.1, end: 0.2 }], messageB_opacity_in: [0, 1, { start: 0.3, end: 0.4 }], messageC_opacity_in: [0, 1, { start: 0.5, end: 0.6 }], messageD_opacity_in: [0, 1, { start: 0.7, end: 0.8 }], messageA_translateY_in: [20, 0, { start: 0.1, end: 0.2 }], messageB_translateY_in: [20, 0, { start: 0.3, end: 0.4 }], messageC_translateY_in: [20, 0, { start: 0.5, end: 0.6 }], messageD_translateY_in: [20, 0, { start: 0.7, end: 0.8 }], messageA_opacity_out: [1, 0, { start: 0.25, end: 0.3 }], messageB_opacity_out: [1, 0, { start: 0.45, end: 0.5 }], messageC_opacity_out: [1, 0, { start: 0.65, end: 0.7 }], messageD_opacity_out: [1, 0, { start: 0.85, end: 0.9 }], messageA_translateY_out: [0, -20, { start: 0.25, end: 0.3 }], messageB_translateY_out: [0, -20, { start: 0.45, end: 0.5 }], messageC_translateY_out: [0, -20, { start: 0.65, end: 0.7 }], messageD_translateY_out: [0, -20, { start: 0.85, end: 0.9 }] } }, { // 1 type: 'normal', // heightNum: 5, // type normal에서는 필요 없음 scrollHeight: 0, objs: { container: document.querySelector('#scroll-section-1'), content: document.querySelector('#scroll-section-1 .description') } }, { // 2 type: 'sticky', heightNum: 5, scrollHeight: 0, objs: { container: document.querySelector('#scroll-section-2'), messageA: document.querySelector('#scroll-section-2 .a'), messageB: document.querySelector('#scroll-section-2 .b'), messageC: document.querySelector('#scroll-section-2 .c'), pinB: document.querySelector('#scroll-section-2 .b .pin'), pinC: document.querySelector('#scroll-section-2 .c .pin') }, values: { messageA_translateY_in: [20, 0, { start: 0.15, end: 0.2 }], messageB_translateY_in: [30, 0, { start: 0.6, end: 0.65 }], messageC_translateY_in: [30, 0, { start: 0.87, end: 0.92 }], messageA_opacity_in: [0, 1, { start: 0.25, end: 0.3 }], messageB_opacity_in: [0, 1, { start: 0.6, end: 0.65 }], messageC_opacity_in: [0, 1, { start: 0.87, end: 0.92 }], messageA_translateY_out: [0, -20, { start: 0.4, end: 0.45 }], messageB_translateY_out: [0, -20, { start: 0.68, end: 0.73 }], messageC_translateY_out: [0, -20, { start: 0.95, end: 1 }], messageA_opacity_out: [1, 0, { start: 0.4, end: 0.45 }], messageB_opacity_out: [1, 0, { start: 0.68, end: 0.73 }], messageC_opacity_out: [1, 0, { start: 0.95, end: 1 }], pinB_scaleY: [0.5, 1, { start: 0.6, end: 0.65 }], pinC_scaleY: [0.5, 1, { start: 0.87, end: 0.92 }] } }, { // 3 type: 'sticky', heightNum: 5, scrollHeight: 0, objs: { container: document.querySelector('#scroll-section-3'), canvasCaption: document.querySelector('.canvas-caption') }, values: { } } ]; function setCanvasImages() { for (let i = 0; i < sceneInfo[0].values.videoImageCount; i++) { imgElem = new Image(); imgElem.src = `./video/001/IMG_${6726 + i}.JPG`; sceneInfo[0].objs.videoImages.push(imgElem); } } setCanvasImages() function setLayout() { // 각 스크롤 섹션의 높이 세팅 for (let i = 0; i < sceneInfo.length; i++) { if (sceneInfo[i].type === 'sticky') { sceneInfo[i].scrollHeight = sceneInfo[i].heightNum * window.innerHeight; } else if (sceneInfo[i].type === 'normal') { sceneInfo[i].scrollHeight = sceneInfo[i].objs.content.offsetHeight + window.innerHeight * 0.5; } sceneInfo[i].objs.container.style.height = `${sceneInfo[i].scrollHeight}px`; } yOffset = window.pageYOffset; let totalScrollHeight = 0; for (let i = 0; i < sceneInfo.length; i++) { totalScrollHeight += sceneInfo[i].scrollHeight; if (totalScrollHeight >= yOffset) { currentScene = i; break; } } document.body.setAttribute('id', `show-scene-${currentScene}`); } function calcValues(values, currentYOffset) { let rv; //현재 씬(스크롤섹션)에서 스크롤된 범위를 비율로 구하기 const scrollHeight = sceneInfo[currentScene].scrollHeight; const scrollRatio = currentYOffset / scrollHeight; if (values.length === 3) { //start ~ end 사이에 애니메이션 실행 const partScrollStart = values[2].start * scrollHeight; const partScrollEnd = values[2].end * scrollHeight; const partScrollHeight = partScrollEnd - partScrollStart; if (currentYOffset >= partScrollStart && currentYOffset <= partScrollEnd) { rv = (currentYOffset - partScrollStart) / partScrollHeight * (values[1] - values[0]) + values[0]; } else if (currentYOffset < partScrollStart) { rv = values[0]; } else if (currentYOffset > partScrollEnd) { rv = values[1]; } } else { rv = scrollRatio * (values[1] - values[0]) + values[0]; } return rv; } function playAnimation() { const objs = sceneInfo[currentScene].objs; const values = sceneInfo[currentScene].values; const currentYOffset = yOffset - prevScrollHeight; const scrollHeight = sceneInfo[currentScene].scrollHeight; const scrollRatio = currentYOffset / scrollHeight; switch (currentScene) { case 0: let sequence = Math.round(calcValues(values.imageSequence, currentYOffset)); objs.context.drawImage(objs.videoImages[sequence], 0, 0); if (scrollRatio <= 0.22) { // in objs.messageA.style.opacity = calcValues(values.messageA_opacity_in, currentYOffset); objs.messageA.style.transform = `translate3d(0, ${calcValues(values.messageA_translateY_in, currentYOffset)}%, 0)`; } else { // out objs.messageA.style.opacity = calcValues(values.messageA_opacity_out, currentYOffset); objs.messageA.style.transform = `translate3d(0, ${calcValues(values.messageA_translateY_out, currentYOffset)}%, 0)`; } if (scrollRatio <= 0.42) { // in objs.messageB.style.opacity = calcValues(values.messageB_opacity_in, currentYOffset); objs.messageB.style.transform = `translate3d(0, ${calcValues(values.messageB_translateY_in, currentYOffset)}%, 0)`; } else { // out objs.messageB.style.opacity = calcValues(values.messageB_opacity_out, currentYOffset); objs.messageB.style.transform = `translate3d(0, ${calcValues(values.messageB_translateY_out, currentYOffset)}%, 0)`; } if (scrollRatio <= 0.62) { // in objs.messageC.style.opacity = calcValues(values.messageC_opacity_in, currentYOffset); objs.messageC.style.transform = `translate3d(0, ${calcValues(values.messageC_translateY_in, currentYOffset)}%, 0)`; } else { // out objs.messageC.style.opacity = calcValues(values.messageC_opacity_out, currentYOffset); objs.messageC.style.transform = `translate3d(0, ${calcValues(values.messageC_translateY_out, currentYOffset)}%, 0)`; } if (scrollRatio <= 0.82) { // in objs.messageD.style.opacity = calcValues(values.messageD_opacity_in, currentYOffset); objs.messageD.style.transform = `translate3d(0, ${calcValues(values.messageD_translateY_in, currentYOffset)}%, 0)`; } else { // out objs.messageD.style.opacity = calcValues(values.messageD_opacity_out, currentYOffset); objs.messageD.style.transform = `translate3d(0, ${calcValues(values.messageD_translateY_out, currentYOffset)}%, 0)`; } break; case 2: // console.log('2 play'); if (scrollRatio <= 0.32) { // in objs.messageA.style.opacity = calcValues(values.messageA_opacity_in, currentYOffset); objs.messageA.style.transform = `translate3d(0, ${calcValues(values.messageA_translateY_in, currentYOffset)}%, 0)`; } else { // out objs.messageA.style.opacity = calcValues(values.messageA_opacity_out, currentYOffset); objs.messageA.style.transform = `translate3d(0, ${calcValues(values.messageA_translateY_out, currentYOffset)}%, 0)`; } if (scrollRatio <= 0.67) { // in objs.messageB.style.transform = `translate3d(0, ${calcValues(values.messageB_translateY_in, currentYOffset)}%, 0)`; objs.messageB.style.opacity = calcValues(values.messageB_opacity_in, currentYOffset); objs.pinB.style.transform = `scaleY(${calcValues(values.pinB_scaleY, currentYOffset)})`; } else { // out objs.messageB.style.transform = `translate3d(0, ${calcValues(values.messageB_translateY_out, currentYOffset)}%, 0)`; objs.messageB.style.opacity = calcValues(values.messageB_opacity_out, currentYOffset); objs.pinB.style.transform = `scaleY(${calcValues(values.pinB_scaleY, currentYOffset)})`; } if (scrollRatio <= 0.93) { // in objs.messageC.style.transform = `translate3d(0, ${calcValues(values.messageC_translateY_in, currentYOffset)}%, 0)`; objs.messageC.style.opacity = calcValues(values.messageC_opacity_in, currentYOffset); objs.pinC.style.transform = `scaleY(${calcValues(values.pinC_scaleY, currentYOffset)})`; } else { // out objs.messageC.style.transform = `translate3d(0, ${calcValues(values.messageC_translateY_out, currentYOffset)}%, 0)`; objs.messageC.style.opacity = calcValues(values.messageC_opacity_out, currentYOffset); objs.pinC.style.transform = `scaleY(${calcValues(values.pinC_scaleY, currentYOffset)})`; } break; case 3: // console.log('3 play'); break; } } function scrollLoop() { enterNewScene = false; prevScrollHeight = 0; for (let i = 0; i < currentScene; i++) { prevScrollHeight += sceneInfo[i].scrollHeight; } if (yOffset > prevScrollHeight + sceneInfo[currentScene].scrollHeight) { enterNewScene = true; currentScene++; document.body.setAttribute('id', `show-scene-${currentScene}`); } if (yOffset < prevScrollHeight) { if (currentScene === 0) return // 브라우저 바운스 효과로 인해 마이너스가 되는 것을 방지(모바일) enterNewScene = true; currentScene--; document.body.setAttribute('id', `show-scene-${currentScene}`); } if (enterNewScene) return; playAnimation(); } window.addEventListener('scroll', () => { yOffset = window.pageYOffset; scrollLoop(); }); //window.addEventListener('DOMContentLoaded', setLayout); window.addEventListener('load', setLayout); window.addEventListener('resize', setLayout); })();
-
미해결풀스택을 위한 탄탄한 프런트엔드 부트캠프 (HTML, CSS, 바닐라 자바스크립트 + ES6) [풀스택 Part2]
section 클래스
강의에서는 section 태그안에 따로 main 클래스를 정의하셔서 section 태크에는 기본 css 적용 후 main 클래스에 배경 이미지의 css 적용을 하셨는데 main클래스에 적용한 css를 section 태그에 같이 적용해도 상관없는건가요? 차이점이 궁금해서 질문드립니다!! 그리고 지나간 부분이지만 header 태크 css 부분에서 top:0 과 left:0 은 어떠한 이유로 적용한지 알 수 있을까요? (p.s 좋은 강의 잘 수강하고 있습니다!)
-
미해결Vue.js 끝장내기 - 실무에 필요한 모든 것
로그아웃을 직접 누르지 않고 싸이트를 나가는 경우
로그아웃을 직접 누르지 않고 싸이트를 종료 시키면 쿠키에는 계속 정보가 남아서 로그인 상태가 계속 유지되는데 이를 막기 위해서는 실무에서는 보통 어떤 방법을 쓰나요? 생각할 수 있는 방법은 프론트에서 쿠키 만료시간을 쓰거나, 백엔드에서 토큰 만료시간을 정하던가 할 것 같습니다.
-
미해결[개정판] 파이썬 머신러닝 완벽 가이드
Random Forest Regressor에 보스턴 데이터셋 실습시킬때 질문
안녕하세요 강의 보는 중에 이전 회귀 모델이나 descion tree 모델을 학습시킬때에는 dataset을 train_test_split를 통해서 train_set, test_set으로 나눴지만 Random Forest Regressor 모델을 학습 시킬 때에는 X_data, y_target에 대해서 train_set, test_set으로 나누지 않는 이유가 있나요? 혹시 그 이유가 Random Forest Regrssor에 bootstrap기법때문인가요?