묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Next + React Query로 SNS 서비스 만들기
Next-Auth 관련해서 질문이 있습니다.
백엔드 취준생인데 프론트를 좀 할 일이 있어서 강의 듣고 있는데 Next-Auth 부분이 이해가 쉽지 않네요... 몇 가지 질문 드리고자 합니다.1. session 객체에 어떤게 담기는건지 잘 모르겠습니다.export default async function Home() { const session = await auth() if (session?.user) { redirect('/home') return null } return ( <Main/> ); }export const { handlers: { GET, POST }, auth, signIn, } = NextAuth({ // 개발자가 직접 만든 화면에서 로그인 하도록 진행 pages: { signIn: '/i/flow/login', // 로그인 newUser: '/i/flow/signup' // 회원가입 }, providers: [ CredentialsProvider({ async authorize(credentials) { const authResponse = await fetch(`${process.env.NEXT_PUBLIC_BASE_URL}/api/login`, { method: 'POST', headers: { "Content-Type": "application/json", }, body: JSON.stringify({ id: credentials.usename, password: credentials.password, }) }) if (!authResponse.ok) { return null } const user = await authResponse.json() return { email: user.id, name: user.nickname, image: user.image, ...user } } }) ], })Home 에서 auth() 를 통해 불러온 session 객체에 CredentialsProvider 가 리턴한 객체가 담기는건가요?그런데 그렇다고 하기엔 객체에 user 라는 속성이 없어서 아닌 것 같기도 해서 아닌 거 같다는 생각도 듭니다. export default function Login() { const router = useRouter() const { data: session } = useSession(); if (session?.user) { router.replace('/home') return null } router.replace("/i/flow/login") return ( <Main /> ) }마찬가지로 여기서도 session 에 어떤게 담기는지 잘 모르겠습니다 ㅠㅠ auth() 로 리턴한 세션과 같은 객체가 담기는 것 같긴 한데 도대체 session 에 뭐가 담기는지 파악이 쉽지 않네요 ㅋㅋㅋ그래서 session 객체의 user 를 클릭해서 들어가보니 다음과 같은 interface 가 나오네요.export interface DefaultSession { user?: User expires: ISODateString }auth/core 에 있는 인터페이스인 것 같은데 이 인터페이스가 어느 시점에 등장(?) 하는 건지 잘 모르겠습니다.2. 지금 진행하는 로그인 방식은 백엔드에 로그인 관련 API 가 있다고 가정하고 진행하는 것으로 저는 이해를 했는데요export const handlers = [ http.post(`${baseUrl}/api/login`, () => { console.log('로그인'); return HttpResponse.json(User[1], { headers: { 'Set-Cookie': 'connect.sid=msw-cookie;HttpOnly;Path=/' }, }) }), http.post(`${baseUrl}/api/logout`, () => { console.log('로그아웃'); return new HttpResponse(null, { headers: { 'Set-Cookie': 'connect.sid=;HttpOnly;Path=/;Max-Age=0' } }) }), http.post(`${baseUrl}/api/users`, async ({ request }) => { console.log('회원가입'); // return HttpResponse.text(JSON.stringify('user_exists'), { // status: 403 // }) return HttpResponse.text(JSON.stringify('ok'), { headers: { 'Set-Cookie': 'connect.sid=msw-cookie;HttpOnly;Path=/' }, }); }) ];이게 지금 api 를 mocking 한 건데 여기에 요청을 보내고 있으니까요.그러면 이 API 에서 리턴한 유저(User[1]) 가 세션에 담기는 것인지 궁금하네요. (이것도 1번 질문하고 좀 연관이 되네요) 그러면 만약에 백엔드 API 가 로그인 성공했을 때 http body 에 별도의 객체를 리턴하지 않으면 어떻게 되나? 이런 궁금증도 생깁니다.3. 그리고 로그아웃을 할 때는 왜 로그아웃 API 에 따로 요청을 보내지 않고 signOut 함수만 사용하는지 궁금합니다. 이것만 사용해도 쿠키가 삭제가 돼서 그런 것인가요? 그러면 백엔드 서버에 별도의 로그아웃 API 를 만들지 않아도 되는 것인지 궁금합니다. 장문의 질문글이 된 거 같은데, 뭔가 Next-Auth 를 처음 접하다보니 사용법이 좀 익숙치가 않네요. AI 에 물어보거나 구글링을 해 봐도 좀 파악이 쉽지 않아 여기에 질문 남겨봅니다.감사합니다.
-
해결됨[리뉴얼] 맛집 지도앱 만들기 (React Native & NestJS)
[이슈]리액트 네이티브 0.76 버전 쓰지마세요
앱 처음제작시 0.76 버전으로 진행하였는데 지금https://github.com/react-native-maps/react-native-maps/issues/5206위 이슈를 보시면 신규 ui 엔진인 fabric을 라이브러리에서 지원 안하고 있습니다 제가 예전에 올린글인 맵 터치시 마커가 다음렌더링에 표시되는 이유가 이것 때문이였습니다. 버전 낮춰서 하세요~
-
미해결Next + React Query로 SNS 서비스 만들기
안녕하세요! next-auth 로그인하기 부분 질문입니다.
지금 강의에서 보여주신게 아직 업데이트가 안 된 것인지 궁금합니다!Auth.js 홈페이지에 있는 문서와 코드가 조금 다른 것 같아서요. next.js 15 버전으로 강의 따라가고 있고 auth.js 설치할 때 auth@5 하니까 설치가 안 돼서 auth@beta 이렇게 설치하고 진행 중 입니다! 제가 본 페이지는 다음과 같습니다.https://authjs.dev/getting-started/authentication/credentials 추가일단 제로초님이 하신 방법으로 CredentialsProvider 직접 import 하니까 되는 것 같습니다!
-
미해결Next + React Query로 SNS 서비스 만들기
로그인 방식 관련해서 질문드립니다!!
로그인 방식을 구현하면서, 쿠키로만 개발할 경우 완전히 백엔드에 의존하게 되어 로컬로, 동시에 키고 개발을 하지 않는이상, 도메인간 불일치를 해결 할 방법이 없어, msw를 사용해야 한다고, 이전에 말씀해주셨습니다!!보통, 회사나, 개인 소프트웨어를 만들 때 어떤 방식으로 로그인을 주로 만드시는지 조금 알고 싶어 궁금하여 질문을 남깁니다!!로그인 방식 고찰로그인 성공시, accessToken을 body로 받고, refreshToken은, httpOnly 쿠키로 받는 경우 (서버에서, DB or Redis를 통해 refreshToken 관리) → 인증 필요 요청 (Bearer accessToken), 리프레시 필요 요청 (refreshToken 심긴 쿠키를 바탕으로 요청)- DB에서 관리하는 것 보다, redis를 통해 관리했을 떄 읽기 속도가 빠름을 확인!응답: accessToken과 refreshToken 모두 body로 클라이언트에게 전달.인증 필요 요청과, 리프레시 토큰 재발급 요청 모두 헤더의 Bearer에 accessToken이나, refreshToken을 넣어서 전달.)현재 방식: accessToken, refreshToken 모두 쿠키로 응답받고, 요청또한, 쿠키를 포함하여 전달.제로초님은, Next.js를 활용하여, 웹 사이트를 만드실 떄, 어떠한 방식으로 로그인을 구현하시는지 궁금하고, 많은 회사에서 사용하는 방식은 보통 어떤 방식인지도 알고싶습니다!
-
해결됨[리뉴얼] 맛집 지도앱 만들기 (React Native & NestJS)
2-3 강의를 듣는 도중 패키지 설치 후 오류가 떴습니다..
해당 오류가 떠서 해결을 못하고 있는 상황인데요.package.json 내에 설치되어 있고 build.gradle 도 다 확인해봤는데 해결이 안됩니다 ㅠㅠ... 모바일에서는 다음과 같은 오류로 뜹니다....
-
해결됨Next + React Query로 SNS 서비스 만들기
MSW 오류
먼저 next와 react의 버전은 각각 15버전과 19버전입니다 next 15 부터는 http.ts 의 코드가 간결하게 바뀌어서 적용해보던 중 세팅 단계에서 해당 오류가 발생하였습니다 TypeError: Cannot read properties of undefined (reading 'url' 구글에 검색해보니 최신버전에서도 발생하는 것 같습니다 ㅠㅠ
-
해결됨Next + React Query로 SNS 서비스 만들기
SignupModal 타입 에러에 관해서 질문드립니다!
SignupModal 에서 에러가 하나 나오는데 관련해서 질문드립니다.S2322: Type '(formData: FormData) => Promise<{ message: string; } | undefined>' is not assignable to type 'NonNullable<string | ((formData: FormData) => void | Promise<void>) | undefined>'.<br/>Type '(formData: FormData) => Promise<{ message: string; } | undefined>' is not assignable to type '(formData: FormData) => void | Promise<void>'.<br/>Type 'Promise<{ message: string; } | undefined>' is not assignable to type 'void | Promise<void>'.<br/>Type 'Promise<{ message: string; } | undefined>' is not assignable to type 'Promise<void>'.<br/>Type '{ message: string; } | undefined' is not assignable to type 'void'.<br/>Type '{ message: string; }' is not assignable to type 'void'.이런 에러가 나옵니다. formData 의 타입이 정확하지 않아서 생기는 에러 같습니다. 근데 정상적으로 실행은 됩니다.제 꺼에선 이렇게 에러가 나오는데 제로초님 화면에서는 에러가 나오는 것 같지 않아서 어떻게 그렇게 된 것인지 궁금해서 질문 남깁니다. 감사합니다.
-
미해결Next + React Query로 SNS 서비스 만들기
usePathname 과 /explore 페이지 부분은 좀 너무 빠르네요...
밑에 수업노트에 주신 링크도 그 파일이 아니라 깃헙 레포로 연결되고, 너무 빠르네요 ㅠㅠ _component 부분 보면 RightSearchZone 컴포넌트도 없어서 좀 헤매게 되는 것 같습니다...css 내용도 갑자기 어디서 튀어나온건지 좀 파악이 어렵네요 ㅠ
-
미해결Next + React Query로 SNS 서비스 만들기
[next15] msw 질문드립니다.
기존에 강의로 msw로 코드만들었던 수강생입니다.여러개의 질문과 에러?라고할만한 사항이 있는데요.기존강의에는 http.js 파일에서 express 기반으로 서버를 만들어서 9090포트를 사용했는데요. 새로 강의하신 내용에서는 express를 배제하고 코드가 간결하게 바꿨는데 이렇게 바꾼 내용의 대해서 조금 설명 부탁드립니다. 간략히 알기로는 기존 MSW는 클라이언트(브라우저)에서 동작하기 때문에 서버에서 html 요청이 발생하기 때문에 요청을 가로챌수 없기 때문에 express썻다고 알고있습니다. 이게 맞을까요? 그리고 바뀐코드는 이런문제가 해결이 된건가요?1번의 문제가 해결되었다면, 기존의 9090 서버포트와 더불어 npm run mock를 실행하여 서버를 동작했던걸로 알고있는데 이기능은 필요한가요?msw 세팅과 .env 강의부분에서 환경변수를 api에 직접 넣도록 수정했는데, 이전꺼랑 차이가 뭔가요? 추가로 클라이언트컴포넌트에서는 환경변수가 콘솔로 읽히고있는데 handler에서는 읽히지 않고있습니다. 코드는 이전강의 코드(백엔드 db연결전까지)와 같고요. 추가로 nextjs나 react를 버전업을 하지는 않았습니다. 이유가뭔지 유추해주실수있을까요?
-
해결됨[리뉴얼] 맛집 지도앱 만들기 (React Native & NestJS)
1-5 프로젝트 생성문제
❗질문 작성시 꼭 참고해주세요현재 문제(또는 에러)와 코드(또는 github)를 첨부해주세요. 맥/윈도우, 안드로이드/iOS, ReactNative, Node 버전 등의 개발환경을 함께 적어주시면 도움이 됩니다. 에러메세지는 일부분이 아닌 전체 상황을 올려주세요. (일부만 자르거나 복사하지말아주세요.) 개발환경/코드에 대한 정보가 없을경우 답변이 어렵습니다.[문제 상황]npx react-native@0.72.6 init MatzipApp --version 0.72.6 해당 명령어를 입력했을 때 반응이 전혀 없고 파일생성이 되지 않습니다. [현재상황]터미널에 npm list -g --depth=0 명령어를 입력했을 때 나타나는 패키지 목록들입니다. node와 npm 버전 그리고 chocolatey 정상 설치된 부분입니다.adb 명령어 입력시 정상 작동되고 있는 부분입니다.Andriod Studio 환경변수 설정 또한 sdk 파일 위치 확인 후 c브라이느/Andriod App 경로로 정상적으로 환경변수 설정되어있습니다. [해결하기위한 실행한 방안들]npm uninstall -g react-native-cli 명령어를 통해 react-natice-cli 제거 후 npm install -g react-native 전역으로 설치 후 버전 확인 (버전확인이 뜨지 않음 첫 문제와 같은 상황)node.js 재설치andriod studio 최신버전으로 재설치andriod studio 패키지 설치 모두 완료npm cache clean --force 명령어를 통해 캐시 초기화 후 진행 관리자 권한으로 실행 후 진행블로그와 커뮤니티를 확인하면서 해결을 시도하였는데 해결이 되지 않아 질문드립니다 ㅠㅠnpx react-native 가 들어간 명령어는 하나도 먹질 않고 있습니다... 섹션1에서 멈춰있어요.. 도와주세요 ㅠ
-
미해결Next + React Query로 SNS 서비스 만들기
새로 올라온 강의 영상에 문제가 있는거 같습니다.
"섹션4 그런데 백엔드 개발자가 API를 아직 못 만들었다"의 "msw 세팅과 .env" 강좌가 8분 38초까지 영상이 검은 화면으로 나옵니다. 해당 영상에서 검은 화면 중간 중간 노란색 안내 문구는 나오는 것과 다른 영상에서는 해당 증상이 보이지 않은 것으로 보아서 제 환경에서 해결할 수 없는 문제로 보이는데, 확인 한번 부탁드립니다.
-
해결됨[리뉴얼] 맛집 지도앱 만들기 (React Native & NestJS)
🥳완강🥳
2024-04-02 시작으로..2024-12-08 강의 완강하였습니다ㅠㅠ앱, 프론트 개발이 완전 처음이라 얼마나 헤맸는지..강사님과 수강자분들의 도움이 없었으면 다음 생에도 완강을 못했을 수도 있지 않았을까 생각이 드네요....수많은 질문 속에서도 답변 주셔서 이렇게 마무리하게 되었습니다.강의 듣는동안 너무 재밌게 진행하였고 다음 강의가 나온다면 결제 준비하겠습니다 ㅎ0ㅎ고생하셨습니다 강사님그리고 감사합니다~~! 🙇♂
-
미해결Next + React Query로 SNS 서비스 만들기
게시글 삭제하기
안녕하세요 제로초님! 게시글 삭제하기 기능을 구현하고 있습니다!구현해도 안되길래 스웨거가서 테스트를 하고 서버를 봤더니 오류가 나더라구요혹시 이유를 알 수 있을까요??
-
미해결React 완벽 마스터: 기초 개념부터 린캔버스 프로젝트까지
개발 서버가 실행 안 되는 문제
npm install 설치한 뒤 개발 서버 키기 위해서 npm run dev 입력했는데 이런 에러가 뜹니다.인터넷 찾아 본 결과 npm install watchman 이거 해줘야 에러 안 나는 거 알고 있지만, 번번이 프로젝트 생성할 때마다 이런 에러가 꼭 뜹니다. 혹시 해결 방법이 있을까요?
-
미해결Next + React Query로 SNS 서비스 만들기
구글 로그인 구현하기
안녕하세요 제로초님! 완강하고 지금 구글 로그인 구현중입니다.구글로 로그인하다가 마지막에 인가토큰받는 부분에서 404 에러가나는데 이유를 모르겠습니다... 도와주세요 ㅠ_ㅠ
-
미해결React 완벽 마스터: 기초 개념부터 린캔버스 프로젝트까지
assets과 public의 차이점
assets에 있는 파일이 번들링이 된다면 assets에 이미지같은것들을 넣으면 될까요???public에있는 파일들은 '최종번들에 복사되어진다'고 하셨는데 이말이 무슨뜻인지 잘이해가 안가서그러는데 부가설명해주시면 감사하겠습니다.
-
해결됨[리뉴얼] 맛집 지도앱 만들기 (React Native & NestJS)
WINDOWS로 강의 수강
제가 MacOS가 아니라 Windows인데 강의를 원활하게 수강할 수 있나요?
-
해결됨[리뉴얼] 맛집 지도앱 만들기 (React Native & NestJS)
Matzip.fig 관련 문의
방금 강의 결제해서 시작하고 있는데, 처음부터 안 되네요.사진 첨부합니다!
-
해결됨[리뉴얼] 맛집 지도앱 만들기 (React Native & NestJS)
3-8. 로그아웃 에러
안녕하세요 강사님. 그동안 로그인 구현을 해본적이 없어서 정말 유익한 강의였습니다. 3-8 강의를 듣던 중 강의대로 했는데 로그아웃이 안 되더라구요. 혼자 해결해보려고 다양한 방법으로 해서 결국 로그인과 로그아웃이 동작은 하는데 로그아웃 버튼을 두 번 클릭해야지 AuthStackNavigator로 네비게이팅이 되는 문제가 있습니다.https://github.com/G0MTENG/MatzipApp-project/tree/3-8 깃허브에 3-8 브랜치에 올려두었습니다. src/hooks/queries/useAuth에 이에 대한 구현이 있고 추가적으로 useAuth 코드를 올려두겠습니다. 감사합니다. import { getAccessToken, postLogin, postSignUp, getProfile, logout, } from '@/apis'; import {queryClient} from '@/apis/queryClient'; import {authQueryKeys, storageKeys, numbers} from '@/constants'; import {UseMutationCustomOptions, UseQueryCustomOptions} from '@/types'; import { removeEncryptStorage, removeHeader, setEncryptStorage, setHeader, } from '@/utils'; import {useMutation, useQuery} from '@tanstack/react-query'; import {useEffect} from 'react'; export const useSignUp = (mutationOptions?: UseMutationCustomOptions) => { return useMutation({ mutationFn: postSignUp, ...mutationOptions, }); }; export const useLogin = (mutationOptions?: UseMutationCustomOptions) => { return useMutation({ mutationFn: postLogin, onSuccess: ({accessToken, refreshToken}) => { setEncryptStorage('refreshToken', refreshToken); setHeader('Authorization', `Bearer ${accessToken}`); }, onSettled: () => { queryClient.refetchQueries({ queryKey: [authQueryKeys.AUTH, authQueryKeys.GET_ACCESS_TOKEN], }); queryClient.invalidateQueries({ queryKey: [authQueryKeys.AUTH, authQueryKeys.GET_PROFILE], }); }, ...mutationOptions, }); }; export const useGetRefreshToken = () => { const {data, isSuccess, isError} = useQuery({ queryKey: [authQueryKeys.AUTH, authQueryKeys.GET_ACCESS_TOKEN], queryFn: getAccessToken, staleTime: numbers.ACCESS_TOKEN_REFRESH_TIME, refetchInterval: numbers.ACCESS_TOKEN_REFRESH_TIME, refetchOnReconnect: true, refetchIntervalInBackground: true, }); useEffect(() => { if (isSuccess) { setHeader('Authorization', `Bearer ${data.accessToken}`); setEncryptStorage(storageKeys.REFRESH_TOKEN, data.refreshToken); } }, [isSuccess, data]); useEffect(() => { if (isError) { removeEncryptStorage(storageKeys.REFRESH_TOKEN); removeHeader('Authorization'); } }, [isError]); return {isSuccess, isError}; }; export const useGetProfile = (quryOptions?: UseQueryCustomOptions) => { return useQuery({ queryKey: [authQueryKeys.AUTH, authQueryKeys.GET_PROFILE], queryFn: getProfile, ...quryOptions, }); }; export const useLogout = (mutationOptions?: UseMutationCustomOptions) => { return useMutation({ mutationFn: logout, onSuccess: async () => { await removeEncryptStorage(storageKeys.REFRESH_TOKEN); removeHeader('Authorization'); }, onSettled: () => { queryClient.resetQueries({queryKey: [authQueryKeys.AUTH]}); queryClient.invalidateQueries({queryKey: [authQueryKeys.AUTH]}); }, ...mutationOptions, }); }; export const useAuth = () => { const signupMutation = useSignUp(); const refreshTokenQuery = useGetRefreshToken(); const getProfileQuery = useGetProfile({ enabled: refreshTokenQuery.isSuccess, }); const isLogin = getProfileQuery.isSuccess; const loginMutation = useLogin(); const logoutMuatation = useLogout(); return { signupMutation, loginMutation, isLogin, getProfileQuery, logoutMuatation, }; };
-
해결됨[리뉴얼] 맛집 지도앱 만들기 (React Native & NestJS)
2-5 강의 에러 (react-native-reanimated 설치 후 에러)
환경 : 맥, 안드로이드버전 : react-native 0.72.6node 22.11.0깃허브 : https://github.com/taeyun01/react-native-map안녕하세요!2-5 강의 질문도 보고 구글에도 쳐보고 했지만 계속 해결이 안되어 문의 드립니다 ㅠ시도해본것node_modules 삭제Drawer Navigator 패키지 삭제 후 재설치설치 후 npx react-native run-iosyarn installreact-native-reanimated/plugin 추가npx react-native start --reset-cache터미널 에러 전체 (에러가 너무 길어 작성이 안되어 메모장 링크로 첨부드립니다.)https://n.lrl.kr/NkN4aH 안드로이드 에뮬레이터 화면 에러package.json{ "name": "foodMap", "version": "0.0.1", "private": true, "scripts": { "android": "react-native run-android", "ios": "react-native run-ios", "lint": "eslint .", "start": "react-native start", "test": "jest" }, "dependencies": { "@react-native-masked-view/masked-view": "^0.3.2", "@react-navigation/drawer": "^7.0.11", "@react-navigation/native": "^7.0.4", "@react-navigation/stack": "^7.0.6", "react": "18.2.0", "react-native": "0.72.6", "react-native-gesture-handler": "^2.21.2", "react-native-reanimated": "^3.16.2", "react-native-safe-area-context": "^4.14.0", "react-native-screens": "^4.3.0" }, "devDependencies": { "@babel/core": "^7.20.0", "@babel/preset-env": "^7.20.0", "@babel/runtime": "^7.20.0", "@react-native/eslint-config": "^0.72.2", "@react-native/metro-config": "^0.72.11", "@tsconfig/react-native": "^3.0.0", "@types/react": "^18.0.24", "@types/react-test-renderer": "^18.0.0", "babel-jest": "^29.2.1", "eslint": "^8.19.0", "jest": "^29.2.1", "metro-react-native-babel-preset": "0.76.8", "prettier": "^2.4.1", "react-test-renderer": "18.2.0", "typescript": "4.8.4" }, "engines": { "node": ">=16" } }