inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

MMKV 사용시 에뮬레이터에서 실행이 불가능한 이슈

해결됨

[2025] 비전공자도 가능한 React Native 앱 개발 마스터클래스

이런식으로 실제 앱에서만 사용이 가능하다고 뜹니다ㅠ 찾아보니까 디버깅을 끄라는데 개발자 도구를 켜봐도(ctrl+m /cmd+m켜서 들어가는,,) Debugging을 끄는 부분이 안보여요,,, + Debug JS Remotely라는 부분을 끄라고 구글링을 하니까 나오는데 이 부분이 아예 개발자도구에서 안보입니다.. 학습에 관련된 질문만 해주세요. 질문은 상세하게 무엇이 궁금한지 작성해주세요. 질문은 '마크다운'을 사용하여 할 수 있습니다. 유사한 질문이 있었는지 살펴보고 질문 해주세요. 부담갖지 말고 강의에서 궁금하신 점 전부 질문해주세요 :)

  • javascript
  • react
  • node.js
  • react-native
  • typescript
김라영 댓글 4 좋아요 0 조회수 285

rsc payload에 관한 질문이 있습니다.

해결됨

한 입 크기로 잘라먹는 Next.js

최대한 자료를 찾아봐서 이해해보려고 했는데, 너무 헷갈려서 도움을 구하고자 질문을 올립니다. 강의에서 search page에는 페이지 이동 시 javascript bundle로써 전달 될 client component가 없기 때문에 그냥 rsc payload만 전달되는 것이라고 하셨는데, searchpage만 보면 client component가 없는 것이 맞지만, (with-searchbar)폴더 안에 layout으로 Searchbar component를 포함시킨 것은 어떻게 되는 것인지 궁금합니다. Searchbar component가 client component이므로 search page에서 직접적으로 import를 하지는 않았지만, 레이아웃으로써 사용되었기에 어쨌든 search page안에 client component가 포함되는 것은 아닌가요? 이해가 명확하게 되지 않아 질문조차 조금 난해하게 쓴 것 같아서 죄송합니다! 감사합니다.

  • react
  • typescript
  • next.js
khhan1990 댓글 2 좋아요 0 조회수 210

12.11 강의 ) export 후 경고 문구 & 콘솔창 데이터 출력 안됨

해결됨

한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지

'12.11) Home 페이지 구현하기 2. 기능' 강의의 9분 17초 에서 App 컴포넌트의 context를 Home 컴포넌트로 보내주기 위해 DiaryStateContext와 DiartDispatch를 익스포트 해주는데요. 문제 1) 저는 익스포트하게 되면 아래 사진과 같이 오류가 뜨고 [문제 2]에서 설명드린 부분도 실행이 되지 않습니다. (Home 컴포넌트에서 임포트 후 다시 App 컴포넌트로 돌아와 익스포트를 작성해주긴 했습니다 => 작성 순서 바뀜) 이미지의 오류 문구 (refresh only works when a file exports components. Move your react context to a separate file.) 문제 2) 그리고 강의 영상에선 익스포트 후 Home 컴포넌트에 App 컴포넌트에서 익스포트한 것 들을 import 해주고 필터를 통해 각 달에 해당하는 일기 데이터를 추출 후 콘솔창에 출력해줍니다. (강의 16:07) 하지만 저는 아래 사진과 같이 콘솔창에 현재 월에 대한 데이터가 아무것도 뜨지 않습니다. 위에서 설명드린 익스포트가 제대로 되지 않은 문제로 인해 안 뜨는 것일까요? + 추가로 context들을 파일을 따로 만들고 App 컴포넌트에 임포트하고 새로고침해봤더니 아무것도 뜨지 않았습니다.. 이 내용은 깃허브에 업로드 되어있습니다. App과 Home 컴포넌트의 코드는 아래에 남겨두었습니다. (깃허브 : https://github.com/hsyo830/Section12.git ) [App.jsx] import "./App.css"; import { useReducer, useRef, createContext } from "react"; import { Routes, Route } from "react-router-dom"; // /입력 시 Home, /new new, /diary diary 각각의 페이지를 가져오도록 하기 위함 import Diary from "./pages/Diary"; import Home from "./pages/Home"; import New from "./pages/New"; import Edit from "./pages/Edit"; import Notfound from "./pages/NotFound"; const mockData = [ { id: 1, createDate: new Date("2025-03-14").getTime(), emotionId: 1, content: "1번 일기 내용", }, { id: 2, createDate: new Date("2025-03-13").getTime(), emotionId: 2, content: "2번 일기 내용", }, { id: 3, createDate: new Date("2025-02-25").getTime(), emotionId: 3, content: "3번 일기 내용", }, ]; function reducer(state, action) { switch (action.type) { case "CREATE": return [action.data, ...state]; case "UPDATE": return state.map((item) => String(item.id) === String(action.data.id) ? action.data : item ); case "DELETE": return state.filter((item) => String(item.id) !== String(action.id)); default: return state; } } // 일기 데이터를 공급할 Context export const DiaryStateContext = createContext(); export const DiaryDispatchContext = createContext(); function App() { const [data, dispatch] = useReducer(reducer, mockData); // 여러가지 일기 데이터를 가져야해서 []와 같이 빈 배열 const idRef = useRef(3); // 새로운 일기 추가 const onCreate = (createDate, emotionId, content) => { dispatch({ type: "CREATE", data: { id: idRef.current++, createDate, emotionId, content, }, }); }; // 기존 일기 수정 const onUpdate = (id, createDate, emotionId, content) => { dispatch({ type: "UPDATE", data: { id, createDate, emotionId, content }, }); }; // 기존 일기 삭제 const onDelete = (id) => { dispatch({ type: "DELETE", id, }); }; return ( <> <DiaryStateContext.Provider value={data}> <DiaryDispatchContext.Provider value={{ onCreate, onUpdate, onDelete }}> <Routes> <Route path="/" element={<Home />} /> <Route path="/new" element={<New />} /> <Route path="/diary/:id" element={<Diary />} /> <Route path="/edit/:id" element={<Edit />} /> <Route path="*" element={<Notfound />} /> </Routes> </DiaryDispatchContext.Provider> </DiaryStateContext.Provider> </> ); } export default App; [Home.jsx] import { useState, useContext } from "react"; import { DiaryStateContext } from "../App"; import Header from "../components/Header"; import Button from "../components/Button"; import DiaryList from "../components/DiaryList"; import { data } from "react-router-dom"; const getMonthlyData = (pivotDate, data) => { const beginTime = new Date( pivotDate.getFullYear(), pivotDate.getMonth(), 1, 0, 0, 0 ).getTime(); const endTime = new Date( pivotDate.getFullYear, pivotDate.getMonth() + 1, 0, 23, 59, 59 ).getTime(); return data.filter( (item) => beginTime <= item.createdDate && item.createdDate <= endTime ); }; const Home = () => { const data = useContext(DiaryStateContext); const [pivotDate, setPivotDate] = useState(new Date()); const monthlyData = getMonthlyData(pivotDate, data); console.log(monthlyData); const onIncreaseMonth = () => { setPivotDate(new Date(pivotDate.getFullYear(), pivotDate.getMonth() + 1)); }; const onDecreaseMonth = () => { setPivotDate(new Date(pivotDate.getFullYear(), pivotDate.getMonth() - 1)); }; return ( <div> <Header title={`${pivotDate.getFullYear()}년 ${pivotDate.getMonth() + 1}월`} leftChild={<Button onClick={onDecreaseMonth} text={"<"} />} rightChild={<Button onClick={onIncreaseMonth} text={">"} />} /> <DiaryList /> </div> ); }; export default Home;

  • javascript
  • react
  • node.js
황서영 댓글 1 좋아요 1 조회수 207

accessToken 저장 방식에 대해 질문 드립니다.

해결됨

[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스

zustand에 저장과 cookie 저장에 대해 보안적으로는 cookie가 더 안전하다고 들었습니다. xss 공격에는 HttpOnly를 통해 해결할 수 있지만 반환된 accessToken을 js로 접근하지 못하다 보니 저장을 할 수 없는 문제가 있지만 secure을 통해 https에서만 요청가게 할 수 있으며, sameSite를 통해 csrf의 공격에 방어할 수 있다 해서 secure, sameSite를 사용해 accessToken을 쿠키에 저장하는게 더 좋은 방법이라 생각 했는데 어떤 방식을 주로 사용하나요?

  • react
  • react-native
  • 하이브리드-앱
  • graphql
  • next.js
초무 댓글 2 좋아요 0 조회수 189

안녕하세요 미니블로그 실습 질문드립니다.

미해결

처음 만난 리액트(React)

실습을 잘 따라하여 코드도 모두 동일합니다. 그런데 왜 글 작성하기 버튼 클릭이 안되는지 오류도 없어서 문의드립니다. 또한 버튼 간격도 코드가 동일한데 떨어지지 않고 제 것은 붙어있습니다. 어떻게 해결해야할 지 모르겠네요 ㅎㅎ

  • HTML/CSS
  • javascript
  • react
승빈 댓글 3 좋아요 1 조회수 216

도커볼륨 마운트 관련

해결됨

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

프로젝트 구성 Dockerfile FROM node:14 RUN apt-get update && apt-get install -y bash COPY ./package.json /myfolder/ COPY ./yarn.lock /myfolder/ WORKDIR /myfolder/ RUN yarn install COPY . /myfolder/ CMD ["yarn", "start:dev"] docker-compose.yaml version: "3.7" services: node-server: build: context: . dockerfile: Dockerfile volumes: - ./index.js:/myfolder/index.js - ./email.js:/myfolder/email.js ports: - 3000:3000 database-server: image: mongo:5 ports: - 27017:27017 Window 환경입니다. 위와 같을 때 index.js 파일을 수정하여도 docker로 연동된 nodemon 재 실행이 안됩니다. docker-desktop 에서 container 에서보면 mount 라고 표기되어있고 위의 새로고침 버튼을 누르면 제대로 적용 됩니다. 원인이 뭘까요?

  • javascript
  • node.js
  • docker
  • rest-api
  • nestjs
gkdlsb1234 댓글 2 좋아요 0 조회수 166

앱권한설정 화면이후 api작동 (아이폰)

미해결

[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스

안녕하세요. 새로 올려주신 강의를 흥미롭게 듣고 있습니다. 저는 아이폰을 이용해서 테스트 중인데, 안드로이드와는 좀 다른 움직임이 있어서 질의드립니다. 권한 설정화면 Link되면 저희가 구성한 하이브리드 앱이 웹뷰로 더 이상 연결되지 않는것처럼 보입니다. 이 부분 어떻게 해결할수 있을까요? 그리고 권한 설정화면으로 이동하여 권한을 수정한 후 제거하고 ( 해당 화면은 권한을 설정한다고 해서 사라지거나 하지 않습니다 ) expo로 돌아오면 active가 들어와야 하는데 그렇지 않습니다. 코드에 setInterval을 줬으니 뭔가 주기적으로 수행하지 않을까 싶어서 로그를 줘봤으나 전혀 구동하지 않았습니다. 여러가지 테스트를 해보았는데, 앱권한 설정페이지로 이동하는 쿼리인 openDeviceSystemForSettingSet을 호출하면 앱의 권한 화면이 Link되고, 그러면서 기존의 하이브리드 앱이 웹뷰로 연결되지 않는것 같습니다. 제 코드가 잘못되었나 싶어서 setInterval을 없애고 fetch의 순서를 바꿔봤습니다. openDeviceSystemForSettingSet을 맨뒤에 배치해봤을때는 모든 결과가 잘 들어왔습니다. 그러나 6-2와 같이 openDeviceSystemForSettingSet를 먼저 호출하고 이후에 fetchDeviceLocationforPermissionSet이나 fetchDeviceSystemForAppStateSet의 fetch를 수행하려 하면 작동하지 않습니다. 인공지능에게 문의하니 상태 구독을 하라고 하여 아래와 같이 구독을 mobile의 index.tsx에 추가하였습니다. React.useEffect(() => { const subscription = AppState.addEventListener("change", (nextAppState) => { if (nextAppState === "active") { console.log("✅ 앱이 다시 활성화됨. WebView에 메시지 전송!"); webviewRef.current?.postMessage("APP_ACTIVE"); } }); 그리고 page.tsx에는 app이 active가 되면 이를 받아올수 있도록 함수를 구성하고 그 안에서 fetchDeviceLocationforPermissionSet이나 fetchDeviceSystemForAppStateSet를 받아오도록 변경했습니다. useEffect(() => { const handleMessage = (event) => { if (event.data === "APP_ACTIVE") { console.log( "🔄 WebView에서 APP_ACTIVE 메시지 수신! fetchApp 다시 실행" ); checkPermissions(); } }; window.addEventListener("message", handleMessage); return () => { window.removeEventListener("message", handleMessage); }; }, []); const checkPermissions = async () => { try { console.log("📡 위치 권한 상태 확인 요청"); const result = await fetchApp({ query: "fetchDeviceLocationforPermissionSet", }); const status = result.data.fetchDeviceLocationforPermissionSet.status; webviewlog(` 위치 권한 상태: ${status}`); const appStateResult = await fetchApp({ query: "fetchDeviceSystemForAppStateSet", }); const isForeground = appStateResult.data.fetchDeviceSystemForAppStateSet.isForeground; webviewlog(` 앱 활성화 상태: ${isForeground}`); } catch (error) { console.error(" fetch 요청 실패:", error); } }; 이렇게 하니 앱이 활성화되면 이벤트 리스너를 통해 결과가 전달되어져 오기는 합니다. 강의에서 해주셨던 setInterval설정이 훨씬 간편하지라 아이폰에서 구성하려면 어떻게 해야할지 어떤 이유로 이렇게 되는지 궁금하여 질의드립니다. 2. 그리고, 원두님이 안드로이드를 통해 보여주신 것과 같이 허용함을 다시 묻지 않는데 이런 설정을 별도로 추가해야 하는걸까요? 제가 뭔가 누락한 건지 모르겠습니다. 원두님은 관련코드를 구성하지 않으셔도 사용에 대한 질의가 나타나는데, 저의 경우는 권한 설정기능이 바로 띄워집니다. 일반적인 앱들을 사용하다보면 권한 허용 질의 이후(모달창??)에 허용을 누르고 , 권한설정을 한 후 지도로 들어가고 그렇게 구성되는데 그런 구성이 누락되어 , 웹뷰 연동이 안되는것일까

  • react
  • react-native
  • 하이브리드-앱
  • graphql
  • next.js
이지은 댓글 1 좋아요 0 조회수 127

로그아웃 시 토큰 검증 오류 응답

해결됨

React, Node.js, MongoDB로 만드는 나만의 회사 웹사이트: 완벽 가이드

현재 Ch4-6. 관리자 계정 로그아웃, 삭제 강의를 듣고 있는 학생입니다! 다름이 아니라 로그아웃 코드에서 토큰 검증 오류 시에 res.send()를 안하는 이유가 있나요?! 토큰 검증 중 오류가 발생하게 된다면, isLoggedIn 상태는 true이고 토큰은 지워진 상태가 되는건데 그러면 로그인도 못하고 로그아웃도 못하는 상태인거 같아서요! 궁금해서 여쭤봅니다!!

  • HTML/CSS
  • javascript
  • react
  • node.js
  • mongodb
최지성 댓글 2 좋아요 0 조회수 260

질문은 아니고? 부탁?

해결됨

한 입 크기로 잘라먹는 Next.js

개발 20년차, 원론적으로 제대로 구조를 배워보고 싶어 영상강의를 듣는데, 정말 오랜만에 제대로 된 강의를 듣는것 같군요. 정말 강의 퀄리티 좋습니다. 잡설이 길었는데~~ 다름이 아니라, 현재 강이 백엔드API 서버를 NEST.JS 프레임웍을 이용해서 개발하신것 같은데, 다음번 강의는 NEST.JS 어떤 지요? 기다리겠습니다. ㅎ

  • react
  • typescript
  • next.js
Jae Yeong Lee 댓글 1 좋아요 0 조회수 270

월 변경 이벤트 핸들러가 작동하지 않습니다.

해결됨

한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지

코드는 아래와 같습니다. 다른 버튼들은 모두 클릭 이벤트 핸들러가 작동하는데, 월 변경 버튼에만 이벤트 핸들러가 작동하지 않습니다. 혹시 Date 객체를 잘 못 생성한 것일까요..? import { useContext, useState } from "react"; import { DiaryStateContext } from "../App"; import Header from "../components/Header"; import Button from "../components/Header"; import DiaryList from "../components/DiaryList"; const getMonthlyDate = (pivotDate, data) => { const beginTime = new Date(pivotDate.getFullYear(), pivotDate.getMonth(), 1,0,0,0).getTime(); const endTime = new Date( pivotDate.getFullYear(), pivotDate.getMonth()+1, 0, 23, 59, 59 ).getTime(); return data.filter((item)=> beginTime<= item.createdDate && item.createdDate <= endTime) } const Home = () => { const data = useContext(DiaryStateContext); //날짜 보관 const [pivotDate, setPivotDate] = useState(new Date()); const monthlyData = getMonthlyDate(pivotDate, data); const onIncreaseMonth = () => { setPivotDate(new Date(pivotDate.getFullYear(), pivotDate.getMonth()+1)); } const onDecreaseMonth = () => { setPivotDate(new Date(pivotDate.getFullYear(), pivotDate.getMonth()-1)); } return <div> <Header title={`${pivotDate.getFullYear()}년 ${pivotDate.getMonth()+1}월`} leftChild={<Button onClick={onDecreaseMonth} title={"<"}/>} rightChild={<Button onClick={onIncreaseMonth} title={">"}/>} /> <DiaryList data={monthlyData}/> </div> }; export default Home;

  • javascript
  • react
  • node.js
미니민 댓글 1 좋아요 0 조회수 89

after는 훅인가요?

미해결

Next + React Query로 SNS 서비스 만들기

6:08에 랜더링 이후에 작업을 하기 위해서 after 라는 훅이 추가되었다구 해주시는데 기본적으로 훅 네이밍은 use~~로 시작하는게 권장사항이라고 알고있어서용 물론 훅도 그냥 함수긴한데 개념적인 차이가 조금 있다고 생각해서 질문 드립니다!

  • next.js
이재진 댓글 2 좋아요 0 조회수 113

네비게이팅 섹션 강의에서?

해결됨

한 입 크기로 잘라먹는 Next.js

onclick이벤트 처리는 SCR이라 상단에 'use client";라고 정의해줘야 하는게 아닌지요? 자동으로 CSR로 처리되나요?

  • react
  • typescript
  • next.js
Jae Yeong Lee 댓글 2 좋아요 0 조회수 114

Vercel signup이 안되요,, 계속 제 깃허브 계정은 추가 인증이 필요하다며 registration@vercel.com에 문의를 하라고 하네요,,, 이럴땐 진행을 어찌해야할까요,,,

미해결

기초부터 배우는 Next YTMusic 클론 코딩 (with next.js 14, UI 마스터)

Vercel signup이 안되요,, 계속 제 깃허브 계정은 추가 인증이 필요하다며 registration@vercel.com 에 문의를 하라고 하네요,,, 이럴땐 진행을 어찌해야할까요,,,

  • react
  • 인터랙티브-웹
  • 클론코딩
  • next.js
  • tailwindcss
  • zustand
  • vercel
tngus5232 댓글 2 좋아요 1 조회수 155

실무에서 탭스 구현 시 어떤 방법을 많이 사용하는지 궁금합니다.

해결됨

아직도 살아 있는 불사의 jQuery - 기초 부터 실무까지

안녕하세요 강사님 탭스를 구현하기 위해 3가지 방법을 알려주셨는데 그러면 실무에서는 JQuery-UI를 사용하여 구현을 하는걸까요?? 그리고 지금 보니까 해당 강의 섹션 제목에 오타가 있는 것 같습니다. jQuery 가 아닌 Jqeury 로 되어있네요

  • HTML/CSS
  • javascript
  • jquery
  • jquery-selector
SHYU 댓글 2 좋아요 0 조회수 141

vercel function 리전을 서울로 하지 않아도 icn1이에요

해결됨

한 입 크기로 잘라먹는 Next.js

말그대로 입니다. 거의 마지막 강의에서 vercel 프론트엔드 앱에 들어가서 function의 리전을 서울이 아니라 도쿄로 바꾸고 배포했는데, 네트워크탭에 book/[id] 페이지의 문서의 X-Vercel-id는 icn1::~ 이 찍힙니다. 다만 index 페이지의 문서는 icn1::iad1::~~ 으로 찍히는데 그 이유가 무엇일까요? (리전은 도쿄로 하고 배포했습니다.) 또 icn은 인천의 약자인가요?

  • react
  • typescript
  • next.js
최성준 댓글 2 좋아요 0 조회수 248

계속 따라하다가 안돼서 bash에 연결할떄 안되더라구요

미해결

Vue.js 끝장내기 - 실무에 필요한 모든 것

따라하다가 자꾸 안돼서 보니까 bash에 연결할떄 안되더라구요 제 맥북에는 zsh? 여기에다가 해야 되더라구요 이렇게 nvm 써도 문제없는건지 궁금하고 왜 이렇게 다른걸로 하게 되는지 궁금해요! 라고 물어보려다가 검색을 해보았습니다. macOS Catalina부터 기본 쉘이 bash에서 zsh로 변경되었다네요 zsh에 설치하는게 맞는거였어요. 맥OS 여러분 참고하세요~~

  • javascript
  • vue.js
  • vuex
hjy100489 댓글 1 좋아요 0 조회수 122

todolist할때 컴포넌트 분리 안했던 것 같은데...

해결됨

[풀스택 완성] Supabase로 웹사이트 3개 클론하기 (Next.js 14)

✅ 모든 질문들은 슬랙 채널에서 답변드리고 있습니다. 💡 ”로펀의 인프런 상담소” 슬랙 채널 가입하기 💡 평일중에는 퇴근 이후(저녁 7시)에 답변을 받아보실 수 있고, 주말중에는 상시 답변드리고 있습니다. 강의보고 todolist할때 컴포넌트 분리 안했던 것 같은데... dropbox (선택수강)UI구축에 보면 supabase-todo-list vscode에 컴포넌트폴더에 ui컴포넌트 들이 있네요... 혹시 추가 작업을 하셨던 것일까요??

  • firebase
  • next.js
  • tailwindcss
  • react-query
  • supabase
codestudy 댓글 2 좋아요 1 조회수 151

슬라이드 문의드립니다.

해결됨

UIUX 포트폴리오 Part.3 - 반응형 웹 포트폴리오

안녕하세요. 위의 이미지에 질문을 넣었습니다. 강의명은 UIUX 포트폴리오 Part.3 - 반응형 웹 포트폴리오 입니다. 답변 부탁드립니다. 감사합니다.

  • HTML/CSS
  • javascript
  • jquery
  • 반응형-웹
  • media-query
happinessboom 댓글 2 좋아요 1 조회수 155

일러스트의 "gif 애니메이션"을 문의드립니다.

해결됨

UIUX 포트폴리오 Part.3 - 반응형 웹 포트폴리오

"UIUX 포트폴리오 Part.3 - 반응형 웹 포트폴리오" 강의에서 "섹션2"에 있는 일러스트의 "gif 애니메이션"을 어떻게 만드셨는지 알려주실 수 있을까요? 유투브, 구글, 네이버에서 관련 강의를 찾아봤는데, 못 찾았어요. 만약 관련 강의를 아신다면, 알려주셔도 될 것 같습니다. 답변 주세요. 감사합니다.

  • HTML/CSS
  • javascript
  • jquery
  • 반응형-웹
  • media-query
happinessboom 댓글 3 좋아요 1 조회수 280

서버 컴포넌트에서의 상호작용

해결됨

한 입 크기로 잘라먹는 Next.js

안녕하세요 강사님. 양질의 강의 잘 듣고 있습니다. 다름이 아니라 클라이언트 컴포넌트와 서버 컴포넌트 개념 설명에서, "상호작용(Interaction)이 지속적으로 발생하는 컴포넌트는 클라이언트 컴포넌트로 작성해야 한다" 라고 이해했었습니다. 그런데 리뷰를 작성하는 기능 또한 상호작용이 지속적으로 발생하는 것이 아닌가 하는 의문이 들었습니다. 제가 이해를 잘 못 한 부분이 있는 걸까요? 아니면 서버 컴포넌트에서도 어느정도 상호작용을 처리할 수 있는건가요?

  • react
  • typescript
  • next.js
라라올라 댓글 2 좋아요 0 조회수 114

인기 태그

인프런 TOP Writers

주간 인기글