묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자
pickle 사용시 글자 깨짐
(사진)
-
해결됨스프링 시큐리티
csrf 필터 질문
안녕하세요. 강의를 듣던 중 의문이 생겨 질문합니다. csrf 토큰을 이용해 현재 들어온 요청이 악의적인 사이트로부터 온 요청이 아닌 것을 검증한다라는 개념은 이해할 수 있었는데요. 아래 시나리오로 악의적인 form 페이지를 생성해도 csrf 필터가 악의적인 요청을 구별할 수 있는지 궁금합니다. 0. 모든 도메인에 대한 cors 요청은 열려 있다고 가정 1. 악의적인 사이트에 사용자가 접속 2. 악의적인 사이트는 실제 form 페이지를 요청 3. 실제 form 페이지에서 csrf 토큰 파싱 & 위조 form 페이지에 csrf 토큰 삽입 4. 사용자에게 위조 form 페이지 제공
-
미해결스프링 핵심 원리 - 기본편
싱글톤을 직접 만들면 안좋은 이유에 관해
몇몇 스택오버플로우 글과 이펙티브 자바를 통해, 자바에서 + 멀티쓰레드 환경에서 완벽하게 싱글톤을 구현하는 것이 거의 불가능에 가깝다고 들었습니다. 그런 이유로 스프링 컨테이너의 싱글톤을 사용한다는 말도 같이 보았는데요... 이런 말이 어느 정도 신뢰도가 있는 것인지 알고 싶습니다. (영상의 "싱글톤 컨테이너" 파트에선 이 부분을 다루지 않아 질문하게 되었습니다) . 예를 들면 이런 글입니다 : https://dzone.com/articles/enforcing-java-singletons-is-very-hard
-
미해결[개정판] 파이썬 머신러닝 완벽 가이드
kfold split, accuracy, predict 검증 API... 등등의 작동 방식에 대해 질문이 있습니다.
위의 메서드, API 들이 실제 어떻게 동작하는지 각각의 코드를 보고 싶은데 어떻게 하면 알 수 있을까요? 메서드나 API를 잘 활용하는게 중요하긴 하지만 이 메서드 자체가 어떻게 작동하는지 대강만 알고 사용하는 거 같아 질문 드립니다!!
-
미해결애플 웹사이트 인터랙션 클론!
opacity out 이 안됩니다. script 검토 부탁드립니다.
(() => { let yOffset = 0; // window.pageYOffset 대신 사용할 변수 / 편의상 변수를 만들어서 적용 let pervScrollHeight = 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"), messaageA: document.querySelector("#scroll-section-0 .main-message.a"), messaageB: document.querySelector("#scroll-section-0 .main-message.b"), messaageC: document.querySelector("#scroll-section-0 .main-message.c"), messaageD: document.querySelector("#scroll-section-0 .main-message.d"), }, values: { messaageA_opacity_in: [0, 1, { start: 0.1, end: 0.2 }], messaageB_opacity_in: [0, 1, { start: 0.3, end: 0.4 }], messaageB_opacity_out: [1, 0, { start: 0.25, end: 0.3 }], }, }, { // 1 type: "normal", heightNum: 5, scrollHeight: 0, objs: { container: document.querySelector("#scroll-section-1"), }, }, { // 2 type: "sticky", heightNum: 5, scrollHeight: 0, objs: { container: document.querySelector("#scroll-section-2"), }, }, { // 3 type: "sticky", heightNum: 5, scrollHeight: 0, objs: { container: document.querySelector("#scroll-section-3"), }, }, ]; function setLayout() { // 각 스트롤 섹션의 높이 세팅 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`; } // console.log(sceneInfo); 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 - pervScrollHeight; // const scrollRatio = yOffset / 현재씬의 scrollHeight; const scrollHeight = sceneInfo[currentScene].scrollHeight; const scrollRatio = (yOffset - pervScrollHeight) / scrollHeight; // console.log(currentScene); // 섹션 확인 switch (currentScene) { case 0: // console.log("o play"); const messaageA_opacity_in = calcValues( values.messaageA_opacity_in, currentYOffset ); const messaageA_opacity_out = calcValues( values.messaageA_opacity_out, currentYOffset ); if (scrollRatio <= 0.22) { // in objs.messaageA.style.opacity = messaageA_opacity_in; } else { // out objs.messaageA.style.opacity = messaageA_opacity_out; } console.log(messaageA_opacity_in); break; case 1: // console.log("1 play"); break; case 2: // console.log("2 play"); break; case 3: // console.log("3 play"); break; } } function scrollLoop() { enterNewScene = false; pervScrollHeight = 0; // 초기화 작업 for (let i = 0; i < currentScene; i++) { // pervScrollHeight = pervScrollHeight + sceneInfo[i].scrollHeight; pervScrollHeight += sceneInfo[i].scrollHeight; } if (yOffset > pervScrollHeight + sceneInfo[currentScene].scrollHeight) { enterNewScene = true; currentScene++; document.body.setAttribute("id", `show-scene-${currentScene}`); } if (yOffset < pervScrollHeight) { 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); // => HTML /DOM구조만 로딩되면 실행 window.addEventListener("load", setLayout); // => 웹 페이지에 있는 이미지/모든 리소스까지 모두 로드된 후에 실행 window.addEventListener("resize", setLayout); })();
-
미해결Vue.js 끝장내기 - 실무에 필요한 모든 것
swagger 로 회원 가입한뒤에 몽고 디비 클라우드에 데이터가 올라가나여?
안녕하세요 좋은 강의 만들어 주셔 감사합니다 질문이 하나 있습니다. swagger 로 회원 가입한뒤에 몽고 디비 클라우드에 데이터가 올라가나여? 몽고 디비 클라우드 컬렉션즈를 클릭해봐도 아무것도 없어서여 알려주시면 감사하겠습니다.
-
미해결디지털 포렌식 기초
강의 내용이 보이지 않습니다.
안녕하세요. 강의 내용이 보이지 않는데죄송하지만 혹시 확인 가능하실까요?
-
미해결데브옵스(DevOps)를 위한 쿠버네티스 마스터
설정에서 네트워크 연결
환경설정에서 네트워크의 natnetwork만들고 master work1 work2 모두 네트워크의 natwork 바꿔줬는데, kubeadm init 실행하면 이미지를 못받아 옵니다. 동일하게 했는데도 네트워크 땜에 못받아오는데, 이건 어떻게 해결해야하나요?? 현재는 네트워크를 어댑터에 브리지로 설정하고 en0:Wi-Fi(Airport)로 설정해서 kubeadm init을 실행한 상태입니다. 이렇게 되면 문제가 되나요? [preflight] You can also perform this action in beforehand using 'kubeadm config images pull' error execution phase preflight: [preflight] Some fatal errors occurred: [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.19.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: x509: certificate signed by unknown authority , error: exit status 1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager:v1.19.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: x509: certificate signed by unknown authority , error: exit status 1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-scheduler:v1.19.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: x509: certificate signed by unknown authority , error: exit status 1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-proxy:v1.19.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: x509: certificate signed by unknown authority , error: exit status 1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/pause:3.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: x509: certificate signed by unknown authority , error: exit status 1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/etcd:3.4.13-0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: x509: certificate signed by unknown authority , error: exit status 1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/coredns:1.7.0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: x509: certificate signed by unknown authority , error: exit status 1 [preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...` To see the stack trace of this error execute with --v=5 or higher
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
Router 를 사용해 SSR 페이지 이동할 때 질문입니다!
/user/[id].js 로 Link 태그를 통해 접근했을 때 userInfo 가 null 인 에러를 해결하려고 이것저것 해보던중 /user/[id].js 안에 {/* <title>{userInfo.nickname}님의 글</title> <meta name="description" content={`${userInfo.nickname}님의 게시글`} /> <meta property="og:title" content={`${userInfo.nickname}님의 게시글`} /> <meta property="og:description" content={`${userInfo.nickname}님의 게시글`} /> <meta property="og:image" content="https://nodebird.com/favicon.ico" /> <meta property="og:url" content={`https://nodebird.com/user/${id}`} /> */} Head 안에 위 부분을 주석처리하니까 정상적으로 렌더링 되었어요! 혹시 원인이 뭔지 알 수 있을까요? 스크립트가 실행되기 전 Head 안에 userInfo 를 찾다가 에러를 나는 것인지.. 다른 이유에서인지.. 그리고 제로초님 깃헙 클론받아서 실행할 때 next 디펜던시 버전을 9.5.3으로 변경해서 실행해보니 저와 동일한 에러가 났었어요 혹시 확인 가능하실까요?
-
미해결배틀로얄 게임을 만들어보며 배우는 언리얼 게임 개발
파일은 어디서 받나요
강의를 듣다보면 어디에 올린 에셋 등의 얘기가 나오는데 어디서 받나요
-
해결됨무작정 따라하며 원리를 깨우치는 웹 해킹 : WebGoat 편
버프스위트 사용할 때 질문
버프스위트 프록시에서 강의에 나온 것처럼 html 형식인 response는 안보이는데 어떻게 해야하나요? 설정에서 바꿔야 하는 건가요?
-
미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
질문
tpyeorm , sequelize 둘 중 어느것이 자주 쓰이나요?
-
미해결비전공자를 위한 개발자 취업 개론
비전공 문과 대학 재학생 부트캠프 가도 괜찮을까요?
안녕하세요 김병욱 튜터님. 경영학과 2학년 재학중인 25살 대학생입니다. 다름이 아니라 스타트업을 준비하다가 개발자를 구하기가 힘들어 답답함에 개발을 직접 배워보게 되었는데, 생각보다 적성에 맞음을 느끼고 개발쪽으로 진로를 돌렸는데요. 현재까지 몇개월간 독학이나 인강으로 공부를 계속해왔는데, 진도가 느려 답답하기도 하고 배움에 대한 욕구가 충족되지 않아서 고민하던중 튜터님의 강의를 듣고 부트캠프라는 것을 알게 되었습니다. 이전까지는 막연하게 복수전공, 융합전공쪽으로 생각하고 있었는데, 학교공부가 적성에 안맞아 학점관리도 안된 상태기도 하여 부트캠프를 진지하게 고민하고 있는데요. 튜터님은 졸업이후에 부트캠프에 가신 건지, 제 경우에는 아직 4학기나 남은 상태인데 휴학을 하고 부트캠프를 통한 취업이 맞는 선택일지 많이 고민되는 상황입니다. 학교에서 전공과 개발 공부를 병행할지, 아니면 휴학 후 부트캠프 경험을 해보는게 좋을지... 제 상황에서 어떤 선택이 좋을지 간단한 조언이라도 좀 부탁드려도 될까요?
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
레디스가 뭔지 설명하는부분이 있었나요?
?? 나중에나오는건지 차례대로 보는데 못본거같습니다만.. toolbox 터미널에서는 복사방법을 잘모르겠네요 ... cmd에서는 그대로 컨트롤c컨트롤v인데 요기는 안되네영..
-
미해결HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌1)
시작 합니다.
제가 국비학원을 수료를 마쳤는데요.. 국비 선생님께 질문을 해도 전혀 답변을 못해주시고 설명도 없이 코드만 치는 수업을 계속 받구 6개월이 지났는데 저에게 남는게 하나도 없더라구요; 정말 마지막이라고 생각하고 독학을 해보려고 하는데요;; 열심히 하면 기본이라도 가져갈수 잇을까요 ㅠ? 정말 하소연할때도 없구 ㅠ 그냥 진작에 독학을 했다면 어땟을까 하는 생각뿐입니다. ㅠ 일단 열심히 들어보겟습니다. ㅠ 아 그리고 미리보기는 넘기고 실전 필수 부터 봐도되겠지요?
-
해결됨진짜 현업에서 쓰이는 직장인의 실무 엑셀 - 데이터 가공부터 분석까지
Data Format Error 및 vlookup으로 근사치 구하는 방법
제품의 가격대를, 병합 기능을 활용하여 작업을 하고 있습니다. 기본 데이터작업을 마무리하고, " 완전외부"조건으로 병합을 통해 가격대를 구하는 마지막 작업 중,아래와 같은 에러를 만났습니다. "왼쪽모두"로 작업했을 경우는 정상적으로 작업이 되는데,"완전외부" "오른쪽외부"모두 동일한 에러가 발생합니다. 구글링을 통해서 보니, power query에서 자주 발생하는 에러라고 하는데요.문자와 숫자를 같이쓸경우 이와같은 에러가 발생하는 경우도 있다고 해서, 숫자로만 "왼쪽외부"병합을 하였으나동일한 문제가 발생하고 있습니다.38만개행, 40개열정도의 데이터 작업인데요..혹시 data가 많아서 발생할 수도 잇는것인지요?혹시,이런에러가 발생했을경우 해결방법이 어떻게되는지 문의 드립니다.그리고, 완전외부 병합으로 vlookup의 근사치구하는 방법외에, 다른 방법이 있을지도 문의 드립니다.
-
미해결단 2주간 키운 블로그로 월 80만원 용돈 벌기
추가 자료가 있는건가요?
추가자료가 있는건가요? 후기는 작성했어요 andy-rabbit@naver.com 저도 부탁드려요~
-
미해결[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드
a 태그
navi 에서 a 태그하면 밑줄이 나오는데 영상에서는 없애는 지정을 하지 않았는것 같은데 밑줄이 없네요.. 그리고, 레이아웃 할때는 div로 했는데 여기서는 article로 하네요.. 이유는 알겠는데 갑자기 헷갈려서 그냥 div로 해도 되는건지 궁금합니다 그리고.. menu에는 목록이라 ul>li 로 했는데 sub-menu는 ul>li가 아니고 div>a 태그로 했는데..차이가 있는건가요?
-
미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
scrapy 관련...
안녕하십니까, 선생님이 주신 코드로 한것과 제 코드로 한것 모두 동일한 문제가 있어서 문의드립니다. scrapy 최종에서, 1st category crawling과 2st category crawling 모두를 실행을 했을때, 1st 만 출력이 되고, 2st는 출력이 안되는 문제가 있습니다. 연결고리상에 끊어진 점이 있나 찾아보았는데 없더라구요.. 또한 1st 내용을 지우고, 2st만 출력을 했을때는 정상적으로 출력이 되었습니다. 즉, def parse_mainpage(self, response): 안의 두 for문 중에서 첫번쨰 for문만 작동하는 듯합니다. 여기에 대해서 피드백 주시면 감사하겠습니다. --- 출력 결과값(터미널)--- (base) PS C:\Users\amore\ecommerce> scrapy crawl gmarket_category_all -o gmarket.csv -t csv c:\anaconda3\lib\site-packages\scrapy\commands\__init__.py:129: ScrapyDeprecationWarning: The -t command line option is deprecated in favor of specifying the output format within the -o option, please check the -o option docs for more details feeds = feed_process_params_from_cli(self.settings, opts.output, opts.output_format) c:\anaconda3\lib\site-packages\scrapy\spiderloader.py:40: UserWarning: There are several spiders with the same name: GmarketCategoryAllSpider named 'gmarket_category_all' (in ecommerce.spiders.gamrket_category_all) GmarketCategoryAllSpider named 'gmarket_category_all' (in ecommerce.spiders.gmarket_category_all) This can cause unexpected behavior. category=UserWarning, parse_mainpages parse_maincategory 컴퓨터/전자 ALL parse_maincategory 생활/주방/건강 ALL parse_maincategory 식품 ALL parse_maincategory e쿠폰/티켓 ALL parse_maincategory 여행 ALL parse_maincategory 스포츠/자동차 ALL parse_maincategory 가구/침구 ALL parse_maincategory 유아동/출산 ALL parse_maincategory 화장품/헤어 ALL parse_maincategory 도서/음반 ALL parse_maincategory 신발/잡화 ALL parse_maincategory 패션의류 ALL (base) PS C:\Users\amore\ecommerce> --- 전문코드-- # -*- coding: utf-8 -*- import scrapy from ecommerce.items import EcommerceItem class GmarketCategoryAllSpider(scrapy.Spider): name = 'gmarket_category_all' def start_requests(self): yield scrapy.Request(url='http://corners.gmarket.co.kr/Bestsellers', callback=self.parse_mainpages) def parse_mainpages(self, response): print("parse_mainpages") category_links = response.css('div.gbest-cate ul.by-group li a::attr(href)').getall() category_names = response.css('div.gbest-cate ul.by-group li a::text').getall() # 1st category crawling for index, category_link in enumerate(category_links): yield scrapy.Request(url='http://corners.gmarket.co.kr' + category_link, callback=self.parse_items, meta={'main_category_name':category_names[index], 'sub_category_name': 'ALL' }) # 2nd category crawling for index, category_link in enumerate(category_links): yield scrapy.Request(url='http://corners.gmarket.co.kr' + category_link, callback=self.parse_subcategory, meta={'main_category_name':category_names[index] }) def parse_subcategory(self, response): print ("parse_subcategory", response.meta['main_category_name']) subcategory_links = response.css('div.navi.group > ul > li > a::attr(href)').getall() sub_category_names = response.css('div.navi.group > ul > li > a::text').getall() for index, subcategory_link in enumerate(subcategory_links): yield scrapy.Request(url='http://corners.gmarket.co.kr' + subcategory_link, callback=self.parse_items, meta={'main_category_name':response.meta['main_category_name'], 'sub_category_name':sub_category_names[index] }) def parse_items(self, response): print ("parse_maincategory", response.meta['main_category_name'], response.meta['sub_category_name']) best_items = response.css('div.best-list') for index, item in enumerate(best_items[1].css('li')): doc = EcommerceItem() ranking = index + 1 title = item.css('a.itemname::text').get() ori_price = item.css('div.o-price::text').get() dis_price = item.css('div.s-price strong span span::text').get() discount_percent = item.css('div.s-price em::text').get() if ori_price == None: ori_price = dis_price ori_price = ori_price.replace(",", "").replace("원", "") dis_price = dis_price.replace(",", "").replace("원", "") if discount_percent == None: discount_percent = '0' else: discount_percent = discount_percent.replace("%", "") doc['main_category_name'] = response.meta['main_category_name'] doc['sub_category_name'] = response.meta['sub_category_name'] doc['ranking'] = ranking doc['title'] = title doc['ori_price'] = ori_price doc['dis_price'] = dis_price doc['discount_percent'] = discount_percent #print (ranking, title, ori_price, dis_price, discount_percent) yield doc 강의와 관련있는 질문을 남겨주세요.• 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등)• 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색을 해주세요. (중복 질문을 자제해주세요.)• 서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등) 질문 전달에도 요령이 필요합니다.• 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요.• 강의실 페이지(/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다.• 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재해주세요. • 수업 특정 구간에 대한 질문은 꼭 영상 타임코드를 남겨주세요! 구체적인 질문일수록 명확한 답을 받을 수 있어요.• 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요.• 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요.• 정확한 질문 내용과 함께 코드를 적어주시거나, 캡쳐 이미지를 첨부하면 더욱 좋습니다. 기본적인 예의를 지켜주세요.• 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. • 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. • 반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용은 스팸 처리 등 제재를 가할 수 있습니다.
-
해결됨IT보안을 위한 와이어샤크 네트워크 패킷 분석 실전
프롬프트에서 mergecap
프롬프트에서 mergecap을 사용하면The file "~~~"doesn't exist라고 떠요계속 파일 확인해보고 다시 만들어보고 했는데 계속 이래서,혹시 어떤 부분이 잘못된 건가요