묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
게임 로직 루프에서 게임 틱 누락으로 인한 높은 CPU 사용 문제
수업에서는 게임 로직 루프에서의 게임 틱(game tick)에 대해 다루지 않아 CPU 사용률이 항상 높게 유지되는 문제가 발생한다.
-
해결됨<머신러닝, 핵심만 빠르게!> 완독 챌린지
쿠폰 관련 문의
안녕하세요. 선생님바쁘신데 번거롭게 해서 죄송합니다만...제가 챌린지 두가지를 수강하였는데 메일확인이 늦어 쿠폰등록기간이 만료되었습니다.혹시 괜찮으시다면 챌린지 둘다(대규모 언어모델, 머신러닝) 다시한번 쿠폰을 주실 수 있는지 여쭤보고 싶습니다. 감사합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
게임 로직 루프에서 게임 틱 누락으로 인한 높은 CPU 사용 문제
수업에서는 게임 로직 루프에서의 게임 틱(game tick)에 대해 다루지 않아 CPU 사용률이 항상 높게 유지되는 문제가 발생한다.
-
미해결절대강좌! 유니티6 - ECS/DOTS 프로그래밍 마스터클래스
ecs관심이 있었는데 강의 잘 보았습니다.
현재 강의는 심화과정 2강의 빼고 다 보았습니다. 몇가지 궁금한 사항들이 있어서 질문드리려고 합니다. ecs, dots 병렬처리를 위해서 유니티에서 사용하는 시스템인데요. 이 강의에서도 여러 쓰레드를 사용하기 위해 잡에 작업들을 할당하는 코드를 사용하는 것으로 보입니다. 그리고 발사체와 적이 충돌시 HP를 깍는데 EnemyComponentLookup[enemy] = enemyData; 이런 코드가 있던데 이는 실제로 해당 컴포넌트에서 hp 변수를 수정하는 내용으로 보입니다. 하지만 멀티쓰레드에서 lock이나 뮤텍스같은 안전장치가 없는데 저런식으로 사용할 수 있는지 묻고 싶고... 두번째는Enemy오브젝트에서 여러 엔티티 update 이벤트를 사용하고 있습니다. EnemyComponent는 발사체에서도 사용하고 있고 moveComponent에서도 사용하고 있고 hpBarComponent에서도 사용하고 있습니다. Enemy가 죽었을때 수십만 이벤트가 현재 할당된 상태에서 문제가 없는것인지 추가적인 내용을 알 고 싶습니다. 현재 만마리 이상 스폰을 시키면 간혹 죽은 Enemy들이 살아있는 것 같은데 ecs, 멀티쓰레드 강의에서 젤 중요한 내용이 빠진게 아닌가 싶어서 여쭈어봅니다.
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
리액트 설치시 vite와 create React APP 차이
선생님 인강 잘듣고 있읍니다인강에선 react 설치시 vite 로설치하고 책에서는 create React App 으로 설치하는데대략검색해보니 vite 설치시 효울적이고 빠르다고 하는데책으로 공부하면 create React App으로 설치해도 상관없나요
-
해결됨RAG를 활용한 LLM Application 개발 (feat. LangChain)
강의 완료 오류
3. 2.1 Retrieval Augmented Generation(RAG)란?이 강의가 강의 끝에서 모래시계만 돌고 완료가 계속해서 안됩니다.나중에 수강증을 회사에 제출해야 하는데 방법이 없을까요?저만 그런건지요
-
해결됨<대규모 언어 모델, 핵심만 빠르게!> 완독 챌린지
쿠폰등록관련 문의드립니다
안녕하세요메일 확인이 늦어서 쿠폰 적용을 못했습니다. 수동 등록으로 해주신다고 하여 Q&A로 남깁니다.등록 부탁드립니다
-
미해결Vue.js 완벽 가이드 - 실습과 리팩토링으로 배우는 실전 개념
깃 권한 요청 드립니다
인프런 아이디 : @sbn041778144인프런 이메일 : sbn04177@naver.com깃헙 아이디 : sbn04177@naver.com깃헙 아이디 : EunJaemm
-
미해결김영한의 실전 자바 - 기본편
Method1에서 Student 객체
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.이 부분에서 Student student를 선언하고 new Student();를 안했는데 어떻게 바로 .name같은 거를 사용할 수 있는 건가요? 다른 부분에서는 꼭 객체를 먼저 생성해야 접근을 할 수 있는데 이 함수에서는 왜 가능한건가요?static void initStudent(Student student, String name, int age, int grade) { student.name = name; student.age = age; student.grade = grade; }
-
해결됨실무 환경 그대로 주문게시판 만들기 웹개발 기초 마스터
강의 연장 문의
안녕하세요, 강의 연장이 가능한 지 문의 드립니다!가능하다면 연장해주시면 감사하겠습니다!
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
캐글 문제
캐글 문제를 풀려고 하는데'Edit My Copy' 이걸 눌러서 문제에 진입하면'문제가 발생하여 이 페이지가 중단되었습니다!'라는 문구가 나오고 새로고침을 여러번 하다보면 기분 좋을 때 한번식 열리는데, 무슨 방법이 있을까요...
-
미해결회사에서 바로 쓰는 업무자동화 AI 에이전트 (w. n8n, LangGraph)
parser에서 에러가 발생합니다.
parser 부분에서 에러가 난다고 합니다. 선생님 하신것 그대로 따라 했는데 에러 나는것 같아 ai에서 물어보고 수정했는데 에러가 안 사라지네요...제가 비전공자라 뭘 놓쳤을 수도 있습니다..
-
해결됨원클릭으로 AI가 생성해주는 Youtube 쇼츠 만들기 자동화(with n8n)
셀프 호스팅 n8n 에서도 모든 기능 활용 가능한가요?
이제 곧 무료 트라이얼 기간이 끝나가서 여러가지 알아보다가 "Docker" 를 활용하면 제 컴퓨터에 직접 '셀프 호스팅' 해서 n8n 을 무제한으로 무료로 쓸 수 있다고 하던데,셀프 호스팅한 n8n 에서도 영상에 나온 노드들 전부 똑같이 사용 할 수 있나요?
-
미해결[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
유니티 데이터 저장객체 ScriptableObject에 대해 의견 여쭤보고 싶습니다
데이터 저장 방식에 대하여 공부하던 중, ScriptableObject라는 유니티 데이터 저장 용 객체에 대해 알게 되었습니다.보통 현업에서 일할 때 캐릭터/몬스터의 스텟 등 에디터 내에서 조절해주는 경우는 ScriptableObject를 사용하고, 세이브 파일, 설정 값 저장 등 런타임 동안 읽고 쓸 가능성이 있는 데이터는 Json 및 xml 파일에 데이터를 저장한다고 배웠습니다.선생님의 수업에서 DataManager들은 스텟같은 전자에 속하는 데이터들도 Json or xml 파일로 데이터를 저장하는 것으로 배워서 궁금한 점이 1. 추측하기로는 배포 후 밸런스 패치 등 외부에서 스텟등을 조절해주기 위해 Json방식을 쓰는 것일까 하는데 맞나요?2. ScriptableObject 방식이 문자열 읽고 파싱하고 C#데이터로 바꾸는 Json 사용 방식보다 성능이 우수하다고 하는데 전자를 별로 사용하지 않는 이유가 있나요?3. 현업에서는 ScriptableObject를 자주 사용하나요?4. 선생님의 ScriptableObject에 대한 개인 의견(ex. 불편함, 효율적임, ...)은 어떠신가요?이렇게 4가지입니다.항상 좋은 수업들 올려주셔서 감사합니다. 새로운 강의를 볼 때마다 새로운 가르침을 얻을 수 있어 좋습니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
시험 환경 질문
안녕하세요 예시문제 작업형1 강의 듣고 있는데이것저것 연습겸 클릭하고 있는데문제풀이에서 하다가답안 메뉴 다시 갔다가 다시 문제풀이로 돌아오니 코드 작성한게 다 날라갔더라고요..저장버튼이 활성화되지 않던데..저장하려면 어떻게 해야하죠?실제 시험칠때도 문제풀이 저장하는게 가능한지 궁금합니다감사합니다
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
df=~적는것
안녕하세요df['고객만족도'].fillna(m)할때앞에 다시 df['고객만족도'] = ~ 붙이는거랑df.dropna(subset='근속연수')앞에 df = ~ 붙이는게 정확하게 붙이는 이유가 이해가 되지 않습니다..뭔가 작업을 할떄앞에 df ~를 다시 붙여준다고 생각하면 될까요?감사합니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
컨텐츠 단, 엔진 단
컨텐츠 단, 엔진 단이 뭐에요?
-
미해결FastAPI 완벽 가이드
signed cookie 와 jwt 토큰
안녕하십니까 강사님! 자세하게 좋은 정보 알려주심에 항상 감사드립니다!!제 짧은 지식으로 궁금한 점이 생겨 질문드립니다.사용자 인증을 구현할때 jwt토큰을 사용하는 방법도 있는 걸로 압니다. jwt토큰도 마찬가지로 signed cookie처럼 암호화(인코딩)해서 헤더에 같이 보내는걸로 알고 있습니다.두 방식이 비슷하다고 생각하는데 jwt토큰과 signed cookie로 인증하는 차이가 무엇인지 궁금합니다. 짧은 경험상 모든 기술간의 트레이드 오프가 존재했던 거 같은데 jwt토큰과 signed cookie에도 그러한 부분이 있는지 궁금합니다 !항상 감사드립니다~
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형2 모의문제 1
'Attrition_Flag':pred[:,1],마지막에 왜 index 1 열을 가져오는지 이해가 안 돼요.예측하고자 하는 값은 '이탈' 고객인데, 왜 0번째 열이 아닌 1번째 열을 추출하는걸까요?ㅠ이 부분이 헷갈려요
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
[문제해결] '오늘도 출첵!' 의 171번 강의에서 중요한 문제를 발견했습니다
강의 따라서 프로젝트를 진행하다가 '출근 가능/불가능 확인 로직'에서 문제를 발견했습니다. 이것저것 시도하다가 드디어 해결해서 과정 공유해봅니다.기존 코드 /// 기존의 initState() @override void initState() { super.initState(); // (아마도) 이 시점에서 오류 발생 ↓ Geolocator.getPositionStream().listen((eventPosition) { // 목적지 위치 var start = defaultLatLng; // 현재 위치 var end = LatLng(eventPosition.latitude, eventPosition.longitude); /// 거리 구하기 var distance = Geolocator.distanceBetween( start.latitude, start.longitude, end.latitude, end.longitude, ); /// 거리가 `boundary` 내부에 들어오는지 확인 setState(() => mayChoolCheck = distance <= boundary); }); } /// 위젯 빌드 @override Widget build(BuildContext context) { /// AppBar: 제목 & 액션 버튼1 var appBar = AppBar( title: Text( '오늘도 출근', style: TextStyle(color: Colors.blue, fontWeight: FontWeight.w700), ), centerTitle: true, // 안드로이드 설정 actions: <Widget>[ /// 원래 위치로 돌아오기 버튼 IconButton( onPressed: returnToMyLocation, icon: Icon(Icons.my_location), color: Colors.blue, ), ], ); return Scaffold( backgroundColor: Colors.white, appBar: appBar, /// 권한 요청을 위한 빌더 body: FutureBuilder<void>( future: checkPermission(), // 위치 권한 묻기 대화상자는 이 시점에 생성됨 builder: (context, snapshot) { if (snapshot.hasError) { return Center(child: Text('${snapshot.error}')); } // 이하 위젯 생성 코드... }, ), ); } /// Future<void> checkPermission() async { /// 위치 서비스 활성화 여부 var isLocationServiceEnabled = await Geolocator.isLocationServiceEnabled(); /// 활성화되지 않았다면 에러 발생 (앱이 현재 위치를 사용할 수 없으므로) assert(isLocationServiceEnabled, '위치 기능을 활성화하지 않았습니다.'); /// 권한 상태 확인 var checkedPermission = await Geolocator.checkPermission(); if (checkedPermission == LocationPermission.denied) { checkedPermission = await Geolocator.requestPermission(); } /// 시뮬레이션 상 `checkedPermission`이 위치 권한 허용 상태가 아니면 에러 유도 assert( checkedPermission == LocationPermission.always || checkedPermission == LocationPermission.whileInUse, '위치 권한을 허용해주세요.', ); }오류 추적오류의 원인은 'User denied permissions .. device's location.' 즉, 사용자가 위치 권한을 아직 허용하지 않은 시점에 위치 권한이 필요한 함수를 호출하려고 함. [ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: User denied permissions to access the device's location. E/flutter (13339): #0 GeolocatorAndroid.getPositionStream.<anonymous closure> (package:geolocator_android/src/geolocator_android.dart:201:9) E/flutter (13339): #1 Stream.handleError.<anonymous closure> (dart:async/stream.dart:961:16) E/flutter (13339): #2 HandleErrorStream.handleError (dart:async/stream_pipe.dart:303:17) ...#0 에서 이미 getPositionStream().<anonymous closure> 로 추적한 걸로 보아, Geolocator.getPositionStream() 함수 호출 시점에 오류 발생한 것이 분명함.문제의 원인과 해결책 (일부 ChatGPT의 도움을 받음)문제의 가장 중요한 핵심은, 처음 앱 실행 시 위치 권한 확인 로직이 완전히 끝나기 전에 위치 권한 허용이 이루어지지 않으므로, 앱 재시작 이전까지 '사용자 현재 위치 추적 기능'이 활성화되지 않고, 추가로 관련 함수에서 오류 발생 가능성이 있음.그러므로 checkPermission() 함수는 initState()에서 최초 한 번만 실행하고, Geolocator.getpositionStream() 함수는 따로 분리하여 checkPermission()이 정확히 끝난 시점에 실행되도록 로직을 변경함. 1. checkPermission() 의 리턴 타입을 Future<void> 에서 Future<bool>로 변환 /// 위치 권한 확인 및 부여 함수 Future<bool> checkPermission() async { /// 위치 서비스 활성화 여부 var isLocationServiceEnabled = await Geolocator.isLocationServiceEnabled(); assert(isLocationServiceEnabled, '위치 기능을 활성화하지 않았습니다.'); /// 권한 상태 확인 var checkedPermission = await Geolocator.checkPermission(); if (checkedPermission == LocationPermission.denied) { checkedPermission = await Geolocator.requestPermission(); } /// 위치 권한 허용 여부를 리턴 return checkedPermission == LocationPermission.always || checkedPermission == LocationPermission.whileInUse; }2. initState()에서 checkPermission()과 addSubscription() 함수를 차례로 실행 (.then() 메소드 활용) @override void initState() { super.initState(); checkPermission().then((permitted) { if (permitted) addSubscription(); }); } /// addSubscriptsion 함수 void addSubscription() { /// 리스너 함수: 출근체크 가능 여부 확인하기 Geolocator.getPositionStream().listen((eventPosition) { // 목적지 위치 var start = defaultLatLng; // 현재 위치 var end = LatLng(eventPosition.latitude, eventPosition.longitude); /// 거리 구하기 var distance = Geolocator.distanceBetween( start.latitude, start.longitude, end.latitude, end.longitude, ); /// 거리가 `boundary` 내부에 들어오는지 확인 setState(() => mayChoolCheck = distance <= boundary); }); } 3. 위젯 재빌드 시 FutureBuilder의 future 함수 재호출을 방지하기 위해 비동기 결과를 미리 필드로 빼놓기ChatGPT는 이를 'Cashing Future' 라고 부른다고 함.(이 코드 부분에 중요한 로직이 하나 빠져서 방금 재수정했습니다.)/// 권한 확인 여부 리턴 값 late final Future<bool> permissionFuture; @override void initState() { super.initState(); /// checkPermission()의 결과를 값으로 저장 permissionFuture = checkPermission().then((permitted) { if (permitted) addSubscription(); return permitted; }); } /// 위젯 빌드 @override Widget build(BuildContext context) { /// AppBar: 제목 & 액션 버튼1 var appBar = AppBar(...); return Scaffold( backgroundColor: Colors.white, appBar: appBar, /// 권한 요청을 위한 빌더 body: FutureBuilder<bool>( future: permissionFuture, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting || !snapshot.hasData) { return ColoredBox( color: Colors.blue, child: Center(child: CircularProgressIndicator()), ); } /// snapshot.data가 false 값인 경우는 사용자가 위치 권한 요청을 거부했을 때 if (snapshot.hasError || snapshot.data! == false) { return Center(child: Text('위치 권한을 허용해주세요.\n${snapshot.error}')); } /// 이하 위젯 생성 코드 ... }, ), ); } 이렇게 했을 때 앱 삭제 후 다시 빌드 했을 때, 그리고 재시작 했을 때도 정상적으로 잘 작동했습니다.코드가 많이 훼손된 느낌도 들긴 하지만.. 나름대로 공부가 돼서 기분은 좋네요.주저리주저리 쓰느라 정신 없었는데.. 잘 이해가 안 되거나 하고 싶은 피드백이 있다면 꼭 말씀해주세요!아무쪼록 끝까지 읽어주셔서 감사합니다.