지난강의에서 useImmer에서 활용한 update함수에서는 push, splice와 같은 현재의 객체를 변환시키는 api를 활용했었습니다. 그래서 immer 가 적용된 상황에서는, 현재 객체를 변환시키는 것만이 답일것이라 생각해서, 오히려 filter api를 써야 코드가 더 간단해지는 상황에서는 useState를 따로 분리해서 써야 고민하고 있었습니다. 그런데 이번 강의에서 useImmerReducer에서 활용하는 것을 보아하니, State가 아니라 Immer 이 적용된 케이스더라도, return으로 새로운 객체를 반환하거나, 직접 객체에 변화를 주거나 하는 방법이 둘다 적용이 되는것으로도 보이는것 같더라구요? case 'deleted':에서도 draft.filter에 return 이 적용되면, immerReducer라도 잘 작동하고, return을 없애고, break로 나오게 하면, 변화가 아무래도 적용이 안되더라구요(당연하겠죠... 원래 객체에 변화를 준것이 아니니) 그래서 immer나 immerReducer를 활용한다는 것은 useState을 확장시키는 느낌인건가요? 직접객체에 변화를 주는것 뿐만아니라, useState에서 했던것처럼 새로운 객체를 만들어 return하는 것 '까지' 가능한건가요? 만약 immer가 적용된 상황에서, 직접 객체를 변환하는 코드와, 새로운 객체를 만들어 return 하는 코드가 하나에 전부 적용되어 있다면 어떻게 작용하나요? 다시 말해, draft.push로 '변경사항이 immer에 반영되고', 동시에return으로 draft.filter한 값을 보내면, 어떻게 작용하며, 어떤 로직이 적용되나요? 감사합니다
google colab 오픈 하여 새노트를 열면 로드 에러가 발생합니다. 어떻게 해야 하나요? ============================= A network error occurred and the request could not be completed. GapiError: A network error occurred and the request could not be completed. at $ L.PE [as constructor] ( https://ssl.gstatic.com/colaboratory-static/common/a17fd496db698d4637390557595457ce/external_binary_l10n__ko.js:1733:732 ) at new $L ( https://ssl.gstatic.com/colaboratory-
expo-location 때부터 모듈을 설치를 해도 해당 모듈이 없다는 메시지가 뜹니다. eas build --platform android --profile development 명령어로 새로 빌드하면 되긴 하는데, 모듈 하나 설치할 때마다 빌드하면 5분씩 넘게 걸리는데 다른 방법이 있을까요? 아니면 제가 놓치고 있는게 있을까요?
seo 관련해서 궁금한게 있습니다. seo 최적화라는게 크롤링 봇이 서버에서 렌더링된 html을 크롤링하고 인덱싱하는걸로 알고 있습니다. 만약 서버 fetch 를 했지만 data 자체는 렌더링하지 않은 경우는 크롤링 봇이 어떻게 인식을 하는지 궁금합니다. 예를 들어 서버 fetch를 했지만 아래와 같이 서스펜스 역할하는 로직으로 인해 클라이언트 환경에서 hydrate 된 이후에 데이터가 렌더링된다면 서버에서 fetch는 이루어졌지만 렌더링된건 아니기 때문에 크롤링봇이 데이터를 인식하지 못하게 되는걸까요?? export function ConditionalClientWrapper({ children, fallback, }: ConditionalClientWrapperProps) { const [mounted, setMounted] = useState(false); useEffect(() => { setMounted(true); }, []); if (!mounted) return fallback ?? null; return children; } <ConditionalClientWrapper fallback={<Loading />}> //dataList에서 서버 fetch 가 이루어집니다. <dataList /> </ConditionalClientWrapper> SEO 최적화를 위한 조건이 데이터 렌더링인지 단순 서버 fetch 만하면 되는건지 궁금합니다. 추가로 리액트 쿼리의 prefetch를 사용하면 seo 최적화를 가질 수 있는건가요?? 감사합니다!
처음에 development build로 진행해도 위와 같은 오류가 발생해서, npx rimraf node_modules , npm i , npx rimraf android 순서대로 실행한 후에 다시 npm run android 로 빌드하려고 하는데, 다음과 같은 오류가 발생합니다. C:\Users\swu\threads-clone>npm run android > threads-clone@1.0.0 android > expo run:android √ Created native directory √ Updated package.json | no changes √ Finished prebuild TypeError: Cannot read properties of undefined (reading 'android:enabled') TypeError: Cannot read properties of undefined (reading 'android:enabled') at C:\Users\swu\threads-clone\node_modules\@expo\config-plugins\src\android\Manifest.ts:219:20 at Array.filter (<anonymous>) at Object.getRunnableActivity (C:\Users\swu\threads-clone\node_modules\@expo\config-plugins\src\android\Manifest.ts:218:90) at getMainActivityAsync (C:\Users\swu\threads-clone\node_modules\@expo\cli\src\run\android\resolveLaunchProps.ts:36:49) at resolveLaunchPropsAsync (C:\Users\swu\threads-clone\node_modules\@expo\cli\src\run\android\resolveLaunchProps.ts:51:24) at resolveOptionsAsync (C:\Users\swu\threads-clone\node_modules\@expo\cli\src\run\android\resolveOptions.ts:51:9) at runAndroidAsync (C:\Users\swu\threads-clone\node_modules\@expo\cli\src\run\android\runAndroidAsync.ts:30:17)
배포를 준비하고 있는데 개발/로컬 환경에서는 문제가 없이 잘 되다가 상용 환경에 배포를 하려고하니 에러가 발생하고 있습니다. 빌드는 에러 없이 잘 되었는데 pm2 start를 하니 [TypeError: Cannot read properties of undefined (reading 'filter') 타입에러가 갑자기 나타나버렸습니다. 우선 filter 사용하는 부분에 대한 예외처리들을 넣어주었는데 동일한 에러가 계속 발생하고 있습니다. 어떠한 경우에 이런 에러가 발생하는 것일까요?
31강에서 구현된 users.py의 read_all_users는 화면에 구현이 안되는 것이 맞는 것인가요? Users의 POST /users 밑에 GET /users/all로 있어야 할 것 같은데... ===> PC를 재시작 후 다시 서버를 실행해 보니 나타납니다. DB Browser에서 특정 User의 is_admin을 true로 수정하고 저장까지 완료하고 난 후, 각각의 User들로 로그인해보았습니다. 그런데, is_admin이 false인 모든 User들도 read_all_users의 endpoint인 /users/all에서 모든 회원들의 리스트가 조회가 됩니다. /docs 페이지라서 그런 것인지 아니면 잘못 구현된 것인지 궁금합니다. 강의에서는 docs에서의 이런 상황에 대한 언급이 없어 질문을 드립니다.
30강을 완강후에 Postman을 통해 post로 http://127.0.0.1:8000/token 으로 요청을 보냈는데 아래 처럼 응답으로 토큰이 날아오지 않습니다. 422 Unprocessable Content 에러가 나오구요~~ oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") # http://<your_domain>/token 뭐가 문제일런지요? postman사용법에 맞게 된것 같지가 않은데요..... @@@ 추가 질문 그리고, 더불어서 발급받은 토큰을 /docs에서 Authentication의 어디에 입력을 해서 테스트를 해야 하는지도 같이 안내바랍니다. 여기 client secret에 입력해서 테스트 하는것 같은데.... username, password를 입력해서 로그인하면 token은 잘 생성됩니다. 그리고 이렇게 username과 password로 로그인할 때 생성된 토큰으로 client secret에 입력해서 로그인하면 auth error Error: Unprocessable Content 라는 메시지가 뜹니다. postman사용법이 미숙해서인지 postman에서 post /token으로 날려도 토큰이 반환되어 오질 않습니다. 당연히 docs에서 username, password로 로그인한 후에... 수정, 삭제 권한적용은 잘 적용됩니다.
26강에서 User model를 만들고, Task model의 관계 설정까지 하고 env.py에서 User를 임포트하고 난후 alembic revision --autogenerate를 실행하고, alembic upgrade head 를 실행하면 User 테이블과 Task 모델의 관계설정은 잘 만들어 졌지만, 아래에 보이는 것처럼, 제약조건에 name을 지정하라고 나옴니다. 그래서 name을 지정하고 db를 삭제하고, alembic을 초기화된 상태로 만든 후에 다시 똑같은 과정을 거쳐 실행햇는데, 두번째 alembic revision --autogenerate 을 실행하면, sqlalchemy.exc.NoReferencedColumnError: Could not initialize target column for ForeignKey ' users.id ' on table 'tasks': table 'users' has no column named 'id' 이런 오류가 나타납니다. 자꾸 자꾸 계속해서 다시 해봐도 제약조건에 이름을 넣으라고 나오고, 그것을 수정하면 users에 id가 없다는 둥 계속 똑같이 오류가 나옵니다. 해결 방법은 무엇일까요? 완전히 새로 해봐도 똑같은 오류만 계속 반복됩니다.
[Error: Make sure to complete the guide at https://docs.expo.dev/push-notifications/fcm-credentials/ : Default FirebaseApp is not initialized in this process com.cozyu.threadsclone. Make sure to call FirebaseApp.initializeApp(Context) first.] 처음에 package name을 잘못 입력한 상태에서 등록까지 했었다가 지우고 com.cozyu.threadsclone로 재등록했는데도 계속 같은 오류가 발생합니다... google-services.json의 package_name도 이렇게 되어있고, firebase - 일반에서의 패키지 이름도 동일하게 되어있고, expo dev - credentials에서도 이렇게 되어 있는데 안되네요... 폴더에서 json 키 두 개 제거 후에 다시 다운 받았아서 app.json과 동일한 위치에 넣었고, eas credentials 부터 다시 했는데 안됩니다. 혹시 다른 해결 방법이 있을까요?