묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요 영한님! jpa관련 질문입니다!
안녕하세요 영한님 수업 듣는도중에 EntityManager를 사용하시는데 설명 도중에 스프링 빈? 스프링이 생성한 EntityManager에 주입한다?라고 하시는데 이게 무슨말인지 잘 모르겠습니다 jpa의 EntityManager를 스프링이 생성한 빈즈에 주입하는건가요?
-
해결됨실전 리액트 프로그래밍
다음 강의 계획 질문
안녕하세요 강사님 강의 잘듣고 있습니다. 그런데 제가 React기초는 알고 있어, 빠르게 실습적인 강의를 듣고 싶은데 다음 강의 계획이 있으신지 궁금합니다.
-
미해결공공데이터로 파이썬 데이터 분석 시작하기
이건 무슨오류에요????
File "<ipython-input-10-1748e36fecc8>", line 1 pd.read_csv("data/전국 신규 민간 아파트 분양가격 동향_20200331.csv" ^ SyntaxError: unexpected EOF while parsing 그리구 맥북은 자동완성이되는데 윈도우는 안되거든요 그런데 자꾸 자동완성하셔서 혼자 빨리진행하셔서 햇갈려요 윈도우는 어떤방식으로 하라고 정확하게 알려주셔야지 질문창들 보고야 알았어요 ㅜ 데이터불러오는것도 그냥 업로드로 하구요
-
미해결웹 게임을 만들며 배우는 React
세팅방법설명해주셔서..감사합니다 ..
다른강의는 ..create-react-app 만써대서 저걸왜하는지 이해가안갔는데 고맙습니당!
-
미해결애플 웹사이트 인터랙션 클론!
콘솔창에 에러나는데 왜 이러는 걸까요 ㅠㅠ
(() => { let yOffset = 0; // window.pageYOffset 대신 쓸 변수 let prevScrollHeight = 0; // 현재 스크롤 위치 (yOffset) 보다 이전에 위치한 스크롤 섹션들의 스크롤 높이 합 let currentScene = 0; // 현재 활성화 된(눈 앞에 보고 있는) 씬 (scroll-section) let enterNewScene = false; // 새로운 씬이 시작 된 순간 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, imageSequenc: [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 }], // 20=> translateY를 20%만큼 조정, %는 밑에 playAnimation()에서 붙여줄 거임 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') } }, //2 { type: 'sticky', heightNum: 5, // 브라우저 높이의 5배로 scrollHeight 세팅 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, // 브라우저 높이의 5배로 scrollHeight 세팅 scrollHeight: 0, objs: { container: document.querySelector('#scroll-section-3'), canvasCaption: document.querySelector('.canvas-caption') }, values: { } } ]; function setCanvasImages() { let imgElem; for (let i = 0; i < sceneInfo[0].values.videoImageCount; i++) { // imgElem = document.createElement('img'); imgElem = new Image(); imgElem.src = `./video/001/IMG_${6726 + i}.JPG`; sceneInfo[0].objs.videoImages.push(imgElem); } } 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.container.offsetHeight; } 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; // 현재 씬(스크롤섹션)에서 스크롤 된 범위를 0~1 사이의 비율로 구하기 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 = yOffset / 현재 씬의 scrollHeight; const scrollRatio = currentYOffset / scrollHeight; switch (currentScene) { case 0: // console.log('0 play'); let sequence = Math.round(calcValues(values.imageSequenc, 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) { enterNewScene = true; if(currentScene === 0) return; // 브라우저 바운스 효과로 인해 마이너스가 되는 것을 방지 (모바일) 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); })();
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
saga 가 실행이 안됩니다..
사가 가 실행이 안되네요 ㅠㅠ 콘솔창에 확인해보니 아래와 같이 에러가 납니다 loginForm에서 dispatch로 data는 잘 넘겨줬는데 왜 이럴까요..?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
콜백함수
여러 이벤트를 콜백함수로 처리해주는 이유가 다른 곳에서도 쉽게 사용하기 위해서 Action.Invoke으로 호출해주는건가요??
-
미해결애플 웹사이트 인터랙션 클론!
opacity out 이 안되는데 검토 한번만 해주세요
(() => { let yOffset = 0; //window.pageOffset 대신 쓸 수 있는 변수 let prevScrollHeight = 0 // 현재 스크롤 (yOffset)보다 이전에 위치한 스크롤 높이값의 함 let currentScene = 0; // 현재 활성화된 (눈앞에 보고 있는) 씬(scroll-section) let enterNewScene = false; 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') }, values: { // 글자 구간과 선명도를 지정 하는 역할 messageA_opacity_in: [0, 1, { start: 0.1, end: 0.2 }], messageB_opacity_in: [0, 1, { start: 0.3, end: 0.4 }], messageA_opacity_out: [1, 0, { start: 0.25, end: 0.3 }], } }, { // 1 type: 'normal', heightNum: 5, //브라우저 높이의 5배로 scrollheight 세팅 scrollHeight: 0, objs: { container: document.querySelector('#scroll-section-1') } }, { // 2 type: 'sticky', heightNum: 5, //브라우저 높이의 5배로 scrollheight 세팅 scrollHeight: 0, objs: { container: document.querySelector('#scroll-section-2') } }, { // 3 type: 'sticky', heightNum: 5, //브라우저 높이의 5배로 scrollheight 세팅 scrollHeight: 0, objs: { container: document.querySelector('#scroll-section-3') } }, ]; function setLayout() { // 각 section 의 높이 세팅 for (let i = 0; i < sceneInfo.length; i++) { sceneInfo[i].scrollHeight = sceneInfo[i].heightNum * window.innerHeight; // sceneInfo[i].objs.container.style.height = `${sceneInfo[i].scrollHeight}px` } let totalScrollHeight = 0; let yOffset = window.pageYOffset; // 새로고침 버튼 눌렀을때 그 씬 장면이 유지 될 수 있게 해주는 역할 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 partStart = values[2].start * scrollHeight const partEnd = values[2].end * scrollHeight const partScrollHeight = partEnd - partStart; if (currentYOffset <= partEnd && currentYOffset >= partStart) { rv = (currentYOffset - partScrollHeight) / partScrollHeight * (values[1] - values[0] + values[0]); } else if (currentYOffset < partStart) { rv = values[0]; } else if (currentYOffset > partEnd) { rv = values[1]; } } else { rv = scrollRatio * (values[1] - values[0] + values[0]); } return rv; } function playAinmation() { const objs = sceneInfo[currentScene].objs; const values = sceneInfo[currentScene].values; const currentYOffset = yOffset - prevScrollHeight; const scrollHeight = sceneInfo[currentScene].scrollHeight; const scrollRatio = (yOffset - prevScrollHeight) / scrollHeight; console.log(currentScene) switch (currentScene) { case 0: // calcValues = (values의 선명도, 현재 스크롤의 위치) const messageA_opacity_in = calcValues(values.messageA_opacity_in, currentYOffset) const messageA_opacity_out = calcValues(values.messageA_opacity_out, currentYOffset) if (scrollRatio <= 0.22) { // in objs.messageA.style.opacity = messageA_opacity_in; } else { // out objs.messageA.style.opacity = messageA_opacity_out; } break; case 1: break; case 2: break; case 3: 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) { enterNewScene = true if (currentScene === 0) // 브라우저 바운스 효과로 인해 마이너스가 되는 것을 방지 return currentScene--; document.body.setAttribute('id', `show-scene-${currentScene}`) } // 마이너스 나오는 오류를 잡아주기 위한 역할 if (enterNewScene) return; playAinmation() } window.addEventListener('scroll', () => { yOffset = window.pageYOffset; scrollLoop() }); window.addEventListener('resize', setLayout); window.addEventListener('load', setLayout); })()
-
해결됨인터랙티브 웹 개발 제대로 시작하기
1분이가 계속 한자리에만 생기는데요. info.xPos가 일분이에게 안들어가는거 같아요. 놓친부분이 있는거겠죠?
(function(){//즉시 실행 함수 const stageElem = document.querySelector('.stage'); const houseElem = document.querySelector('.house'); const barElem = document.querySelector('.progress-bar'); const mousePos = {x:0,y:0}; let maxScrollValue; function resizeHandler(){ maxScrollValue = document.body.offsetHeight - window.innerHeight; } window.addEventListener('scroll',function(){ // pageYoffset 스크롤 한 값 // console.log(this.pageYOffset); // 스크롤 범위 지정하기 // console.log( pageYOffset/maxScrollValue); const scrollPer = pageYOffset/maxScrollValue const zMove =scrollPer*970 -490; houseElem.style.transform = 'translateZ('+zMove+'vw)'; // progress bar barElem.style.width = scrollPer *100 + '%'; }) window.addEventListener('mousemove',function(e){ // console.log(e.clientX,e.clientY) 마우스 위치 알아내기 mousePos.x = -1+(e.clientX /window.innerWidth)*2; mousePos.y = 1-(e.clientY /window.innerHeight)*2; stageElem.style.transform='rotateX('+(mousePos.y*5)+'deg) rotateY('+(mousePos.y*5)+'deg)'; // console.log(mousePos); }) window.addEventListener('resize',resizeHandler) resizeHandler(); stageElem.addEventListener('click',function(e){ // console.log(e.clientX/window.innerWidth*100) new Character({//객체의 속성으로 넣어야 함. 다른 것들도 추가해야 하기때문에 xPos :e.clientX/window.innerWidth*100 }); }) })() function Character(info) { this.mainElem = document.createElement('div'); this.mainElem.classList.add('charactor'); this.mainElem.innerHTML = '' + ' <div class="character" >' + ' <div class="character-face-con character-head">' + '<div class="character-face character-head-face face-front"></div>' + '<div class="character-face character-head-face face-back"></div>' + '</div>' + ' <div class="character-face-con character-torso">' + '<div class="character-face character-torso-face face-front"></div>' + '<div class="character-face character-torso-face face-back"></div>' + ' </div>' + '<div class="character-face-con character-arm character-arm-right">' + ' <div class="character-face character-arm-face face-front"></div>' + ' <div class="character-face character-arm-face face-back"></div>' + '</div>' + ' <div class="character-face-con character-arm character-arm-left">' + '<div class="character-face character-arm-face face-front"></div>' + '<div class="character-face character-arm-face face-back"></div>' + '</div>' + ' <div class="character-face-con character-leg character-leg-right">' + '<div class="character-face character-leg-face face-front"></div>' + '<div class="character-face character-leg-face face-back"></div>' + '</div>' + ' <div class="character-face-con character-leg character-leg-left">' + '<div class="character-face character-leg-face face-front"></div>' + '<div class="character-face character-leg-face face-back"></div>' + '</div>' + '</div>'; document.querySelector('.stage').appendChild(this.mainElem); this.mainElem.style.left= info.xPos+'%'; }
-
해결됨HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌1)
가상클래스 hover 활용한 실전 퍼블리싱 04(위아래로 분리되는 호버 네비게이션 이펙트) 정렬에 대해서...
인라인블록으로 했는데 정렬이 안되고 자꾸 붙습니다...ㅠㅠ 올려주신 완성본 파일 css를 붙여넣어도 정렬이 안되네요..ㅠㅠ
-
미해결단 두 장의 문서로 데이터 분석과 시각화 뽀개기
Library 질문입니다.
안녕하세요 Library 다음에 method 지정하는데, melt는 pd.에 나오고, pivot은 df.에 따르는데, 어떤 규칙이 있나요. logic에서도 마찬가지여서, 작성하면서 혼돈이 많이 되네요. 아님 그냥 외워야 되는건지요. 그리고 별개의 질문인데요. data 읽어 올 때 list of dictionary 하고 list of list 개념 설명 부탁합니다. 어떤 차이점이 있고 어떤 방식으로 활용해야 되는지요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
cannot find symbol
이런 에러가 뜨는데 어떻게 수정하면 될까요?
-
미해결웹 개발자와 정보보안 입문자가 꼭 알아야 할 웹 해킹 & 시큐어 코딩
[실습4-1] XXE Injection 공격 실습
[실습4-1] XXE Injection 공격 실습 편에서 아래와 같이 외부 개체 참조 테스트를 위해 XML을 입력하면 secret_info.txt 파일 내용이 보이지 않는 경우가 있습니다. PHP5 에서는 문제가 없는 것 같고 PHP7에서 문제가 되네요. xmlparser.php 내 simplexml_load_string 함수를 호출할 때 아래와 같이 옵션을 지정해주면 secret_info.txt 문자열을 정상적으로 확인할 수 있습니다. 혹시라도 저 처럼 AMP 환경이 아닌 곳에서 학습을 진행하고 계시다면 참고하시면 좋을 것 같습니다.
-
미해결[리뉴얼] 처음하는 파이썬 백엔드와 웹기술 입문 (파이썬 중급, flask[플라스크] 로 이해하는 백엔드 및 웹기술 기본) [풀스택 Part1-1]
after_request 와 브라우저에 출력되는 화면 순서 질문입니다!
안녕하세요! 질 좋은 강의에 감사인사부터 드립니다. 다름이 아니라 질문이 한 가지 있는데요! 해당 강의 속 코드를 설명하시면서 출력 화면 순서가 before_first_request -> before_request -> route경로가 있는 함수 -> after_request 이렇게 되는 것 같은데 그렇다면 route 경로가 있는 함수에서 리턴해주어서 브라우저 화면에 출력되는 "Hello Flask" 가 브라우저 화면에 출력된 이후에 after_request 함수가 실행되는 순서인가요? 아니면 단순히 route경로가 있는 함수에서 print('hello') 부분만 after_request 함수 이전에 출력되는 건가요!? 만약 위 질문이 이해가 안가신다면 답변 달아주시면 더 상세한 설명 해드리겠습니다 ㅜㅜ
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
조회 v3.1에서 to One 관계는 모두 페치 조인하고 나머지 컬렉션은 지연로딩을 유지했을때 다음과 같은 에러가 발생합니다.
좋은 강의 감사합니다. 조회 v3.1에서 to One 관계는 모두 페치 조인하고 나머지 컬렉션은 지연로딩을 유지했을때 다음과 같은 에러가 발생합니다. query specified join fetching, but the owner of the fetched association was not present in the select list 고심하던 중 @Query부분을 value 와 countQuery로 나눠어서 처리 한 결과 정상적으로 조회 됬습니다.(Spring Data Jpa사용) 예) @Query(value = "select u from User u join fetch u.store s", countQuery = "select count(u) from User u") Page<User> findAllUser(Pageable pageable); 꼭 countQuery를 사용해야 하는지 궁금합니다.
-
미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
질문있습니다 선생님
캐릭터랑 똥이랑 충돌했을 시 어떤 다른 이미지를 띄우고 싶을 때는 어떻게 하면 좋을까요? 1. ending image 를 image.load로 지정 2. screen.blit 을 통해 화면에 그리기 3. colliderect 시 pygame.image.load (경로) 를 넣었는데 생각한대로 응용이 되지 않습니다.ㅠ
-
미해결애플 웹사이트 인터랙션 클론!
offsetHeight는 어디서 가져 온 값인가요?
} else if (sceneInfo[i].type === 'normal') { sceneInfo[i].scrollHeight = sceneInfo[i].objs.container.offsetHeight;
-
미해결코린아, 코딩하자! with 파이썬
안녕하세요 선생님! 코드 짰는데 Invalid syntax 오류가 생겨 질문올립니다.
안녕하세요! 강의 잘 수강하고 있습니다. 우리 천일 후에 만나! 에서 유효한 날짜인지 확인하는 함수를 스스로 짜보았는데요, 실행시키니까 두번째 줄에 Invalid syntax 라고 하였는데 어디가 틀린지 잘 모르겠어서 질문 올립니다. 코드는 아래처럼 짰습니다. def invaliddate(y, m, d) : 31month = [1, 3, 5, 7, 8, 10, 12] if (m in 31month) : if(d<=31) : return False else : return True elif(m==2) : if(y%4==0 and d<=29) : return False elif(y%4!=0 and d<=28) : return False else : return True else : if (d<=30) : return False else : return True
-
따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]
답변 부탁드립니다!!
삭제된 글입니다
-
미해결Kevin의 알기 쉬운 RxJava 1부
이해가 잘 안가서 질문하나 드려요.
DROP_LATEST 의 경우 강사님의 설명에서는 onBackPressureBuffer의 첫번째 매개변수인 capacity에 128 의 값을 넣으면 127개까지 정상적으로 발행이 되고 그 후에 나오는 overflow라는 메시지를 보면서 128, 129 가 오버플로 되고 있다고 설명을 하셨습니다. 그리고 그 오버플로우 돼서 나간 값인 128, 129 가 다른곳에 저장 되어있다가 버퍼에 들어온다고 말씀하셨습니다. (버퍼를 지정했는데 그 버퍼 외의 공간에 overflow된 값을 저장하는 것도 말이 안됨) 하지만 이게 맞지 않는 것 같습니다. 일단 127까지(capacity에 무관) 값이 발행되면 그 이후에 들어오는 값들을 capacity만큼 버퍼에 쌓게 됩니다. 현재 발행 속도는 1ms 이므로 0.001초마다 발행이 되어야하죠. capacity를 256으로 하였다면 256만큼 버퍼에 쌓여야하니 대략 0.256초 이후에 오버플로우가 발생 할 겁니다. 0.257 이후에 오버플로우가 발생합니다. 그리고 255 이후인 값들은 들어오지 못하고 최신값부터 버려지겠죠. 127+255 는 정확히 382 입니다. 여기까지 버퍼에 들어가서 순차적으로 처리하겠죠. 그 이후는 오버플로우 되어서 최신의 데이터가 삭제 되니. 이렇게 382에서 583으로 점프합니다. 해당 부분의 강의가 어떻게 하려고해도 이해가 안돼서 검색을 해보니 저런 의미로 설명이 되어있더라고요. 여기에 대한 명확한 설명을 부탁드립니다. 44,000원 주고 강의를 신청했는데 초장부터 잘못된 정보로 강의를 듣다보니 믿음이 좀 깨집니다. 정확한 답변 부탁드리겠습니다.