묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part6: 웹 서버
웹서버로 턴제 카드게임 구현가능할까요?
본인의 턴에 카드를 구매하고 카드의 효과로 점수를 얻는 식의 멀티플레이 게임을 구상중입니다. 혹시 웹서버로 이정도 게임의 서버를 구현하는 것이 적절할 지 궁금해 여쭈어봅니다. 제가 판단하기로는 가능하다고 생각하는데 서버공부를 한지 얼마 안된 초보다 보니 루키스님의 의견이 궁금해 강의 직접적인 관련은 없지만 이렇게 질문을 남깁니다. 그리고 하스스톤, 문명 등 참고할 만한 게임이 어떤 식으로 구현되었는지 정보를 찾아보고 싶은데 적절한 키워드가 떠오르지 않네요.. 혹시 이런 정보를 찾을 때의 팁을 여쭈어봐도 될까요?감사합니다.
-
미해결[LG유플러스] 앱 만들기 초급 과정 (Flutter)
IOS/Android simulator 실행방법 문의
flutter 프로젝트 생성할때,강의내용중에는 IOS/Android simulator 실행방법이 없는데, 어떻게 실행하는지 알려주시기 바랍니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
view render 에 질문이 있습니다.
[질문 내용]강의 약 19분 00초에서 view.render()를 해줄 때 모델 객체도 같이 넘겨줘야한다 하셨는데... 모델 객체는 왜 같이 넘겨주어야 하나요?이미 view는 어떤 페이지로 갈지 알고 있고, request 값은 createParamMap(request) 를 통해 넘어온 값을 재정의? 해주는걸로 생각하고 있는데, 모델객체가 왜 필요한지 잘 이해가 안갑니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
인스턴스가 두개일 때
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강사님이 설명해주신 것 중 memberService쪽과 memberRepository에 있는 MemoryMemberRepository는 다른것이다 라고 말씀하셨습니다 따라서 인스턴스가 두개가 만들어진것이고 static이라 문제가 없을 테지만 static이 아니라면 다른 DB를 사용하는 것이기 때문에 내용이 틀려 질 수 있다고 하셨는데여기에 대해서 더 자세히 알고싶습니다.왜 다른 것인지 궁금합니다좀 더 찾아보고 싶은데 어떤 개념을 검색해보면 될까요 ? 감사합니다.
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
회원가입을 하면 no로 나옵니다
gradle - project// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { google() mavenCentral() } dependencies { classpath 'com.google.gms:google-services:4.3.15' } } plugins { id 'com.android.application' version '8.0.1' apply false id 'com.android.library' version '8.0.1' apply false id 'org.jetbrains.kotlin.android' version '1.8.20' apply false }gradle - appplugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'com.google.gms.google-services' } android { namespace 'com.example.myapplication' compileSdk 33 defaultConfig { applicationId "com.example.myapplication" minSdk 24 targetSdk 33 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } } dependencies { implementation 'androidx.core:core-ktx:1.8.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' implementation platform('com.google.firebase:firebase-bom:32.0.0') implementation 'com.google.firebase:firebase-analytics-ktx' implementation 'com.google.firebase:firebase-auth-ktx' }MainActivitypackage com.example.myapplication import android.content.ContentValues.TAG import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.widget.Button import android.widget.Toast import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.ktx.auth import com.google.firebase.ktx.Firebase class MainActivity : AppCompatActivity() { private lateinit var auth: FirebaseAuth override fun onCreate(savedInstanceState: Bundle?) { auth = Firebase.auth super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val joinBtnClicked=findViewById<Button>(R.id.joinBtn) joinBtnClicked.setOnClickListener { auth.createUserWithEmailAndPassword("asd@asd.com", "12341234") .addOnCompleteListener(this) { task -> if (task.isSuccessful) { Toast.makeText(this,"ok",Toast.LENGTH_SHORT).show() } else { Toast.makeText(this,"no",Toast.LENGTH_SHORT).show() Log.e(TAG, "createUserWithEmail:failure", task.exception) } } } } }
-
해결됨웹 게임을 만들며 배우는 React
hooks 재실행에 대해
6-5 로또 강의에서 useMemo 가르치시기 전에 "hooks의 특성상 전체가 계속 다시 실행된다"라는 말씀을 하셨고, useState(초기값)도 불필요하게 계속 재실행되기에 함수 결과값으로 기억하기 위해 useMemo를 쓴다는 것인데그 말씀대로라면 강의 초반 구구단 챕터에서const [first, setFirst] = React.useState(Math.ceil(Math.random() * 9)) const [second, setSecond] = React.useState(Math.ceil(Math.random()*9)) const [value, setValue] = React.useState('') const [result, setResult] = React.useState('') const inputRef = React.useRef() const submit = (e) => { e.preventDefault() if(Number(value)===first * second) { setResult('정답') setValue('') setFirst(Math.ceil(Math.random()*9)) setSecond(Math.ceil(Math.random()*9)) } else { setResult('땡') setValue('') } inputRef.current.focus() }submit함수에 setFirst(Math.ceil(Math.random()*9)), setSecond(Math.ceil(Math.random()*9))를 안써도 되지 않나요?가장 위에 useState(Math.ceil(Math.random() * 9)) 으로 초기값을 지정해놨으니까 어차피 렌더링 될 때마다 useState가 재실행 되니까 setFirst와 setSecond는 필요 없는 것 아닌가요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
[4-K] 반례 찾기가 어렵습니다.. ! ㅠ
#include <bits/stdc++.h> using namespace std; int T, N, M, A, B; // 체크해야할 그래프의 수, node 수, edge 수 vector<int> graph[1004]; int vis[1004]; int dfs(int here){ vis[here] = 1; // 방문 int ret = 1; if(graph[here].size()){ for(auto i : graph[here]){ if(vis[i]) continue; ret += dfs(i); } } return ret; } bool isTree(){ if(dfs(1) != N || M != (N-1)) return false; // Vertex = Edge - 1 return true; } int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> T; while(T--){ cin >> N >> M; // 1부터 N까지의 노드 for(int i = 0 ; i < M ; i++){ cin >> A >> B; graph[A].push_back(B); graph[B].push_back(A); } if(isTree()){ cout << "tree"; }else{ cout << "graph"; }; for(int i = 0 ; i <= 1004 ; i++) graph[i].clear(); // for(auto i : graph) {if(i.size()) i.clear();} // 초기화. memset(vis, 0, sizeof(vis)); // T개의 그래프 개수가 주어지고, 각각의 그래프에 대해 N, M이 주어짐. // M개의 라인 동안 A,B 가 주어짐. } } // 트리의 조건. // 0) 모든 노드에 접근가능. ~ isTree() => 모든 노드에 접근해보는 dfs 만약 아니라면? -> 나가리. (개수가 N이 아니면) // Vertex = Edge - 1 같은 방식으로 푼것 같은데 아무리 해도 반례를 찾을 수가 없습니다 ㅠㅠ테스트케이스는 다 통과했는데, 1%에서 틀렸습니다가 뜨네요.. 항상 풀던 int 반환형 dfs로 했는데 왜 안되는지 이해가 안되네요 ㅠㅠ
-
미해결MS Azure 애저 클라우드 서비스 구축 이해와 보안
NSG을 활용한 네트워크 트래픽 필터링 실습 중 문의 사항이 있습니다.
우선 질문은 마지막 실습인 myVM1에 80포트로 접속이 안되는 문제입니다.'아래와 같이 myNSG 규칙이 설정이 되어 있고아래와 같이 myVM1 애플리케이션 보안 그룹이 설정 되어 있습니다. 아래에서myVM1 설정이 myNSG 및 myVM1NSG 설정이 되어 있는데 접속이 안됩니다. 제가 뭘 실수를 했는지 잘 안되네요...ㅠㅠ확인 한번 부탁 드립니다. 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
인접행렬을 기반으로 탐색하기 블로그 정답코드
안녕하세요 선생님 수업 잘 듣고있습니다. http://boj.kr/f04608a73b92415eb201ffc29830dcf1위 코드는 블로그 2주차 인접행렬을 기반으로 탐색하기의 정답코드입니다. 선생님께서는 a[1][2] = 1; a[1][3] = 1; a[3][4] = 1; a[2][1] = 1; a[3][1] = 1; a[4][3] = 1;부분을 main함수 안에다 설정해놓으셨는데 전역변수가 아니라 main함수안에 설정해 놓으신 이유가 궁금합니다.또 저 위의 main함수 안에 설정된 값들이 어떻게 go함수가 메인함수보다 더 위에 있음에도 불구하고 go함수에서 참조가 가능한지도 궁금합니다. 강의 잘 듣고 있습니다 감사합니다!
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
HashMap 에 Integer를 넣어도 되지 않나요?
[질문 내용]강의에서 약 10분25초 쯤에 MemberSaveControllerV3 에서 age 를 Integer 형태로 변환을 해주고 있는데 처음부터 HashMap에 String이 아니라 Integer 형태로 반환해주었다면 Integer 변환 처리는 안해도되지않나요??HashMap 에 String, String으로 설정?한 이유가 궁금합니다.
-
해결됨Svelte.js SPA 영화 검색 프로젝트
snowtemplate 를 설치하는중에 에러가 발생합니다.
안녕하세요 예제를 따라가다 보니 snowtempalte를 npm으로 설치중에 에러가 발생하네요강의 촬영시와 시간이 좀 흘러서 설치에 문제가 있어보이는데 보완할 수 있는 내용을 명시해주시면 좋을 것 같습니다.감사합니다.
-
해결됨홍정모의 따라하며 배우는 C++
1.14 #define
10:20 정도에#define LIKE_APPLEint main(){#ifdef LIKE_APPLEcout << "Apple" << endl;}이 상황일 때define은 뒤의 macro를 그 뒤의 걸로 교체해준다고 했는데#define LIKE_APPLE 뒤에는 아무것도 없으니 #ifdef 뒤의 LIKE_APPLE을 빈칸으로 교체해주는 건가?NO!#ifdef LIKE_APPLE 같이 preprocessor 라인 안에서는 교체 안 한다.라고 하셨습니다.그럼 만약, preprocessor 라인이 아니라 cout << LIKE_APPLE; 같이 평범한 라인일 경우 빈칸이 출력되나요?
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
xml에 아무리 찾아도 오류가 없는데 이상합니다
Execution failed for task ':app:extractDeepLinksDebug'. > org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog. 오류가 뜨는데 구글링 chatgpt 통해서 알아봐도 아무리 봐도 xml오류가 없습니다..6시간째 찾는중인데 도와주세요 ㅠㅠ
-
해결됨홍정모의 따라하며 배우는 C++
1.14 Conditional Compilation을 많이 쓰는 경우
선생님께서 8:50 정도에,Conditional Compilation을 많이 쓸 때는 이 프로그램이 build 시작하기 전에 윈도우즈든지 리눅스든지 좀 알고 시작하자 이럴 때라고 하셨습니다...그런데 이게 무슨 뜻인지 잘 모르겠는데 혹시 구체적으로 설명해주실 수 있으실까요?ㅠㅠ
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
EntityManager 도 Component 로 인식하는 것인가요?
안녕하세요! 이전 수업에서 Autowired로 주입 시키려면 스프링 빈에서 관리하는 객체여야한다고 배웠고, 스프링 빈에서 관리하려면 @Component 어노테이션이 있어야 한다고 이해했습니다.근데 EntityManager는 컴포넌트가 아닌데 왜Autowired 대상이 되는지 이해가 안됩니다ㅜㅜ감사합니다..
-
해결됨
김영한 스프링 DB-2 Test/resources 폴더
안녕하세요 김영한님 스프링 db2강의를 듣는중 강사님께서 올려주신 프로젝트에는 보시는것처럼 test / resources 파일이 있어 test에서 application.properties파일에 접근할 수 있습니다.강의에서 배운내용을 적용하기위해 새로 플젝을까서 공부하고있는데 보시는것과같이 resources폴더가 없더라구요. 이런경우엔 어떻게 해결하면될까요
-
미해결Slack 클론 코딩[실시간 채팅 with React]
데이터 질문이요
const onSubmitForm = useCallback( (e) => { e.preventDefault(); if (chat?.trim() && chatData) { const savedChat = chat; mutateChat((prevChatData) => { prevChatData?.[0].unshift({ id: (chatData[0][0]?.id || 0) + 1, content: savedChat, SenderId: myData.id, Sender: myData, ReceiverId: userData.id, Receiver: userData, createdAt: new Date(), }); return prevChatData; }, false).then(() => { localStorage.setItem(`${workspace}-${id}`, new Date().getTime().toString()); setChat(''); if (scrollbarRef.current) { console.log('scrollToBottom!', scrollbarRef.current?.getValues()); scrollbarRef.current.scrollToBottom(); } }); axios .post(`/api/workspaces/${workspace}/dms/${id}/chats`, { content: chat, }) .then(() => console.log('first')) .catch(console.error); } }, [chat, workspace, id, myData, userData, chatData, mutateChat, setChat], ); const onMessage = useCallback( (data: IDM) => { if (data.SenderId === Number(id) && myData.id !== Number(id)) { mutateChat((chatData) => { chatData?.[0].unshift(data); return chatData; }, false) 이부분은 socket?.on('dm', onMessage) dm보내는 페이지에서 디엠을 보낼 때 onSubmitForm에서 mutate가 먼저 실행돼서 화면 데이터를 먼저 바꿔주고 그 다음 서버로 데이터를 보낸 뒤 처리하는 과정에서 socket.emit()이 실행되고 onMessage가 실행되는 걸로 이해했는데요. onMessage가 받는 데이터가 onSumbitForm의 mutate가 인자로 받는 함수랑 똑같아서 중복작업이 아닌가 싶어서 onMessage mutate 안의 chat.Data?.[0].unshift(data)를 지우고 실행해봐도 똑같은 결과가 나오는데 이 코드는 왜 있는 건가요?
-
해결됨Verilog FPGA Program 1 (Arty A7-35T)
SPI에서 Master 내의 miso 값 update 과정에서 질문있습니다.
안녕하세요. FPGA_intro_v16.pdf 파일 내의 chapter 6.2.3에서 질문이 있습니다.152-182 line에서,miso의 값을 update하는 과정에서, freq=100이라고 한다면, SLAVE_ID[7]이 update 된 후 SLAVE_ID[6]은 90 clock cycle 후에 update 되는 것으로 보입니다. 그 이후에는 200cycle마다 SLAVE_ID[6] ~ wdata[0]까지 주기적으로 update 되는 것으로 보입니다.제가 코드를 잘 해석한 것이 맞다면, SLAVE_ID[7]과 SLAVE[7] 사이에서만 주기성이 깨진(?) 것으로 보이는데 이는 ready state에서 data를 한 bit라도 미리 보내서 s_send에서 소모되는 clock cycle을 조금이라도 줄이기 위함인지, 다른 특별한 목적이 있는지, 저의 해석이 틀린 것인지 궁금하여 질문드립니다.
-
미해결스프링 핵심 원리 - 기본편
메소드 오버라이딩 오류
OrderServiceImplTest라는 파일로 테스트 하려던 중 createOrder와 관련된 오버라이드 오류가 발생했습니다. OrderServcieImpl 클래스에서는 The method createOrder(Long, String, int) of type OrderServiceImpl must override or implement a supertype method 라는 오류가 발생했고MemberRepository 클래스에서는The field OrderServiceImpl.discountPolicy is not visible 이 발생했습니다.DiscountPolicy 클래스에서는(1) Duplicate method createOrder(OrderServiceImpl, Long, String, int) in type DiscountPolicy(2) The field OrderServiceImpl.memberRepository is not visible(3) Duplicate method createOrder(OrderServiceImpl, Long, String, int) in type DiscountPolicy 이 차례로 발생하였습니다.오버라이드 관련 오류인건 알겠는데, 어디서 어떤 부분을 고쳐야할지 막막하네요 2시간 30분 가량 구글링도 해보고 직접 코드도 수정해봤는데 오히려 먼 산으로 가는 느낌입니다. 도와주세요 ㅜ_ㅜ
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
nodejs express에서 type(commonjs,module) 관련 질문
서버작동을 위한 node app.js를 실행할때에 dotenv를 require, import를 하면서 문의점이 발생했습니다. //server.js import { creatApp } from "./app.js"; import database from "./models/database.js"; const startServer = async () => { try { await database; const app = creatApp(); const PORT = process.env.PORT; app.listen(PORT, () => { console.log(`server is listening on ${PORT}👌`); }); } catch (err) { console.log(`Failed server connect❌`); database.destroy(); } }; startServer(); //database.js import { createConnection } from "typeorm"; import dotenv from "dotenv"; dotenv.config(); const database = createConnection({ type: process.env.DB_CONNECTION, host: process.env.DB_HOST, username: process.env.DB_USERNAME, password: process.env.DB_PASSWORD, port: process.env.DB_PORT, database: process.env.DB_DATABASE, }); export default database; 이렇게 진행하면 정상적으로 서버가 정상적으로 작동하지만 database.js에서의 dotenv import 부분을 require방식으로 server.js에 옮겨놓으면 에러가 발생합니다.근본적으로 commonJS(require)방식과 module(import)방식에 대해서 dotenv를 불러올때에 require를 쓰면 server.js에 적용할때는 정상적으로 작동하는데 import를 똑같은상황에서 적용하려면 왜 database.js로 넘어가야하는지 그게 궁금해졌습니다!require와 import를 해올 때 전반적으로는 rquire는 동기적이고 import비동기적인 성질(?)때문이라고 하기에 영향이 있는건지.. 근본적인 이해가 되지 않아서요..ㅠㅜ 도움 부탁드리겠습니다 ㅠㅜ!!!!