묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Flutter로 SNS 앱 만들기
섹션8 게시글 정보 가져오기 feedModel를 못받아오는것 같습니다.
feedModel을 못 받아오는것 같습니다.
-
미해결코틀린 코루틴 완전 정복
공유 스레드풀에 대하여 질문 있습니다
안녕하세요. 1) "미리 정의된 CoroutineDispatcher - 1. Dispatchers.IO, Dispatchers.Default" 강의 중 마지막 부분에서 Dispatchers.IO와 Dispatchers.Default가 사용하는 스레드의 이름이 동일한 이유는 공유 스레드풀 때문이라고 하셨는데, 이 부분이 이해가 잘 가지 않습니다.이것이 중요한 이유가 각각의 Dispatcher가 사용하는 스레드가 실제로는 다름에도 불구하고, 이름은 동일하기 때문에 헷갈리면 안되기 때문인가요? 제가 강조하신 부분을 잘 이해한건지 모르겠습니다.2) LimitedParallelism은 코루틴 사용 시 모든 부분에 적용해야 하는 것인가요? 아니면 특정 경우에만 사용하면 되는 것인가요?3) Code3-1~3-4를 실행할 때 어떤 때는 스레드 이름이 DefaultDispatcher-worker-1,2,3으로 뜨지만 또 어떤 때는 1,2,1 또는 1,2,4 또는 1,2,5 이런식으로 뜨는데 이유가 무엇인가요?감사합니다!
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
앱 테스트 구동이 안돼요
BTS 강의 레이아웃에 사진삽입 6분 4초쯤 보고 있는데요, 알려주신대로 다음과 같이 코드를 입력하고 앱 구동을 눌렀는데<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="120dp"> <ImageView android:src="@drawable/bts_1" android:layout_width="120dp" android:layout_height="120dp"> <ImageView android:src="@drawable/bts_2" android:layout_width="120dp" android:layout_height="120dp"> <ImageView android:src="@drawable/bts_3" android:layout_width="120dp" android:layout_height="120dp"> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="120dp"> <ImageView android:src="@drawable/bts_4" android:layout_width="120dp" android:layout_height="120dp"> <ImageView android:src="@drawable/bts_5" android:layout_width="120dp" android:layout_height="120dp"> <ImageView android:src="@drawable/bts_6" android:layout_width="120dp" android:layout_height="120dp"> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="120dp"> <ImageView android:src="@drawable/bts_7" android:layout_width="120dp" android:layout_height="120dp"> </LinearLayout> </LinearLayout> 다음 문구와 같이 에러가 떠서 테스트 구동이 안됩니다. Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing com.android.build.gradle.internal.res.ParseLibraryResourcesTask$ParseResourcesRunnable 뭐가 잘못된건가요??
-
미해결Flutter로 SNS 앱 만들기
메인화면에서 뒤로가기 눌렀을때 어플종료관련 건
메인화면에서 뒤로가기 눌렀을때 어플 종료를 하고 싶어서메인화면에서 WillPopScope( onWillPop: () async => false, 이 부분을 수정하였습니다. 수정한 결과 어플이 종료는 되나. 다시 어플을 실행했을때 splash화면에서 다음 화면으로 넘어가지 않습니다.. 아마도 사용자 정보를 가져오지 못해서 그런것 같은데.. 방법이 없을까요?
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
로그인 로그아웃
강의 잘 보고 있습니다다름이 아니라 로그인 로그아웃 버튼도 만들었고수업에 나온 것처럼 똑같이 코드를 썼는데도막상 작동하면 uid까진 출력되는데문제는1) 로그아웃 버튼을 누르면 null 메세지가 출력이 안 됩니다2) 그렇다고 로그아웃 버튼을 누르고 로그인 되어있던 계정을 누르면 toast로 써둔 "로그인 성공"이라는 메세지가 안 뜸 일단 MainActivity.kt에 쓴 코드와activity_main.xml에 쓴 코드를 올리겠습니다 //MainActivity.kt에 쓴 코드package com.example.mysampleapp import com.example.mysampleapp.databinding.ActivityMainBinding import android.os.Bundle import android.widget.Button import android.widget.EditText import android.widget.Toast import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.databinding.DataBindingUtil 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 private lateinit var binding : ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { // Initialize Firebase Auth auth = Firebase.auth super.onCreate(savedInstanceState) enableEdgeToEdge() setContentView(R.layout.activity_main) Toast.makeText(this, auth.currentUser?.uid.toString(),Toast.LENGTH_SHORT).show() binding = DataBindingUtil.setContentView(this, R.layout.activity_main) val joinBtnClicked = findViewById<Button>(R.id.joinBtn) joinBtnClicked.setOnClickListener { // 첫번째 방법 // val email = findViewById<EditText>(R.id.emailArea) // val pwd = findViewById<EditText>(R.id.pwdArea) //두번째 방법 val email = binding.emailArea val pwd = binding.pwdArea auth.createUserWithEmailAndPassword( email.text.toString(), pwd.text.toString() ) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { Toast.makeText(this,"ok",Toast.LENGTH_SHORT).show() } else { Toast.makeText(this,"no",Toast.LENGTH_SHORT).show() } } binding.logoutBtn.setOnClickListener{ auth.signOut() Toast.makeText(this,auth.currentUser?.uid.toString(),Toast.LENGTH_SHORT).show() } binding.loginBtn.setOnClickListener{ val email = binding.emailArea val pwd = binding.pwdArea auth.signInWithEmailAndPassword( email.text.toString(), pwd.text.toString() ) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { //성공하면 Toast.makeText(this, "로그인 성공", Toast.LENGTH_SHORT).show() //성공하면 UID 값을 띄워보자↓ Toast.makeText(this,auth.currentUser?.uid.toString(),Toast.LENGTH_SHORT).show() } else { //실패하면 Toast.makeText(this, "로그인 실패", Toast.LENGTH_SHORT).show() } } } } } }//activity_main.xml에 쓴 코드<?xml version="1.0" encoding="utf-8"?> <layout> <LinearLayout 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" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical"> <EditText android:id="@+id/emailArea" android:hint="email" android:layout_width="match_parent" android:layout_height="wrap_content"/> <EditText android:id="@+id/pwdArea" android:hint="pwd" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:id="@+id/joinBtn" android:text="회원가입" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:id="@+id/logoutBtn" android:text="LOGOUT" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:id="@+id/loginBtn" android:text="LOGIN" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> </layout>긴 글 읽어주심에 감사합니다....😥😥
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
갤럭시 연결시 게시판에 업로드한 사진이 보이지 않아요.
안녕하세요 코틀린강좌를 통해 안드로이드 앱 제작공부를 하고 있는 학생입니다.다름이 아니라 완성된 앱을 갤럭시 안드로이드폰에 연결하는 작업까지 완료하고 실행하여 오류가 있는 부분을 찾던 중에 게시판에 만들었던 사진첨부 기능이 작동되지 않는것 같아서 문의차 커뮤니티에 올리게되었습니다.위 사진 처럼 글만 입력이 되고 사진은 보이지 않아서 무슨 문제인지 알고 싶습니다!코드는 강좌 그대로 사용했습니다!
-
미해결Flutter로 SNS 앱 만들기
섹션8 게시글 정보가져오기
16:00 에러가 발생되었습니다. 어떻게 해야 하나요.ai로 질문의 답을 받았는데 잘모르겠습니다. void _getFeedList() { WidgetsBinding.instance.addPostFrameCallback((_) async { try { await feedProvider.getFeedList(); } on CustomException catch (e) { errorDialogWidget(context, e); // 에러출력 } }); }이부분을 어떻게 처리하면 됩니까
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
주사위 앱 듣고 있는 중인데 ActivityMainBinding애 import가 보이지 않습니다
<?xml version="1.0" encoding="utf-8"?> <layout> <LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#008000" android:orientation="vertical" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="100dp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="30sp" android:gravity="center" android:textColor="@color/black" android:layout_margin="20dp" android:textStyle="bold" android:text="인생은 주사위 한방에 가는거 아니겠습니까?"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="200dp" android:weightSum="2"> <ImageView android:src="@drawable/dice_1" android:layout_width="120dp" android:layout_height="120dp" android:layout_weight="1"/> <ImageView android:src="@drawable/dice_2" android:layout_width="120dp" android:layout_height="120dp" android:layout_weight="1"/> </LinearLayout> <Button android:id="@+id/DiceStartBtn" android:text="인생 고고" android:layout_width="match_parent" android:background="#@color/black" android:textColor="@color/white" android:layout_height="50dp" android:layout_margin="50dp"/> </LinearLayout> </layout> xml 코드import org.jetbrains.kotlin.storage.CacheResetOnProcessCanceled.enabled plugins { alias(libs.plugins.android.application) alias(libs.plugins.jetbrains.kotlin.android) } android { namespace = "com.seungwon.dice" compileSdk = 34 defaultConfig { applicationId = "com.seungwon.dice" minSdk = 24 targetSdk = 34 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { isMinifyEnabled = 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" } dataBinding{ enable=true } } dependencies { implementation(libs.androidx.core.ktx) implementation(libs.androidx.appcompat) implementation(libs.material) implementation(libs.androidx.activity) implementation(libs.androidx.constraintlayout) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) }gradle코드문제 부분입니다
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
왜 주사위 위치가 저렇게 나올까요?
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#008000" android:orientation="vertical" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="100dp" tools:ignore="MissingConstraints"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="30sp" android:gravity="center" android:textColor="@color/black" android:layout_margin="20dp" android:textStyle="bold" android:text="인생은 주사위 한방에 가는거 아니겠습니까?"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="200dp" tools:ignore="MissingConstraints"> <ImageView android:src="@drawable/dice_1" android:layout_width="120dp" android:layout_height="120dp"/> <ImageView android:src="@drawable/dice_2" android:layout_width="120dp" android:layout_height="120dp"/> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>제대로 따라서 타이핑 한것 같은데 왜 그럴까요?
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
target sdk 34, 에뮬레이터 실행 문제 질문
현재 빌드 진행 중 이러한 오류가 발생합니다.7 issues were found when checking AAR metadata:1. Dependency 'androidx.appcompat:appcompat-resources:1.7.0' requires libraries and applications thatdepend on it to compile against version 34 or later of theAndroid APIs.:app is currently compiled against android-33.Recommended action: Update this project to use a newer compileSdkof at least 34, for example 34.Note that updating a library or application's compileSdk (whichallows newer APIs to be used) can be done separately from updatingtargetSdk (which opts the app in to new runtime behavior) andminSdk (which determines which devices the app can be installedon).2. Dependency 'androidx.appcompat:appcompat:1.7.0' requires libraries and applications thatdepend on it to compile against version 34 or later of theAndroid APIs.:app is currently compiled against android-33.Recommended action: Update this project to use a newer compileSdkof at least 34, for example 34.Note that updating a library or application's compileSdk (whichallows newer APIs to be used) can be done separately from updatingtargetSdk (which opts the app in to new runtime behavior) andminSdk (which determines which devices the app can be installedon).3. Dependency 'androidx.activity:activity:1.8.0' requires libraries and applications thatdepend on it to compile against version 34 or later of theAndroid APIs.:app is currently compiled against android-33.Recommended action: Update this project to use a newer compileSdkof at least 34, for example 34.Note that updating a library or application's compileSdk (whichallows newer APIs to be used) can be done separately from updatingtargetSdk (which opts the app in to new runtime behavior) andminSdk (which determines which devices the app can be installedon).4. Dependency 'androidx.core:core-ktx:1.13.0' requires libraries and applications thatdepend on it to compile against version 34 or later of theAndroid APIs.:app is currently compiled against android-33.Recommended action: Update this project to use a newer compileSdkof at least 34, for example 34.Note that updating a library or application's compileSdk (whichallows newer APIs to be used) can be done separately from updatingtargetSdk (which opts the app in to new runtime behavior) andminSdk (which determines which devices the app can be installedon).5. Dependency 'androidx.transition:transition:1.5.0' requires libraries and applications thatdepend on it to compile against version 34 or later of theAndroid APIs.:app is currently compiled against android-33.Recommended action: Update this project to use a newer compileSdkof at least 34, for example 34.Note that updating a library or application's compileSdk (whichallows newer APIs to be used) can be done separately from updatingtargetSdk (which opts the app in to new runtime behavior) andminSdk (which determines which devices the app can be installedon).6. Dependency 'androidx.core:core:1.13.0' requires libraries and applications thatdepend on it to compile against version 34 or later of theAndroid APIs.:app is currently compiled against android-33.Recommended action: Update this project to use a newer compileSdkof at least 34, for example 34.Note that updating a library or application's compileSdk (whichallows newer APIs to be used) can be done separately from updatingtargetSdk (which opts the app in to new runtime behavior) andminSdk (which determines which devices the app can be installedon).7. Dependency 'androidx.annotation:annotation-experimental:1.4.0' requires libraries and applications thatdepend on it to compile against version 34 or later of theAndroid APIs.:app is currently compiled against android-33.Recommended action: Update this project to use a newer compileSdkof at least 34, for example 34.Note that updating a library or application's compileSdk (whichallows newer APIs to be used) can be done separately from updatingtargetSdk (which opts the app in to new runtime behavior) andminSdk (which determines which devices the app can be installedon).이후 해결을 위해 build.gradle.kts 파일에서compile, target Sdk를 모두 34로 올리고,dependencies { implementation("androidx.core:core-ktx:1.9.0") implementation("androidx.appcompat:appcompat:1.7.0") implementation("com.google.android.material:material:1.12.0") implementation("androidx.constraintlayout:constraintlayout:2.1.4") implementation("androidx.databinding:databinding-runtime:8.7.0") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.2.1") androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1") }dependencies에서 core-ktx 버전을 1.9.0에서 1.13.1로 올렸습니다.이후 빌드에서 오류가 발생하지 않는 걸 확인했습니다.하지만 이후에도run app이 불가능해서 앱을 확인할 수 없었습니다.혹시 sdk 버전 올라가면서 변경할 점이 추가로 있다면 알려주실 수 있나요..
-
미해결Flutter로 SNS 앱 만들기
섹션8에서 게시글 정보 가져오기에서 timeStamp에러 입니다.
섹션8에서 게시글 정보 가져오기에서16:00WidgetsBinding.instance.addPostFrameCallback(callback) 나봅니다. 강의처럼 timeStamp가 나오지 않고,그래서 그냥 진행했습니다.WidgetsBinding.instance.addPostFrameCallback((_) async {그런데 다음과 같이 에러가 뜨네요.이런 메세지가 뜨는 이유가 뭔가요
-
해결됨모바일 게임 해킹(Unity편)
강의에 사용한 앱 APK파일 받을 수 있을까요?
.
-
해결됨코틀린 코루틴 완전 정복
강의와 책을 통해 학습한 내용을 출처를 남기고 기술 블로그 등에 공개해도 될까요?
안녕하세요, 해당 강의와 책을 통해 코루틴에 대한 학습을 진행하고 있는 학생입니다.학습한 내용을 기술 블로그나 깃헙 등에 출처를 남기고 공개해도 되는지 궁금합니다!요즘 강의와 책에 대한 저작권이 중요한 만큼, 강의자님께 직접 여쭙게 되었습니다. 좋은 강의 감사합니다.
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
image1.setOnClickListener { }
image1.setOnClickListener { } 여기서 괄호에 엔터 치시면 it: view! 가 회색으로 바뀌시던대 저는 엔터쳐도 아무 반응이 아무것도 안뜨네요 .. 제가 임의로 it: view!를 쳐넣어도 회색으로 바뀌지도 않고요.. 어찌해야하나요
-
미해결Flutter로 SNS 앱 만들기
8:18 저는 왜이리 이해가 안될까요. 보고 또보고 해도 포기해야 되겠죠...
Future<List<FeedModel>> getFeedList() async { QuerySnapshot<Map<String, dynamic>> snapshot = await firebaseFirestore .collection('feeds') .orderBy('createAt', descending: true) .get(); return await Future.wait(snapshot.docs.map((e) async { Map<String, dynamic> data = e.data(); DocumentReference<Map<String, dynamic>> writerDocRef = data['writer']; DocumentSnapshot<Map<String, dynamic>> writerSnapshot = await writerDocRef.get(); UserModel userModel = UserModel.fromMap(writerSnapshot.data()!); data['writer'] = userModel; return FeedModel.fromMap(data); }).toList()); }이부분에서 return await Future.wait(snapshot.docs.map((e) async { Map<String, dynamic> data = e.data(); DocumentReference<Map<String, dynamic>> writerDocRef = data['writer']; DocumentSnapshot<Map<String, dynamic>> writerSnapshot = await writerDocRef.get(); UserModel userModel = UserModel.fromMap(writerSnapshot.data()!); data['writer'] = userModel; return FeedModel.fromMap(data);이부분을 왜 이리 이해하기가 어려운지 모르겠어요..저만 그런가요...돌려봐도 싶지 않네요..
-
미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
[룸DB 관련 에러] can't open offline database '/data/data/ ...
에러재현Intro를 통해서 DB를 최초 저장하는 것은 성공앱을 재빌드 또는 재실행하면 App Inspection 의 coin_database (closed) 라고 나오는 현상 있음Database Inspector 관련 에러창도 뜹니다. 시도해본 에러 처리시뮬레이터 디바이스 변경시뮬레이터 디바이스 wipe data 실기기에서 [에러재현]과 동일한 방식의 빌드테스트App Inspector의 [Keep Data Connections Open] 활성화[프로젝트파일 구글드라이브 링크]https://drive.google.com/file/d/1a7nJ6Zik7Plpx2UEs7nBKDemQ40qZvpJ/view?usp=sharing 왠만하면 검색하여 해결해보려했는데 도저히 이유를 모르겠네요.. 혹시 어떤 문제인지 알고 계신가요?
-
해결됨코틀린 코루틴 완전 정복
Coroutine과 VirtualThread의 차이점에 대해질문드립니다
안녕하세요 Coroutine 강의 잘듣고있는 수강생입니다 (_ _)최근 JDK21의 VirtualThread관련해 찾아보게 되었는데요 Coroutine과 유사하게 Os단의 Thread를 점유하지 않고 Software적으로(?) 쓰레드에 작업분배를 하는점이 유사하다고 느꼈습니다 (잘못이해했다면 첨삭부탁드립니다 ㅠㅠ)만약 제 이해가 맞다면, JVM레벨에서 제공하게되는 VirtualThread가 더 범용성이 높아보이는데 Coroutine의 사용이 유지가 될까요? 남아있게 된다면 Kotlin 언어차원에서의 사용성이 좋아서 일정도일지... 아니면 Coroutine이 VirtualThread와 다르게 차별화된 장점이 있을지 궁금합니다감사합니다!
-
미해결Flutter로 SNS 앱 만들기
섹션7 게시글 등록화면에서 firestore작업에 Batch적용 부분에서 에니메이션과 Exception 발생하지 않습니다.
섹션7 게시글 등록화면에서 firestore작업에 Batch적용 부분에6:49 부분에서 테스트를 했는데 파일선택하고, feed버튼을 크릭하면 가로로 움직이는 에니메이션과 Exception 에러가 떠야하는데 뜨지않습니다. 아무리 봐도 그부분은 이상없는듯 한데 한번 봐주세요. 에러가 있으면 에러 처리라도 하겠는데 에러는 없습니다.압축파일과 함께 메일로 보냈습니다.
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
프로젝스 생성 충돌 에러
프로젝트를 만들었는데 코드와 파일들에 빨간 줄이 그어져있습니다.버전이 안 맞아 안드로이드 스튜디오를 3번 정도 재 설치 한 것 빼고는 영상 그대로 따라했습니다
-
미해결Flutter로 SNS 앱 만들기
6게시글등록화면_5Firebase Storage에 게시글 이미지 저장1인가요
String feedId = Uuid().v1(); // firestore 문서참조 DocumentReference<Map<String, dynamic>> feedDocRef = firebaseFirestore.collection('feeds').doc(feedId); // storage 참조 Reference ref = firebaseStorage.ref().child('feeds').child(feedId); 여기나오는 것들이 ('feeds').폴더 와 doc(feedId) 폴더개념인가요.