inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

안녕하세요, onopen() 문제로 질문드립니다.

미해결

파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편

똑같이 코딩한거같은데 Uncaught InvalidStateError: Failed to execute 'send' on 'WebSocket': Still in CONNECTING 이런 문제가 생겨 connect()에서 console.log로 this.ws 찍어보니까. readystate가 0에서 바뀌지 않고 onsubmit()에서도 0인걸 확인했습니다. 그래서 웹소켓이 연결되지 않았으니, this.ws.send()에서 걸리는것이라고 생각은하는데, 어디를 고쳐야 될지 모르겠습니다. {# Chat room #} {% extends "chat/base.html" %} {% block extra-style %} <style> .chat-message > div { background-color: #3b3b3b; color: #e1e1e1; border-radius: 0.8em; padding: 0.4em; margin: 0.4em 0; display: inline-block; white-space: pre-wrap; max-width: 80%; word-wrap: break-word; } </style> {% endblock %} {% block content %} <h2>채팅방 :{{ room_name }}</h2> {# 웹소켓으로 실시간 채팅 기능 구현하기 #} <div class="container"> <div class="row"> <div class="col-sm-12"> <div class="card" style="height: 600px;"> <div class="card-header"> 채팅방:{{ room_name }} </div> <div class="card-body overflow-hidden"> <div id="chat_messages" class="w-100 h-100 border-0 overflow-hidden overflow-scroll"></div> </div> <div class="card-footer"> <form id="message_form"> <input type="text" name="message" class="form-control" autofocus autocomplete="off" /> </form> </div> </div> <hr class="my-3" /> <a href="{% url 'chat:index' %}" class="btn btn-primary"> 대기실로 이동 </a> </div> </div> </div> {% endblock %} {% block extra-script %} <script> const handler = { chat_messages_tag: null, ws: null, retry: 0, init(){ console.log("handler.init() 실행됨"); this.chat_messages_tag= document.querySelector("#chat_messages"); document.querySelector("#message_form").addEventListener("submit", this.onsubmit.bind(this)); }, connect(ws_url){ if(this.ws) { this.ws.close(); } this.ws = new WebSocket(ws_url || this.ws?.url); console.log(this.ws, "연결1.") this.ws.onopen = this.onopen.bind(this); this.ws.onclose = this.onclose.bind(this); this.ws.onerror = this.onerror.bind(this); this.ws.onmessage = this.onmessage.bind(this); }, reconnect() { this.connect(); }, onopen(){ console.log("웹소켓 서버와 접속, : Room_chat"); this.retry = 0; }, onclose(event){ if (!event.wasClean) { console.error("웹소켓이 죽었거나, 네트워크 에러"); if (this.retry < 3) { this.retry++; setTimeout(() => { this.reconnect(); console.log(`[${this.retry}] 접속 재시도 ...`); }, 1000 * this.retry) } else { console.log("웹소켓 서버에 접속할수 없습니다. 메인페이지로 이동합니다."); window.location.href = "{% url 'chat:index' %}"; } } }, onerror(){ console.log("웹소켓 에러 발생. 메인페이지로 이동합니다."); window.location.href = "{% url 'chat:index' %}" ; }, onmessage(event){ const message_json = event.data; console.log("메세지 수신 :", message_json); const { type, message } = JSON.parse(message_json); switch (type){ case "chat.message": this.append_message(message); break; default: console.error('Invalid message type: &{type}'); } }, append_message(message){//인자로 받은 채팅 메세지 로그에 추가 const element = document.createElement("div"); element.className = "chat-message"; const wrapper = document.createElement("div"); wrapper.textContent = message; element.appendChild(wrapper); this.chat_messages_tag.appendChild(element); this.chat_messages_tag.scrollTop = this.chat_messages_tag.scrollHeight; }, onsubmit(event){ //입력된 채팅 메세지 문자열을 획득하고, 메세지 로그에 추가. event.preventDefault(); const form_data = new FormData(event.target); //폼필드의 값을 오브젝트로 변환하여 props로 저장하고, 폼필드는 리셋합니다. const props = Object.fromEntries(form_data); event.target.reset(); // reset form const { message } = props; console.log("웹소켓으로 전송할 메세지: ", message); console.log(this.ws, "onsubmit"); {#this.append_message(message);#} this.ws.send(JSON.stringify({ type: "chat.message", message: message, })) } }; handler.init(); const protocol = location.protocol === 'https:' ? 'ws:' : 'wss:'; const ws_url = protocol + "//" + location.host + "/ws" + location.pathname; handler.connect(ws_url); </script> {% endblock %} from django.urls import path from chat import consumers websocket_urlpatterns = [ path("ws/chat/<str:room_name>/chat/", consumers.ChatConsumer.as_asgi()), ] import os from channels.routing import ProtocolTypeRouter, URLRouter from django.core.asgi import get_asgi_application import app.routing import chat.routing os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') django_asgi_app = get_asgi_application() application = ProtocolTypeRouter({ "http" : django_asgi_app, "websocket" : URLRouter( chat.routing.websocket_urlpatterns + app.routing.websocket_urlpatterns, ) }) from django.shortcuts import render # Create your views here. def index(request): return render(request, "chat/index.html") def room_chat(request, room_name): return render(request, "chat/room_chat.html",{ "room_name": room_name, })

  • python
  • django
  • django-channels
sunnnwo 댓글 2 좋아요 0 조회수 171

강의 데이터베이스.,,,

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

이 강의 mySql이나 데이터베이스를 이용 하지는 않는건가요 ?. 로컬 데이터베이스만 사용하나요 ? [코드팩토리 디스코드] https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

  • flutter
  • 클론코딩
재홍 댓글 1 좋아요 0 조회수 96

const 커스텀클래스

해결됨

Flutter 앱 개발 실전

안녕하세요 강사님 ! 수업 잘듣고 있습니다. 제 질문은 다트에서 커스텀클래스 안에 모든 속성에 final 키워드를 붙이면 생성자 앞에 const 키워드를 붙여서 const 커스텀 클래스를 만들수 있었잖아요~ 이제 여기서 궁금한점은 ! 모든 속성중에 리스트가 있다면 final 키워드를 붙여도 그 리스트는 add 같은 동작을 할수 있는데 가변객체가 포함된 커스텀 클래스에 const 키워드 붙일 수있나 하는 것입니다 !

  • flutter
유하 댓글 1 좋아요 1 조회수 118

코드 결과값이 좀 다릅니다.

미해결

입문자를 위한 LangChain 기초 — v1.0+ 업데이트

멀티체인 부분에서 chain1의 답변이.. 길게 나옵니다. 한 단어로 'future'라는 답변이 나와야 사실 chain2에 english_word라는 변수에 알맞는 값이 들어가는 걸텐데요. 문장으로 답이 나와서 이상한 상황입니다. 무슨 문제가 있어서 이렇게 invoke 결과값이 달라지는지 제가 뭘잘못했는지 모르겠습니다. 제 잘못이 아니라면 이게 무엇 때문인지, 어떻게 해결할 수 있을지 궁금합니다. (chain2도 답변을 영어로 하는 문제도 있습니다.)

  • python
  • llm
  • langchain
  • openai-api
김재형 댓글 2 좋아요 0 조회수 203

Dart 강의 질문

해결됨

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다! [코드팩토리 디스코드] https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요! TS강의 완료 후 Flutter 강의 시작하려 합니다. Dart 공부한지 2년정도가 되어 다시 공부하려는데 무료 Dart 강의가 있고 Flutter 초급 강의에도 Dart 이론 강의들이 있더라구요 두 강의가 동일한 강의인지 궁금합니다 :)

  • flutter
  • 클론코딩
포테토쌤 댓글 1 좋아요 0 조회수 65

섹션2 ["환경 vs. 설정 vs. 구성"] 강의 자막 문의

해결됨

실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지

질문은 많으시면 많을수록 좋습니다. 가능한 빠른 답변 드리겠습니다. 원활한 답변을 위해, 자세한 질문 사항 부탁드려요 😋 [33초] 각 단어에 맞는 영어 번역이 잘못된 것 같습니다. 환경 / 구성 / 설정 Environment / Configuration / Setting 로 이해하면 될까요?

  • python
  • 알고리즘
티읕이응 댓글 1 좋아요 0 조회수 158

<군대에서 이 강의를 활용하는 방법>

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다! [코드팩토리 디스코드] https://bit.ly/3HzRzUM 안녕하세요. 군대 사지방에서 인공지능과 앱 개발을 공부하는 군인 입니다. 코드팩토리님의 강의를 더 많은(특히나 군인) 사람들이 어려움 없게 공부할 수 있도록 도와드리고자 이렇게 작성해봅니다. flutter 개발 환경에 대해 사지방에서 할 수 있는 것을 공유하고자 합니다. 여기다가 환경설정을 자세히 쓸 수는 없으니(사실 필요하지도 않습니다) 이런 것들을 활용하면 된다고 말하고 싶어서 간단하게 작성해 봅니다. project idx 를 사용해 flutter 워크스페이스를 만들면 됩니다. project idx를 이용하면 google id만 있다면 이용하실 수 있습니다. vscode 환경을 제공합니다. 다만, 현재 android 에뮬레이터는 잘 작동이 안되서 web view로 보셔야 합니다.(이걸로도 충분합니다) 각종 외부 패키지 사용은 호환이 안되는 경우가 있습니다만, pub.dev에 web으로 호환되는 것을 따로 설정하시면 됩니다. 예를 들어, google map을 이용하고자 할 때 web/index.html에 아래와 같은 코드를 추가하시면 잘 작동됩니다. <script src="https://maps.googleapis.com/maps/api/js?key=Your API KEY"></script> 또, 비디오 영상과 관련해서는 url로 받으시면 됩니다. 관련된 정보는 stackoverflow나 이외의 블로그에 굉장히 많은 정보가 있으니 찾아보시면 됩니다. 실제로 에뮬레이터 대신 web에서 작동하는 방식은 아래 사진처럼 작동합니다.(android는 버그가 좀 있는 것 같습니다.) 제가 이렇게 말씀드리는 이유는 다음과 같습니다. 코드팩토리님의 강의가 그 정도로 들을만한 가치가 있다는 점. 군인도 앱 개발을 충분히 공부할 수 있다는 점. 그리고 환경설정이 하나도 어렵지 않다는 점.(저도 이 강의가 첫 앱 개발입니다. 인공지능 공부를 한 경험 때문에 더 쉬웠을 수도 있습니다.) 코드팩토리님의 질문&답변에 이런 글을 달아 죄송합니다. 여러 인사이트 댓글을 보면 "군인이 사지방에서 개발 공부하는 법"같은 것이 많이 나와있어서 이렇게 남겨봅니다. 혹시라도 삭제를 원하시면 바로 삭제하겠습니다.

  • flutter
  • 클론코딩
jcy4023 댓글 2 좋아요 1 조회수 205

페이지가 넘어갈 때 url 변하지 않는 경우

미해결

[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)

안녕하세요 제공해주신 깃허브 홈페이지 url의 경우는 페이지가 넘어갈 때마다 'url/page{page_num}' 형식으로 변하게 되는데 제가 살펴본 네이버 카페의 경우(링크 아래 첨부)는 페이지 수를 넘겨도 페이지 수가 변하지 않았습니다. 네이버 카페 url: https://cafe.naver.com/cantsb 혹시 이러한 경우 페이지 수에 따른 크롤링을 어떻게 하는지 궁금합니다.

  • python
  • 웹-크롤링
fwm8 댓글 1 좋아요 0 조회수 290

YOLO 학습

미해결

[개정판] 딥러닝 컴퓨터 비전 완벽 가이드

안녕하세요 강사님 최근에 YOLO를 이용해 이것 저것 연습을 하는데 궁금한 점이 있습니다. 데이터셋의 크기가 너무 커서(2TB) 일단 필요한 부분만 선택해서 학습을 했습니다. 그런데 이렇게 하면 새로운 데이터셋을 추가해서 학습을 시키려면 <기존 1TB + 새로운 데이터셋> 이렇게 합친 데이터셋을 다시 학습을 해야 하나요...? 예를 들어 a, b, c, d를 탐지할 수 있게 학습을 하고 추가적으로 ㄱ, ㄴ, ㄷ, ㄹ도 탐지할 수 있게 데이터를 추가해서 총 a, b, c, d, ㄱ, ㄴ, ㄷ, ㄹ을 모두 탐지할 수 있도록... 마지막 출력 계층만 새롭게 학습을 하는 방법은 기존 데이터셋에 대한 성능이 떨어질 수 있어 좋은 선택은 아닌가요...?

  • python
  • 머신러닝
  • 딥러닝
  • keras
  • tensorflow
  • 컴퓨터-비전
장태훈 댓글 2 좋아요 0 조회수 229

새로운 dict를 생성한 이유에 대해서 궁금합니다.

미해결

프로그래밍 시작하기 : 도전! 45가지 파이썬 기초 문법 실습 (Inflearn Original)

d = {'USA': 36, 'Germany': 17,'France':32, 'Australia': 77, 'South Africa': 99, 'India': 108, 'South Korea': 200, 'South Japan':300} print(d.get("France")) t = input("You won't search of contury?").title() print(t,"<<입력값") def add_space(a): if 'South' in a: print(a.find('South')) i = a.find('South') # print(a[i:i+5]) a = a[i:i+5]+' '+a[i+5:len(a)].title() return a # if 'East' in a: # --- # if 'Wset' in a: # --- # if 'North' in a: # --- t = add_space(t) if t == "Usa": t = "USA" else: print(a) country = d.get(t) if not country: print('No results were found for your search.') else: print(country) 안녕하세요 강의 수강 중 궁금한 점이 있어서 질문드립니다. 강의 7:33에서 key가 소문자인 형태로 새로운 dict을 생성하신 이유가 궁금합니다. 문제 해결을 위한 생성 이외에 원본 변수인 'd'의 수정을 방지하기 위함과 지금 예제는 눈으로 모든 값을 확인할 수 있지만 많은 데이터를 가진 시퀀스의 경우에는 어떠한 예외가 발생할지 모르니 그에 대한 대비 제가 생각해 본 이유가 맞는지 또한 다른 이유가 있으신지 궁금합니다. 또한 제 코드에서 'add_space'함수를 매번 실행하는 게 비효율적이라는 생각이 들지만 필요하다고도 생각돼서 선생님의 의견을 여쭤봅니다.

  • python
kingryan9996 댓글 2 좋아요 0 조회수 202

seaborn 라이브러리 호출하였으나 그래프가 안 그려져요

미해결

공공데이터로 파이썬 데이터 분석 시작하기

안녕하세요! 교육 차근차근 따라하면 듣고 있는데요.. seaborn 시각화 생성되지 않아 문의 드립니다. 제가 놓친 것이 있을지요.. 아래 코드 참고 부탁 드려요

  • python
  • pandas
  • numpy
jieunk 댓글 2 좋아요 0 조회수 343

갑자기 데이터 프레임이 되는 이유

미해결

[개정판] 파이썬 머신러닝 완벽 가이드

기존 14:20초 부근에서 titanic_df['Pclass'].value_counts().reset_index() 를 실행했을때 출력되는 모양(그냥 텍스트 형태)로 나오는 것과 15:18 부근 코드는 같은데 테이블 형태로 나오는 것의 차이는 무엇인가요?

  • python
  • 머신러닝
  • 통계
능함가 댓글 2 좋아요 0 조회수 151

[Unique Paths] 완전탐색 / DP (후반부)

해결됨

코딩테스트 [ ALL IN ONE ]

[Unique Paths] 완전탐색 / DP (후반부) 강의에서 13분에서 질문있습니다. 첫 번째 행과 첫 번째 열이 모두 왜 1 인가요? 만약 방향을 바꾸기 전까지 1이라고 친다면, 아래 그림 처럼 도착지에서 최대 방법이 28이 아니라 8이 되어야 하는거 아닌가요? 왜냐면 방향은 오른쪽 아래로만 이동이 가능하다고 해서 올라가거나 왼쪽은 이동이 불가능하잖아요.

  • python
  • 코딩-테스트
  • 알고리즘
zzzzz 댓글 1 좋아요 0 조회수 121

deprecated 경고는 어디서 확인할 수 있나요?

미해결

처음하는 파이썬 백엔드 FastAPI 입문 (FastAPI부터 비동기 SQLAlchemy까지) [풀스택 Part1-2]

docs나 redoc에서 확인하는 것은 숙지하였는데, api 개발자가 deprecated를 경고받으려면 문서뿐 아니라 response 자체에도 deprecated 되었다는 정보가 포함되어야 할 것 같습니다. header에 포함되어 있나요?

  • python
  • mvc
  • sqlalchemy
  • backend
  • FastAPI
윤형석 댓글 1 좋아요 0 조회수 252

59분 14초

해결됨

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

59분 14초까지 따라가서 arr[0]까지 되는건 이해가 가는데 그 뒷부분이 설명이 여러번 다시들어봐도 거기서 길을 잃었어요.. 계산을 return줄에서 해서 그 값으로 위로 쭉쭉 올라가면서 계산하는게 맞나요? 59분 42초에서 arr[1] arr[0] 이렇게 적으셨는데 return(arr[size-1]>max)?arr[size-1]:max; 에서 size에 1을 넣으면 배열[0]이 1인건 알겠는데 5(배열[1])가 어디서 어떤식으로 나와서 어떻게 비교가 되는건지 모르겠어요

  • python
  • java
  • c
  • 정보처리기사
chenney 댓글 2 좋아요 0 조회수 235

앱 실행시 에러 발생 (맥북)

미해결

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

안녕하세요. 맥북을 사용하고 있는 교육생입니다. android/gradle.properties에 org.gradle.java .home=/opt/homebrew/Cellar/openjdk@17/17.0.14/libexec/openjdk.jdk/Contents/Home 이렇게 작성하고 실행하면 * What went wrong: Execution failed for task ':agora_uikit:compileDebugKotlin'. > 'compileDebugJavaWithJavac' task (current target is 1.8) and 'compileDebugKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version. Consider using JVM toolchain: https://kotl.in/gradle/jvm/toolchain 해당 에러가 발생합니다. 그래서 자바 버전을 1.8로 변경하고 gradle 버전도 낮춰서 해봤지만 실행이 되지 않습니다... 어떻게 해야할까요

  • flutter
  • 클론코딩
pabeba 댓글 1 좋아요 0 조회수 171

mysql root 비밀번호 변경관련

해결됨

실전! FastAPI 입문

docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=todos -e MYSQL_DATABASE=todos -d -v todos:/db --name todos mysql:8.0 ALTER USER 'root' @ ' localhost ' IDENTIFIED WITH caching_sha2_password BY '비밀번호' ; 명령어로 root계정의 비밀번호를 바꿨고, 이후에 mysql -u root -p로 root계정에 접속할 때는 변경된 비밀번호로 잘 작동합니다. 그러나, workbench에서 localhost:3306 root계정에 접속하려할 때, 계속해서 강의중 설정한 todos라는 비밀번호를 입력해야 접근이 가능한 상황입니다. 왜 cmd에서 변경한 비밀번호가 워크벤치에 적용되지 않는것인지 궁금해서 문의드립니다. 해결방법이 있을까요?

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
masonlee 댓글 2 좋아요 0 조회수 380

filesensor가 해당 파일이 있는데 찾지 못하는 경우

미해결

Airflow 마스터 클래스

안녕하세요, 영상 따라 실습중에 궁금한 점이 있습니다. filesensor로 확인하려는 파일이 존재하는데도 task가 계속 reschedule되고 있는 원인을 모르겠습니다. 😭

  • python
  • 데이터-엔지니어링
  • airflow
edu2 댓글 1 좋아요 0 조회수 122

Dart 문법 실습문제 풀고 있는데요

해결됨

Flutter 앱 개발 기초

두 가지 여쭤볼 게 있습니다.(우선 저는 비전공자이고 대학교때 기초교양 과목으로 c언어,전산,아두이노 잠깐 해봤습니다.) 13 문제 중 초반 1~3문제처럼 간단한 건 풀었는데 후반 10문제를 거의 다 제대로 풀 지를 못하고 결국 해답을 봤는데 정상인지 아닌지 궁금해서 여쭤봅니다. 만약 정상이 아니라면 공부 방법을 바꿔야 하나 싶어서요. 어떤 점에서 어려움을 느꼇냐면 예를 들어 int totalPrice(List<Map<String, dynamic>> cart) { // 여기에 작성해 주세요. int result = 0; for (Map<String, dynamic> item in cart) { int price = item["price"] as int; // dynamic -> int로 변환 int count = item["count"] as int; // dynamic -> int로 변환 result += price * count; } return result; } 여기서 뜬금없이 선언하지도 않은 item이라는 변수를 가지고 오는 것이나, 타입을 그자리에서 변환해주는 as , 그리고 cart라는 변수에서 item을 가져 오는 것, 이 item의 타입은 자동으로 in cart 안의 타입에 종속된다는 것 나름 5분강의 볼떄마다 30~50분을 공부해야 할 정도로 세부적으로 찾아보고 gpt도 활용해가면서 모르는 건 체크하면서 해봤습니다. 2. 그래서 하나 더 여쭤보겠습니다. 실습 문제의 의도가 궁금합니다. 단지 사고력을 기르는 의미에서 생각을 한번 해보게끔 하고 해설을 보고 이해하라는 건지 기본적인 틀만 알려주되 세세한 것들은 직접 찾아보고 공부해서 이 정도는 풀 수 있어야 한다. 라는 의미인지 알려주세요. 진짜 진지하게 공부 하고싶고 개선해보고 싶어서 이렇게 질문 드립니다.

  • flutter
웅이 댓글 2 좋아요 1 조회수 152

인기 태그

인프런 TOP Writers

주간 인기글