묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결배달앱 클론코딩 [with React Native]
코드푸시 관련 질문
안녕하세요. 다름이 아니라 코드푸시 학습중 궁금한 점이 있어 질문드립니다.첫번째로코드푸시할때만 package.json 버전으로 편의상 체크만 해두고 aos, ios는 버전 안올리고앱스토어에 배포할 경우에만 (aos,ios) 버전을 package.json과 맞추면 되는지 궁금합니다. 두번째로코드푸시 할 때 'npm run codepush:android'만 해도 코드푸시가 작동하는데'npm run bundle:android'와 'npm run codepush:android'가 어떤 상호작용을 하는지 궁금합니다."codepush:android": "appcenter codepush release-react -a name/sentry_codepush -d Production --sourcemap-output --output-dir ./build -m -t 1.0", "bundle:android": "react-native bundle --assets-dest build/CodePush --bundle-output build/CodePush/index.android.bundle --dev false --entry-file index.js --platform android --sourcemap-output build/CodePush/index.android.bundle.map", 세번째로제가 잘못한 부분인것 같은데 앱센터에 코드푸시 올라간 상태로 앱을 지우고 다시 설치해서 실행하면 업데이트 문구가 뜹니다. 코드 푸시 적용한 코드와 같은 상태에 빌드앱 인 것 같은데 업데이트가 어떤 이유로 뜨는지 궁금합니다. 감사합니다.
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
else문 10줄,11줄이 이해가 안가는 부분이 있습니다.
안녕하세요! 강의 잘 듣고 있습니다 :) 다름이 아니라 이 문제에서 궁금한 점이 있습니다.else: for i in range(n): DFS(L+1, sum+a[i])로 지정하셨더라고요! 근데 다른 문제에서는else: DFS(L+1, sum+a[L]) 이런 방식으로 푸셨는데 어떤 차이일까요?
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
동적라우팅 seo 질문!
안녕하세요 제로초님ssr에서 동적라우팅으로 생성된 페이지들은 검색엔진이 어떻게 캐치하는 것인가요?getServerSideProps로 ssr 하는 경우 빌드 시점이 아닌 해당 페이지를 요청할때 데이터를 포함시켜서 문서를 만들텐데 검색엔진에 어떻게 노출되는지 궁금합니다.
-
미해결공공데이터로 파이썬 데이터 분석 시작하기
구지 2차원 리스트로 하지 않아도 되죠?
알려주신 부분중에df.loc[[0,1,2]]이 부분을df.loc[0:2]이렇게 해도 실행은 되는데 뭔가 차이점이 있나요?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
안녕하세요 제로초님 redux-persist 질문 드립니다.
안녕하세요 제로초님redux-toolkit에 next-redux-wrapper와 redux-persist 연결하는데 질문드립니다.import userReducer from "@slice/userSlice"; import commonSlice from "@slice/commonSlice"; import localSlice from "@slice/locals"; export const persistConfig = { key: "root", version: 0, whitelist: ["locals"], storage, }; export const rootReducer = (state, action) => { if (action.type === HYDRATE) { return { ...state, ...action.payload, }; } return combineReducers({ user: userReducer, common: commonSlice, locals: localSlice, })(state, action); }; export const reducer = persistReducer(persistConfig, rootReducer); 이렇게 초기 셋팅을 해주었고, export const store = configureStore({ reducer, middleware: (getDefaultMiddleware) => getDefaultMiddleware({ serializableCheck: { ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER], }, }).concat(logger), devTools: process.env.NEXT_PUBLIC_NODE_ENV !== "production", }); export const persistor = persistStore(store); const setupStore = (context: any): EnhancedStore => store; const makeStore: MakeStore<any> = (context: any) => setupStore(context); export const wrapper = createWrapper<Store>(makeStore); export default wrapper;이렇게 스토어를 만들었습니다.그런데 문제가.. persist에서 rehydrate에서는 저장된 값이 유지 되어있으나.next-redux-wrapper의 hydrate에서 초기 스테이트값을 다시 저장해버리는 문제가 있습니다.둘중 하나를 버려야 할까요? 아니면 셋팅이 잘못된걸까요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 강의 시청중 궁금한점 생겨서 질문드립니다.
웹서버의 경우 실무에서 docker를 많이 사용하는 것 같은데요, 혹시 소켓 기반 실시간 게임서버개발에도 docker를 많이 사용하는지 궁금합니다!
-
미해결
vue.js websocket 관련 express 질문드립니다.
안녕하세요 vue.js로 websocket 구현시키는 중 문제가 발생하여 질문드립니다.websocket 구현시키려면 server.js에 express를 사용해야 한다고 해서 'npm install express socket.io' 를 사용하였고 코드를 아래와 같이 구현시켰는데 에러가 발생하네요아래 사진은 에러 메시지 입니다.원인을 좀 알 수 있을까요??
-
미해결데이터 분석 SQL Fundamentals
여러 테이블을 조인할 경우 성능 질문
안녕하세요? 강사님 머신러닝 강의에 이어서 SQL 강의도 잘 보고 있습니다질문이 있는데가령 3개의 테이블을 join할 경우테이블a join 테이블b join 테이블c 이렇게 순서대로 join하는 것과테이블a와 테이블b를 join하고 그 결과를 서브쿼리로 해서 테이블 d로 만들고 테이블c와 join하는 것과 성능적인 측면에서는 차이가 없는건지 궁금합니다
-
미해결초보자도 만들 수 있는 스크롤 인터렉션. 1편 자바스크립트
4-3 함수선언방식 질문
function motion() { //스크롤할때마다 작동할 함수 setProperty(); changeBg(); parallaxMove(); } function init() { motion() }; $(window).scroll(function(e) { motion(); }); init(); //이런식으로 함수끼리 연결?하는방식으로 하셨는데 $(window).scroll(function(e) { setProperty(); changeBg(); parallaxMove(); }); /** 이런식으로 해도 작동이되는거같아서 왜 함수를 스크롤함수,init함수,motion함수 각각 만들어서 연결하는방식으로 하신이유가있을까요? */
-
미해결스프링 핵심 원리 - 기본편
@SpringBootTest 와 순수 자바 테스트
안녕하세요!수업중에 순수 자바 테스트 코드에서는 @Autowired가 동작하지 않아서 @SpringBootTest처럼 스프링 컨테이너를 테스트에 통합한 경우만 가능하다고 하셨는데,그동안의 수업에서 진행한 unit test는 통합 테스트였었나요?분명 스프링컨테이너로 스프링 빈을 등록하고 여러 테스트를 진행했어서 순수 자바 테스트란 어떤 테스트 인지 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
영화를 찍는거라면
안녕하세요.플레이버튼을 눌러 영화를 찍는 거라 말씀하셨습니다.그러면 나중에 그 영화 찍은 것을 다시 보려면 어떻게 해야 하나요?
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
saga의 loadPostsAPI 함수 실행 질문드립니다.
안녕하세요 제로초님 강의잘듣고있습니다.게시글을 불러올 때 saga에서 다음과 같은 에러가 발생하면서 loadPostsAPI 함수가 실행이 안되서 질문드립니다.콘솔의 오류를 확인해보니 data속성을 읽을 수 없어서 LOAD_POSTS_FAILURE에서 error를 출력합니다.강의내용의 코드와 다른점이 없는것같은데 혹시 이문제에 대해 알 수 있을까요?참코 코드도 같이 첨부하겠습니다.reducers/post.jsconst reducer = (state = initialState, action) => { return produce(state, (draft) => { switch (action.type) { case LOAD_POSTS_REQUEST: draft.loadPostsLoading = true; draft.loadPostsDone = false; draft.loadPostsError = null; break; case LOAD_POSTS_SUCCESS: draft.loadPostsLoading = false; draft.loadPostsDone = true; draft.firstPageLoad = false; draft.mainPosts = draft.mainPosts.concat(action.data); draft.hasMorePosts = draft.mainPosts.length < 30; break; case LOAD_POSTS_FAILURE: draft.loadPostsLoading = false; draft.loadPostsError = action.error; break;sagas/post.jsimport { all, fork, delay, put, takeLatest, call } from 'redux-saga/effects'; import shortId from 'shortid'; import axios from 'axios'; import { LOAD_POSTS_REQUEST, LOAD_POSTS_SUCCESS, LOAD_POSTS_FAILURE, } from '../reducers/post'; function loadPostsAPI() { console.log('사가 실행2'); return axios.get('/posts'); } function* loadPosts() { try { console.log('사가 실행1'); const result = yield call(loadPostsAPI, action.data); yield put({ type: LOAD_POSTS_SUCCESS, data: result.data, }) } catch(err) { yield put({ type: LOAD_POSTS_FAILURE, data: err.response.data }) } } function* watchLoadPosts() { yield takeLatest(LOAD_POSTS_REQUEST, loadPosts); } export default function* postSaga() { yield all([ fork(watchLoadPosts), ]); } routes/posts.jsconst express = require('express'); const { Post, User, Image, Comment } = require('../models'); const router = express.Router(); router.get('/', async (req, res, next) => { try { const posts = await Post.findAll({ limit: 10, order: [ ['createdAt', 'DESC'], [Comment, 'createdAt', 'DESC'], ], include: [{ model: User, attributes: ['id', 'nickname'], }, { model: Image, }, { model: Comment, include: [{ model: User, attributes: ['id', 'nickname'], }], }], }); console.log(posts); res.status(200).json(posts); } catch (error) { console.error(error); next(error); } }); module.exports = router;
-
미해결진짜 현업에서 쓰이는 직장인의 실무 엑셀 - 데이터 가공부터 분석까지
MAC 용 엑셀 파워쿼리 편집기
안녕하세요 MAC용 엑셀에서 쿼리 편집기 열기 방법 문의 남깁니다.웹 데이터 연결해오는 것까지는 서치해서 발견한 영상을 보고 따라왔는데요. 다음처럼 엑셀로 불러와진 다음에 편집창이 열리지는 않아서요. 방법이 있을까요?
-
미해결Vue.js 시작하기 - Age of Vue.js
Volar vs Vetur
강사님은 Vetur을 설치하셨는데, vue3.0지원 등의 이유로 최근에는 Vetur보다 Volar가 권장된다고 소문을 들어, 강사님은 어떻게 생각하시는지 궁금합니다!
-
미해결공공데이터로 파이썬 데이터 분석 시작하기
레티나 디스플레이 관련 질문
윈도우에서는 레티나 디스플레이 코드로 설정을 해도 표에서 달라진게 없는거같은데 혹시 맥 전용 기능인가요..?
-
해결됨[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
댓글 여러개 작성시 댓글이 안보임
선생님 저 질문이있어서 이렇게 문의드립니다.댓글 불러오기강의에서 댓글을 여러개 작성을 하게 되면 사진에 보이는 것처럼 댓글을 새로 작성해도 화면에 보이지 않고있습니다.infinite/endless scroll(무한 스크롤)기능을 추가해야하는지 싶어서 이렇게 문의드립니다.activity_board_inside.xml<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".board.BoardInsideActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="60dp"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/titleArea" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="50dp" android:layout_marginRight="50dp" android:gravity="center" android:text="title" android:textColor="@color/black" android:textSize="20sp" android:textStyle="bold" /> <ImageView android:id="@+id/boardSettingIcon" android:layout_width="20dp" android:layout_height="40dp" android:layout_margin="10dp" android:src="@drawable/main_menu" android:visibility="invisible" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0.5dp" android:background="@color/black"> </LinearLayout> <TextView android:id="@+id/timeArea" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:gravity="right" android:text="time" /> <TextView android:id="@+id/textArea" android:layout_width="match_parent" android:layout_height="200dp" android:layout_margin="20dp" android:background="@drawable/background_radius" android:padding="10dp" android:text="여기는 내용 영역" android:textColor="@color/black" /> <ImageView android:id="@+id/getImageArea" android:layout_width="match_parent" android:layout_height="300dp" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" /> <ListView android:id="@+id/commentLV" android:layout_width="match_parent" android:layout_height="600dp" /> </LinearLayout> </ScrollView> <LinearLayout android:layout_width="match_parent" android:layout_alignParentBottom="true" android:background="@color/white" android:layout_height="60dp"> <EditText android:id="@+id/commentArea" android:hint="댓글을 입력해주세요" android:layout_marginLeft="10dp" android:layout_width="320dp" android:layout_height="match_parent" android:background="@android:color/transparent"/> <ImageView android:id="@+id/commentBtn" android:src="@drawable/btnwrite" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> </RelativeLayout> </layout>BoardInsideActivity.ktpackage com.example.mysolelife.board import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.widget.Button import android.widget.Toast import androidx.appcompat.app.AlertDialog import androidx.core.view.isVisible import androidx.databinding.DataBindingUtil import com.bumptech.glide.Glide import com.example.mysolelife.R import com.example.mysolelife.comment.CommentLVAdapter import com.example.mysolelife.comment.CommentModel import com.example.mysolelife.databinding.ActivityBoardInsideBinding import com.example.mysolelife.utils.FBAuth import com.example.mysolelife.utils.FBRef import com.google.android.gms.tasks.OnCompleteListener import com.google.firebase.database.DataSnapshot import com.google.firebase.database.DatabaseError import com.google.firebase.database.ValueEventListener import com.google.firebase.ktx.Firebase import com.google.firebase.storage.ktx.storage import java.lang.Exception class BoardInsideActivity : AppCompatActivity() { private val TAG = BoardInsideActivity::class.java.simpleName private lateinit var binding : ActivityBoardInsideBinding private lateinit var key : String private val commentDataList = mutableListOf<CommentModel>() private lateinit var commentAdapter : CommentLVAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.activity_board_inside) binding.boardSettingIcon.setOnClickListener { showDialog() } // 첫 번째 방법 /* val title = intent.getStringExtra("title").toString() val content = intent.getStringExtra("content").toString() val time = intent.getStringExtra("time").toString() binding.titleArea.text = title binding.textArea.text = content binding.timeArea.text = time*/ // 두 번째 방법 key = intent.getStringExtra("key").toString() getBoardData(key) getImageData(key) binding.commentBtn.setOnClickListener { insertComment(key) } commentAdapter = CommentLVAdapter(commentDataList) binding.commentLV.adapter = commentAdapter getCommentData(key) } private fun getBoardData(key : String) { val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { try { val dataModel = dataSnapshot.getValue(BoardModel::class.java) Log.d(TAG, dataModel!!.title) binding.titleArea.text = dataModel!!.title binding.textArea.text = dataModel!!.content binding.timeArea.text = dataModel!!.time val myUid = FBAuth.getUid() val writerUid = dataModel.uid if(myUid.equals(writerUid)) { binding.boardSettingIcon.isVisible = true } else { } } catch (e : Exception) { Log.d(TAG, "삭제완료") } } override fun onCancelled(databaseError: DatabaseError) { // Getting Post failed, log a message Log.w("ContentListActivity", "loadPost:onCancelled", databaseError.toException()) } } FBRef.boardRef.child(key).addValueEventListener(postListener) } private fun getImageData(key : String) { // Reference to an image file in Cloud Storage val storageReference = Firebase.storage.reference.child(key + ".png") // ImageView in your Activity val imageViewFromFB = binding.getImageArea storageReference.downloadUrl.addOnCompleteListener(OnCompleteListener { task -> if (task.isSuccessful) { Glide.with(this) .load(task.result) .into(imageViewFromFB) } else { binding.getImageArea.isVisible = false // 이미지 사진이 없을 때 } }) } private fun showDialog() { val mDialogView = LayoutInflater.from(this).inflate(R.layout.custom_dialog, null) val mBuilder = AlertDialog.Builder(this) .setView(mDialogView) .setTitle("게시글 수정/삭제") val alertDialog = mBuilder.show() alertDialog.findViewById<Button>(R.id.editBtn)?.setOnClickListener { Toast.makeText(this, "수정 버튼을 눌렀습니다", Toast.LENGTH_LONG).show() val intent = Intent(this, BoardEditActivity::class.java) intent.putExtra("key", key) startActivity(intent) } alertDialog.findViewById<Button>(R.id.removeBtn)?.setOnClickListener { FBRef.boardRef.child(key).removeValue() Toast.makeText(this, "삭제완료", Toast.LENGTH_LONG).show() finish() } } fun insertComment(key : String){ // 파이어베이스 구조 // comment // - BoardKey // - CommentKey // - CommentData // - CommentData // - CommentData FBRef.commentRef .child(key) .push() .setValue( CommentModel( binding.commentArea.text.toString(), FBAuth.getTime() ) ) Toast.makeText(this, "댓글 입력 완료", Toast.LENGTH_SHORT).show() binding.commentArea.setText("") } fun getCommentData(key: String){ val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { commentDataList.clear() for (dataModel in dataSnapshot.children) { val item = dataModel.getValue(CommentModel::class.java) commentDataList.add(item!!) } commentAdapter.notifyDataSetChanged() } override fun onCancelled(databaseError: DatabaseError) { // Getting Post failed, log a message Log.w(TAG, "loadPost:onCancelled", databaseError.toException()) } } FBRef.commentRef.child(key).addValueEventListener(postListener) } }
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
main문 실행
Spring Project 처음 open해서 열었는데 위와 같이 경로를 찾을 수 없다고 나옵니다 ㅠㅠ 또 강의에서 main문 실행하는 초록색 커서가 나타나지 않습니다.
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
driver.implicitly_wait(10)가 웹페이지를 열고 난 후로 코드의 위치를 변경하는 것이 맞지 않나요?
driver.implicitly_wait(10)가 웹페이지를 열고 난 후로 코드의 위치를 변경하는 것이 맞지 않나요?현재는 driver.get('~') 앞 줄에 driver.implicitly_wait(10)을 넣어 놓으셨네요.
-
미해결프론트엔드 개발환경의 이해와 실습 (webpack, babel, eslint..)
질문 드립니다
강의명: 플러그인강의에서 설명해주신 대로 제대로 동작하지 않는데 뭐가 문제인지 모르겠어서 질문 드립니다ㅜㅜ <강의 내용><작성><오류>
-
미해결공공데이터로 파이썬 데이터 분석 시작하기
워드클라우드 실행 오류
이와같은 오류메시지로 실행이 안되는데 해결책 알수 있을까요 선생님 ㅜ