묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결페이스북 클론 - full stack 웹 개발
vscode 사용중인데 ajax 실행시 어떻게 해야하나요?
안녕하세요 현재 vscode 사용중인데 ajax 실행시 웹서버 어떻게 해야하나요?
-
미해결인터랙티브 웹 개발 제대로 시작하기
브라우져 구분중에
(function () { const useragent = window.navigator.userAgent.toLowerCase(); if (useragent.indexOf('chrome') < 0 && useragent.indexOf('safari') < 0) { document.body.style.cssText = 'height: auto'; document.body.innerHTML = '<p style="padding: 20px; line-height: 1.6">본 예제는 Full CSS 3D가 사용된 페이지로, webkit 기반 브라우저(크롬, 사파리 등)에서 확인하며 학습하시는게 좋습니다.<br>CSS 3D 부분 외에는 브라우저 상관없이 인터랙티브 웹 페이지 개발을 위해 필수적이고 유용한 내용들을 다루고 있으니 꼭 처음부터 끝까지 공부해 보세요! :)</p>'; } })(); 이있는데요.. 엣지는 접속이되고 오류가 나던데.. 먹을 방법이 잇을까요?
-
미해결실전! Querydsl
Function 호출 오류
@Testpublic void sqlFunction() { List<String> result = queryFactory .select(Expressions.stringTemplate("function('replace', {0}, {1}, {2})", member.username, "member", "M")) .from(member) .fetch(); for (String s : result) { System.out.println("s = " + s); }}위와 같이 실행했을 경우 아래 오류가 발생합니다.Caused by: org.hibernate.QueryException: No data type for node: org.hibernate.hql.internal.ast.tree.MethodNode \-[METHOD_CALL] MethodNode: 'function (replace)' +-[METHOD_NAME] IdentNode: 'replace' {originalText=replace} \-[EXPR_LIST] SqlNode: 'exprList' +-[DOT] DotNode: 'member0_.username' {propertyName=username,dereferenceType=PRIMITIVE,getPropertyPath=username,path=member1.username,tableAlias=member0_,className=yhpark.querydsl.entity.Member,classAlias=member1} | +-[ALIAS_REF] IdentNode: 'member0_.member_id' {alias=member1, className=yhpark.querydsl.entity.Member, tableAlias=member0_} | \-[IDENT] IdentNode: 'username' {originalText=username} +-[PARAM] ParameterNode: '?' {label=1, expectedType=null} \-[PARAM] ParameterNode: '?' {label=2, expectedType=null}
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
임베디드 타입 문의드립니다.
영한님 안녕하세요. 요 몇일동안 열공모드로 달리고 있다보니 질문을 자주 남기게 되네요. (너무 귀찮게 해드려 죄송합니다..) 강의에서 임베디드 타입을 설명해주셨는데 실무에서는 혹시 임베디드 타입만 별도 패키지로 모아놓고 여러 엔티티에서 공통으로 활용을 하는 게 일반적인지 궁금합니다. 아니면 의존성이 어느 정도 있다고 판단하고 엔티티별로 나눠서 사용하는 지 알고 싶네요.. 공통으로 쓰는 것도 있을 것 같고, 결합도가 강한 건 따로 빼기도 할 거 같은데 주로 어떻게 사용을 하고 계신가요?
-
미해결R로 하는 웹 크롤링 - 실전편
자바스크립트 및 iframe으로 구성되어 있는 웹페이지 크롤링 문의
안녕하세요, 네이버 금융의 종목분석 페이지에 나와 있는 재무정보를 크롤링하고자 하는데 문제에 부딪쳐 문의 드립니다. (https://finance.naver.com/item/coinfo.nhn?code=005930) 아래 두 가지 방법으로 크롤링을 시도해보았습니다. 1) 강의에서 말씀하신 숨겨진 주소를 찾아서 크롤링 : 크롬 개발자 도구에서 Network 검사를 통해 숨겨진 주소를 확인하고 (이 경우 네이버가 지속적으로 인증값을 바꿈) JSON 형식으로 된 재무정보를 깔끔하게 불러들일 수 있으나, 인증값이 계속 바뀌기 때문에 이 부분을 핸들링 하는 것이 어려움. 따라서 아래 셀레니움을 이용한 방식을 사용하고자 하는데요, 2) 셀레니움을 통한 크롤링 : 따라서 셀레니움을 통해 크롤링을 시도했으나 소스가 iframe으로 보호되어 크롤링이 어렵습니다. 개발자도구에서 버튼의 xpath를 확인해도 정작 R에서는 읽어들이지 못하고 (iframe으로 숨겨진 탓으로 보입니다) css selector라는 크롬 익스텐션으로는 아예 재무정보 부분이 블록되어 있어서 제대로 된 xpath를 읽지 못합니다. 이 경우 핸들링을 어떻게 해야 할까요? 셀레니움 강의 부분은 짧아서 다른 정보를 찾아봤지만 파이썬으로 내용이 많이 나와 R과는 조금 다른 듯 합니다.
-
미해결React로 NodeBird SNS 만들기
포스트가 존재하지 않습니다 에러가 납니다ㅠㅜㅠ
if(!post)에서 걸려서 404에러가 나요ㅠㅠ console.log(post)찍어봐도 null이 나옵니다. 디비에는 잘 들어가 있는데 어디가 문제일까요??
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
프로그램 중지 시 오류 발생
실행 중인 프로그램을 중지하려고 하면 이런 오류가 나옵니다 무슨 오류이고 왜 발생하는 오류인가요?
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
55 게시판 크롤링 - 관련 질문
안녕하세요. 우선 양질의 컨텐츠를 제공해주신 강사님께 감사의 말씀 올립니다. 1. 목적 : 게시판(https://seeko.earlyadopter.co.kr/bbs/board.php?bo_table=mainnews&page=1)의 제목을 크롤링한다. 2. 작성코드 import requests from bs4 import BeautifulSoup for index in range(1, 4): res = requests.get('https://seeko.earlyadopter.co.kr/bbs/board.php?bo_table=mainnews&page='+ str(index)) soup = BeautifulSoup(res.content, "html.parser") data = soup.select('#fboardlist > div.list-board > ul > li > div.wr-subject > a') for item in data: print(item.get_text().split('\t')[5]) 위와 같이 작성하면 원하는 답을 도출할 수 있었습니다. 여기서 질문드립니다. 3. 질문 수정코드 : data = soup.select('#fboardlist > div.list-board > ul > *****li:nth-child(1) > div.wr-subject > a') 게시판의 1개의 제목만 출력하기위해 위와 같이 수정하고 item.get_text() 하면 아래와 같이 나옵니다. 1 탄소 발자국을 줄이는 나이키 신발 1위와 같이 데이터가 출력되기에 탭키로 스플릿해서 출력했습니다. 결국 원하는 데이터가 도출되기는 하였으나 왠지 좀 불안해보이고 전문성이 떨어져 보입니다.아래는 해당 제목의 엘러먼트 입니다.<a href="https://seeko.earlyadopter.co.kr/bbs/board.php?bo_table=mainnews&wr_id=745898" class="item-subject"> <span class="orangered visible-xs pull-right wr-comment"> <i class="fa fa-comment lightgray"></i> <b>1</b> </span> <san class="wr-icon wr-image"></span> 탄소 발자국을 줄이는 나이키 신발 <span class="count orangered hidden-xs">1</span> </a>엘러먼트 값 중 a태그 안의 구성은 ①텍스트가 없는 태그, ②불필요한 텍스트가 작성된 태그, ③원하는 결과 값을 가지고 있는 텍스트등으로 나눠볼 수 있으며 이를 분별하는 방법에 대한 문의 입니다.①과 ②, ③은 get_text로 분리할 수 있지만 ②와 ③은 어떻게 분리할지 잘 모르겠습니다. 아무리 머리를 쥐어짜도 스플릿외에는 생각이 나지 않습니다.하위 디렉토리(태그)를 제거하여 추출하거나 동일 디렉토리의 특정태그만 분별 or 태그가 없는 택스트만 분별하는 방법이 있는지요?감사합니다.
-
미해결코틀린 기반 안드로이드 앱개발 기본 1단계
안드로이드 스튜디오의 xml 텍스트로 보기
영상 강의에서는 xml 파일을 Design / Text 탭을 이동하여 직접 스크립트를 볼 수 있는데요. 현재 제가 설치한 안드로이드 스튜디오 버전(3.6.2)에서는 해당 기능을 찾지를 못하겠어서 혹시 이 기능을 어디서 쓸 수 있는지 질문 드립니다.
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 유튜브 사이트 만들기
url : res.req.file.path 오류..
지속적으로 path가 undefined으로 오류가 나는데 왜그럴까요 ㅠㅠ 강사님이 완료하신 github 코드도 붙여넣어도 동일하게 오류가 생기네요.ㅠ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Junit 테스트 도중 에러 발생합니다.
위와 같은 에러 발생합니다. fail()을 지우고 돌리면 @TEST의 expected 옵션이 적용되지 않고 IllegalStateException이 발생하네요... 원인이 뭘까요? 소스코드 자체는 똑같이 작성했습니다.
-
미해결남박사의 파이썬으로 실전 웹사이트 만들기
등록된 글 수정시
로그인 보안 강화까지 강의를 들었습니다. 보안강화된 아이디로 로그인 한 후, 작성한 글 수정이 안됩니다. 아래와 같은 에러가 나타납니다. File "C:\Python\myweb\main\board.py", line 245, in board_edit board.update_one({"_id": ObjectId(idx)}, { "$set": { "title": title, "contents": contents, "attachfile": filename } }) flash("수정되었습니다.") return redirect(url_for("board.board_view", idx=idx)) else: UnboundLocalError: local variable 'filename' referenced before assignment adit.html {% extends "main.html" %} {% block contents %} <script> $(document).ready(function () { $("#summernote").summernote({ heigth: 300, minHeight: null, maxHeight: null, lang: "ko-KR", popover: { image: [], link: [], air: [] }, //콜백함수는 호출이 되어진다. //이미지 업로드 관련 callbacks: { onImageUpload: function(image) { for(var i = 0 ; i < image.length ; i++) { uploadImage(image[i]); } } } }); }); //웹사이트 콘솔창에서 볼수 있는 것 //function uploadImage(image) { // console.log(image); //} function uploadImage(image) { //객체를 설정한다(담기 위한 그릇) var data = new FormData(); console.log(image) // 넘어온 이미지 객체를 append 시켜준다. data.append("image", image); var csrf_token = "{{csrf_token()}}"; $.ajaxSetup({ beforeSend: function(x, s){ //s가 GET|HEAD|OPTIONS|TRACE 중 하나이면 if(!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(s.type)){ //x(내부통신을 전담하는 객체 에이젝스에서)가 해더를 추가하는데 해더의 이름은 X-CSRFToken이고 값은 csrf_token이다. x.setRequestHeader("X-CSRFToken", csrf_token) } } }); $.ajax({ //페이지 이동없이 내부적으로 통신한다. //url 주소로 찾아준다. url: "{{url_for('board.upload_image')}}", cache: false, contentType: false, processData: false, //데이터를 data: data, //포스트 형식으로 전달한다. type:"post", //위 데이터 전송이 성공하면 success: function(url) { //<omg src=서버주소> 태그를 생성해준다. var image = $("<img>").attr("src",url).css('max-width', "900px"); //insertNode:이미지를 강제적으로 추가해준다. $("#summernote").summernote("insertNode",image[0]); }, //성공하지 못하면 오류를 보여준다. error: function(data) { console.log(data); alert(data); } }); } </script> <script> function CheckEditForm() { if($.trim($("#title").val()) == "") { alert("제목을 입력하세요."); $("#title").focus(); return false; } if($.trim($("#summernote").val()) == "") { alert("내용을 입력하세요."); $("#summernote").focus(); return false; } return true; } </script> <form name="form" method="POST" action="{{url_for('board.board_edit', idx=data._id)}}" enctype="multipart/form-data"> <!--보안 강화--> <input type="hidden" name="csrf_token" value="{{csrf_token()}}"> <div class="form-group"> <label for="name">작성자</label> <input class="form-control" type="text" name="name" value="{{session['name']}}" readonly> </div> <div class="form-group"> <label for="title">제목</label> <input class="form-control" type="title" name="title" value={{data.title}} > </div> {% if data.attachfile %} <div class="form-check text-right"> <input type="checkbox" class="form-check-input" id="deleteoldfile" name="deleteoldfile"> <label class="form-check-label" for="deleteoldfile">첨부파일 삭제 ({{data.attachfile}})</label> </div> {% endif %} <div class="form-group"> <label for="contents">내용</label> <textarea rows ="8" class="form-control" name="contents" id="summernote" >{{data.contents}}</textarea> </div> <!-- 파일 첨부 버튼 --> <div class="custom-file"> <input class="custom-file-input" id="customFile" type="file" name="attachfile"> <label class="custom-file-label" for="customFile">파일선택</label> </div> <div class="text-center"><input class="btn btn-primary" type="submit" value="수정하기"></div> </form> <!-- <table> <form name="form" method="POST" action="{{url_for('board.board_edit', idx=data._id)}}"> <tr> <td>작성자</td> <td><input type="text" name= "name" value="{{session['name']}}" readonly></td> </tr> <tr> <td>제목</td> <td><input type="text" name= "title" value={{data.title}}></td> </tr> <tr> <td>내용</td> <td><textarea name= "contents">{{data.contents}}</textarea></td> </tr> <tr> <td colspan="2"><input type="submit"></td> </tr> </form> </table> --> {% endblock %} #board.html from main import * # 큰 프로젝트시 /board/list 같은 것을 만들어주는 것 from flask import Blueprint # 게시판에 관한 내용 from flask import send_from_directory #이 블루프린트의 이름은 "board"이고 블루프린트가 선언된 곳에 앞에다가는 모두 "/board"를 붙여준다. blueprint = Blueprint("board", __name__, url_prefix="/board") # 첨부파일을 삭제하는 기능 def board_delete_attach_file(filename): # abs : 절대경로 abs_path = os.path.join(app.config["BOARD_ATTACH_FILE_PATH"], filename) # 파일이 abs에 존재하면 if os.path.exists(abs_path): os.remove(abs_path) return True return False @blueprint.route("/upload_image", methods=["POST"]) def upload_image(): if request.method == "POST": file = request.files["image"] # 확장자가 문제 없다고 판단 되면 if file and allowed_file(file.filename): # 임의의 랜덤의 문자 열로 파일명이 생성하게 된다. filename = "{}.jpg".format(rand_generator()) # 실제 파일이 저장될 경로 savefilepath = os.path.join(app.config["BOARD_IMAGE_PATH"], filename) # 파일저장 file.save(savefilepath) # 주소를 리턴해준다. return url_for("board.board_images", filename=filename) # @blueprint.route("/images/<filename>") def board_images(filename): # send_from_directory : 밖에 폴더에 접근하기 위한 함수 # app.config["BOARD_IMAGE_PATH"] : 절대경로 # filename : 그 파일의 이름 # 독립적인 폴더에 저장하고 웹에서는 이와 같은 방식으로 접근한다. return send_from_directory(app.config["BOARD_IMAGE_PATH"], filename) @blueprint.route("/files/<filename>") def board_files(filename): # as_attachment=True :다운로드 형태 return send_from_directory(app.config["BOARD_ATTACH_FILE_PATH"], filename, as_attachment=True) # 리스트 @blueprint.route("/list") def lists(): # 페이지 값(값이 없는 경우 기본 값은 1) page = request.args.get("page", default=1, type=int) # 한 페이지 당 몇 개의 게시물을 출력할 지 limit = request.args.get("limit", 7, type=int) search = request.args.get("search", -1, type=int) keyword = request.args.get("keyword", "", type=str) # 최종적으로 완성된 쿼리를 만들 변수 query = {} # 검색어 상태를 추가할 리스트 변수 search_list = [] if search == 0: search_list.append({"title": {"$regex": keyword}}) elif search == 1: search_list.append({"contents": {"$regex": keyword}}) elif search == 2: search_list.append({"title": {"$regex": keyword}}) search_list.append({"contents": {"$regex": keyword}}) elif search == 3: search_list.append({"name": {"$regex": keyword}}) # 검색 대상이 한 개라도 존재할 경우 query 변수에 $or 리스트를 쿼리 합니다. if len(search_list) > 0: query = {"$or": search_list} print(query) board = mongo.db.board datas = board.find(query).skip((page - 1) * limit).limit(limit).sort("pubdate",-1) # 전체 게시물의 총 개수 tot_count = board.find(query).count() # 마지막 페이지의 수를 구합니다. last_page_num = math.ceil(tot_count / limit) # 페이지 블럭을 5개씩 표기 block_size = 5 # 현재 페이지 블럭의 위치 block_num = int((page - 1)/block_size) # 블럭의 시작 위치 block_start = int((block_size * block_num) + 1) # 블럭의 마지막 위치 block_last = math.ceil(block_start + (block_size - 1)) return render_template( "list.html", datas=datas, limit=limit, page=page, block_start=block_start, block_last=block_last, last_page_num=last_page_num, search=search, keyword=keyword, title="게시판 리스트" #main.html의 title 값이 된다. ) # 상세페이지 @blueprint.route("/view/<idx>") @login_required # idx 값을 따라서 몽고 db에서 값을 가져오는 역할 def board_view(idx): # post 노출되지 않고 GET은 노출 됨 # idx = request.args.get("idx") if idx is not None: page = request.args.get("page") search = request.args.get("search") keyword = request.args.get("keyword") board = mongo.db.board # data = board.find_one({"_id": ObjectId(idx)}) data = board.find_one_and_update({"_id": ObjectId(idx)}, {"$inc": {"view": 1}}, return_document=True) if data is not None: result = { "id": data.get("_id"), "name": data.get("name"), "title": data.get("title"), "contents": data.get("contents"), "pubdate": data.get("pubdate"), "view": data.get("view"), "writer_id": data.get("writer_id", ""), "attachfile": data.get("attachfile","") } return render_template("view.html", result=result, page=page, search=search, keyword=keyword, title="글 상세보기") return abort(404) # # 글쓰기 @blueprint.route("/write", methods=["GET", "POST"]) @login_required def board_write(): # if session.get("id") is None: # return redirect(url_for("member_login")) if request.method == "POST": filename = None # 첨부된 파일이 있으면 if "attachfile" in request.files: file = request.files["attachfile"] # 허용된 파일이라면 if file and allowed_file(file.filename): # 파일 이름을 넘겨주고 새로운 파일 이름을 받는다. filename = check_filename(file.filename) # 새로운 파일 명으로 세이브해라 file.save(os.path.join(app.config['BOARD_ATTACH_FILE_PATH'], filename)) name = request.form.get("name") title = request.form.get("title") contents = request.form.get("contents") # print(name, title, contents) current_utc_time = round(datetime.utcnow().timestamp() * 1000) board = mongo.db.board post = { "name": name, "title": title, "contents": contents, "pubdate": current_utc_time, "writer_id": session.get("id"), "view": 0, } # 위 post에 attachfile가 추가 되어 나온다. if filename is not None: post["attachfile"] = filename x = board.insert_one(post) print(x.inserted_id) return redirect(url_for("board.board_view", idx=x.inserted_id)) else: return render_template("write.html", title="글 작성") @blueprint.route("/edit/<idx>", methods=["GET", "POST"]) def board_edit(idx): if request.method == "GET": board = mongo.db.board data = board.find_one({"_id":ObjectId(idx)}) if data is None: flash("해당 게시물이 존재하지 않습니다.") return redirect(url_for("board.lists")) else: if session.get("id") == data.get("writer_id"): return render_template("edit.html", data=data, title="글 수정") else: flash("글 수정 권한이 없습니다.") return redirect(url_for("board.lists")) else: title = request.form.get("title") contents = request.form.get("contents") # 값을 받는다. deleteoldfile = request.form.get("deleteoldfile", "") # db에 접속하여 board = mongo.db.board # id 값을 가져와서 data = board.find_one({"_id": ObjectId(idx)}) # 둘의 값이 같으면 if session.get("id") == data.get("writer_id"): file = None # 첨부파일이 추가된 상태라면 if "attachfile" in request.files: file = request.files["attachfile"] # 파일이 있고 확장자(allowed_file(file.filename):)에도 문제가 없다면 if file and allowed_file(file.filename): filename = check_filename(file.filename) #새로운 파일을 저장해라 file.save(os.path.join(app.config["BOARD_ATTACH_FILE_PATH"], filename)) # 예전파일이 있는 경우에는 기존파일을 삭제하고 재업로드해라 if data.get("attachfile"): board_delete_attach_file(data.get("attachfile")) # 첨부파일이 저장이 되진않았고 else: # 체크박스에 체크를 한 경우 on이 들어온다. if deleteoldfile == "on": filename = None if data.get("attachfile"): board_delete_attach_file(data.get("attachfile")) # 새로운 첨부파일도 없고 기존의 첨부파일도 삭제하지 않는 경우 else: filename = data.get("attachfile") board.update_one({"_id": ObjectId(idx)}, { "$set": { "title": title, "contents": contents, "attachfile": filename } }) flash("수정되었습니다.") return redirect(url_for("board.board_view", idx=idx)) else: flash("글 수정 권한이 없습니다.") return redirect(url_for("board.lists")) @blueprint.route("/delete/<idx>") def board_delete(idx): board = mongo.db.board data = board.find_one({"_id": ObjectId(idx)}) if data.get("writer_id") == session.get("id"): board.delete_one({"_id": ObjectId(idx)}) flash("삭제되었습니다.") else: flash("삭제 권한이 없습니다.") return redirect(url_for("board.lists"))
-
미해결React로 NodeBird SNS 만들기
Front 에서 익스프레스를 사용하지 않고 배포하려면??
프론트에서, 익스프레스 서버 사용하지 않고, 넥스트로만 EC2 에 배포하려면 어떻게 해야 할까요?? 백엔드 구성하지 않고, 단순 넥스트 웹페이지 로만 따로 만들어서 실습을 하고 있는데 이 부분에서 막히네요.
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
에러 검토중에 해결한 방법을 공유합니다.
에러 메시지를 분석한 결과, 암호화 후에 mxlength 에러인 경우에 실제 암호화된 데이터를 보니 60자 였습니다(버전 탓?) 그래서 예제에 50자로 설정된 password Maxlength를 70자로 수정하니 동작 되었습니다. 참고하세요. 감사합니다.
-
미해결CSS Flex와 Grid 제대로 익히기
이해가 안갑니다..
flex-grow에 들어가는 숫자의 의미는 아이템들의 flex-basis를 제외한 여백 부분을 flex-grow에 지정된 숫자의 비율로 나누어 가진다 라고 하셨는데.. 여기 보시면 flex-basis가 0 , 즉 auto로 되어있는데요. 강의에서 설명한 대로 생각하면 lorem에 저렇게 좁은 공백이 있어선 안되는 겁니다. 순수하게 저 문장만 놓고 보자면요. 공부하다가 혼돈이 와서 뒤에와서 다시 보고 있는데 어패가 있어서 질문을 합니다. 감사합니다.
-
미해결자바스크립트 비기너: 튼튼한 기본 만들기
안녕하세요? 선생님?
use strict관련하여 질문이 있습니다. 아래와 같이 작성후 실행하였는데 제가 생각한 결과가 나오지 않습니다. "use strict"; try { books = "변수를 선언하지 않음"; console.log(books); } catch(error) { console.log("run catch"); }; console.log(""); 이렇게 하면 error를 캐치해서 "run catch"를 출력해야 할 것 같은데 "변수를 선언하지 않음"이 출력되네요. 제 환경에서 use strict가 적용이 되지 않는것 같습니다. 제가 무얼 잘못 했거나 잘못 이해한 것일까요?
-
미해결남박사의 파이썬으로 실전 웹사이트 만들기
mongoDB collection량에 따른 속도
안녕하세요 박사님~! 수업 잘 듣고 있습니다. 하나 여쭤보려고 하는데, mongoDB를 사용하여 서비스를 구축하려고 하는데 만약 collection의 document 수가 상당히 많을 경우 이후에 속도가 느려질 수 있는건가요? 그래서 저는 생각했을 때 매달별로 collection을 날짜별로 나눠버릴까 생각을 하고 있는데 혹시 해당 부분에 대해서 꿀팁이 있으신지요? 아래와 같이 예시 드려요. [서비스 예시] - 각종 정보를 크롤링 하여 웹페이지에 표현하는 서비스 - 크롤링 된 정보량 : 1000개/일 - 크롤링 내용 중복을 없애기 위해 크롤링 하면서 DB에 해당 정보가 중첩되는지 검색 후 DB에 insert 여쭤보고 싶은 부분은 만약 collection안의 정보 수가 1,000,000개 정도 된다고 했을 때 파이썬으로 중첩여부를 판단할 때나 html에 표현되는 부분 그리고 사용자 사이드에서 검색을 하거나 했을 때 느려지는 부분이 어느정도 발생하는지 감이 안잡혀서요~ 어느정도의 DB량이 서비스를 원활하게 운영하는데 적당한지, 그리고 해당 부분을 잘 운영하기 위한 팁이 있는지 궁금합니다! 감사합니다.
-
미해결파이썬 입문 및 웹 크롤링을 활용한 다양한 자동화 어플리케이션 제작하기
Youtube_GUI ProgressBar_2 로딩 문제
첫 번째 ProgressBar 도 문제가 없었고 , 동영상 다운로드 기능까지 정상적으로 작동되는 것을 확인했습니다 . 이후 , 두 번째 ProgressBar 를 적용하기 위해 1) 해당 코드들을 직접 작성하기도 해보고, git에 업로드된 코드를 그대로 붙여보기도 했지만 오류가 발생하였습니다. (어떤 오류인지는 출력되지 않았습니다) 2) 단위적으로 테스트해보기 위해 해당 함수에 setValue(50)과 같이 단순한 int형을 주어도 progressbar는 출력되지 않았습니다. 3) 기존에 정상적으로 다운로드 되던 영상 파일이 손상된 형태로 다운로드 됩니다. -> 해당 영상 제목으로 파일은 생성되지만 , 영상은 재생되지 않습니다 해결 방법에 대해서 조언해주시면 감사하겠습니다 !!
-
미해결인스타그램 클론 - full stack 웹 개발
다른 강좌 같은 내용인가요?
안녕하세요. 해외에서 수강중인 학생입니다. 강의가 너무 유익하고 알차고 좋습니다. 이번에 페이스북 클론 만들기 올리셨더라고요. (인스타 만들기 결제한지 얼마 안됬는데... ㅠㅠ) 그래서 교육 과정을 살펴봤는데 많이 유사한거 같아서요. 두 수업의 차이점이 어느 정도 인지 궁금합니다. 그리고 이 수업을 듣고 페이스북 수업을 듣는게 객관적으로 값어치를 할지 궁금합니다. 어디에 여쭤봐야 될지 몰라서 여기에 글을 남깁니다. 혹시 여기에 남기는게 안되는거면 삭제 부탁드립니다.감사합니다.
-
해결됨스프링 프레임워크 핵심 기술
MessageSource 실습 중 실행창에 물음표로 출력되는 현상 질문
IoC컨테이너의 MessageSource 인터페이스 기능을 실습하던 중 실행창에 영어 이외의 문자들이 물음표로만 찍히는 현상이 있는데요. 왜 이런 현상이 발생하며 어떻게 해야 해결할 수 있을까요? 각각의 message properties file명과 내용은 다음과 같습니다. 1. messages.properties è title={0} Spring 2. messages_ja_JP.properties è title = {0}スプリング 3. messages_ko_KR.properties è title={0} 스프링 message source를 출력하기 위한 runner class 코드는 다음과 같습니다. package me.dave.springapplicaitioncontext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.context.MessageSource; import org.springframework.stereotype.Component; import java.util.Locale; @Component public class AppRunner implements ApplicationRunner { @Autowired MessageSource messageSource; public void run(ApplicationArguments args) throws Exception { Locale.setDefault(new Locale("en", "US")); System.out.println(Locale.getDefault()); System.out.println(messageSource.getMessage("title", new String[]{"Hello "}, Locale.getDefault())); System.out.println(messageSource.getMessage("title", new String[]{"Hello "}, Locale.KOREA)); System.out.println(messageSource.getMessage("title", new String[]{"Hello "}, Locale.JAPAN)); } }