์ฐ์ํํ์ ๋ค์์ ํ๋ก ํธ์๋ ํ๋ก๊ทธ๋๋จธ๋ก ์ผํ๊ณ ์์ต๋๋ค. ํ๋ฒํ ์ฌ๋๋ค์ด ๋ชจ์ฌ์ ๋น๋ฒํ ์ผ์ ํ ์ ์๋ค๊ณ ๋ฏฟ์ต๋๋ค.
- ํ) ์ฐ์ํํ์ ๋ค, ํ๋ก ํธ์๋ ํ๋ก๊ทธ๋๋จธ
- ์ ) ์ผ๋์, ๋ฐฑ์๋ ํ๋ก๊ทธ๋๋จธ
- ์ ) ArasoPandan, ๋ฐฑ์๋ ํ๋ก๊ทธ๋๋จธ
- ์ ) MobiDIX, ๋ชจ๋ฐ์ผ ๊ฒ์ ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋๋จธ
Courses
Reviews
- Unity NGUI tutorial on making games by following Totu's tutorial
- Learn Front-End DO IT Coding While Making (Next.js, Typescript)
- Learn Front-End DO IT Coding While Making (Next.js, Typescript)
- Start automating your tasks with Google Apps Script
- Learn Front-End DO IT Coding While Making (Next.js, Typescript)
Posts
Q&A
์์ฑ๋ ์ฝ๋๋ฅผ ๊ณต์ ํด ์ฃผ์ค ์ ์์ผ์ ๊ฐ์?
์๋ ํ์ธ์ ์ ์ฐ๋.์ ๊ท ์ ์ฌ์ ์ฝ๋ ์ฒจ๋ถํฉ๋๋ค.function myFunction() { const sheets = SpreadsheetApp.getActiveSpreadsheet(); const list = sheets.getSheetByName('list'); const lastRowNo = list.getLastRow(); const folderId = 'ํด๋ ID'; const folder = DriveApp.getFolderById(folderId); const files = folder.getFiles(); const fileMap = new Map(); const inlineImages = {}; while (files.hasNext()) { let file = files.next(); const flieName = file.getName(); fileMap.set(flieName, file); inlineImages[flieName] = file; } const imageFile = DriveApp.getFileById('ํ์ผ ID'); inlineImages['megaphone'] = imageFile; let allMembers = []; for (let i = 2; i { const index = acc.findIndex(f => f.division === cur.division); if (index === -1) { // ๊ธฐ์กด์ ์๋ ๋ถ๋ฌธ์ด๋ฏ๋ก ์๋ก ์ถ๊ฐ const newDivision = { division: cur.division, members: [{...cur}], } return [...acc, newDivision]; } // ์ด๋ฏธ ์๋ ๋ถ๋ถ const prevData = {...acc[index]}; prevData.members.push({...cur}); const updateArr = [...acc]; updateArr[index] = prevData; return updateArr; }, []); const htmlFile = HtmlService.createTemplateFromFile('email'); htmlFile.data = reduceMembers; const htmlBody = htmlFile.evaluate().getContent(); MailApp.sendEmail({ to: '๋ณธ์ธ ์ด๋ฉ์ผ ์ฃผ์', subject: '์ ๊ท์ ์ฌ์ ์๊ฐํฉ๋๋ค', htmlBody, inlineImages, }); }
- 0
- 1
- 254
Q&A
vscode bgColor ๋ฐ๋ก ํ์๋๊ธฐ ์ค์ ๋ฐฉ๋ฒ ๋ฐ chakra-ui img src ์ค์ ๊ด๋ จ
์๋ ํ์ธ์ ๋ธ๋ฃจ๋ธ๋ฃจ๋ ํ์ฅ๊ธฐ๋ฅ์ AI์ธํด์ด ์ค์นํ๊ฑธ ์ค์นํ์ง ์์์ด์.๊ทธ๋ฐ๋ฐ ์ธ์ ๊ฐ๋ถํฐ ๋๋๋ผ๊ณ ์.eslint, tailwind, styled component ๊ด๋ จ ํ์ฅ์ ์ค์นํ๊ธด ํ๋๋ฐ์.ํ๋์ฉ disabled ์์ผ๋ ์ ๋์ค๋๋ผ๊ณ ์.vscode ๊ธฐ๋ฅ์ธ๊ฑด์ง ... ์ ๋ ์๋ฌธ์ด๋ค์. 2๋ฒ์ ์ฐจ์ด ์์ต๋๋ค.(์ฌ์ง) ์ด๋ฉด ๋ ํ ๋ฐ ์ ๋ ๊ฒ ๋ซ์๋ค์.
- 0
- 2
- 354
Q&A
ํด๋์ค ๋ฐฉ์๋ง๊ณ (2)
์๋ ํ์ธ์ oridori๋!if (!admin.apps.length) { const config: Config = { credentials: { projectId: process.env.projectId || '', clientEmail: process.env.clientEmail || '', privateKey: process.env.privateKey?.replace(/\\n/g, '\n') || '', }, }; admin.initializeApp({ credential: admin.credential.cert(config.credentials), }); console.info('bootstrap firebase admin'); } ๊ธฐ์กด์ ์ด ์ฝ๋๋ง ๊ฐ์ง๊ณ ์ ์์ ์ผ๋ก ๋์ํ๋์ง ๋จผ์ ํ์ธํด๋ณด์ธ์.์ด ์ฝ๋๋ฅผ ๋ณต์์ ํ์ผ์์ importํ์ ๋ initializeApp์ด ํ๋ฒ๋ง ์คํ๋๊ณ , ๊ฐ์ ๋์์ ์ ํ๋ค๋ฉด ๋ฌธ์ ์์๊บผ์์!
- 0
- 1
- 253
Q&A
ํด๋์ค ๋ฐฉ์๋ง๊ณ
์๋ ํ์ธ์ oriori2705๋! ์์ฑํด์ฃผ์ ์ฝ๋ ์ ๋์ํ ๋ฏํด์.admin์ ์ฑ์ด ์๋์ง ์ฒดํฌํ๋ ๋ถ๋ถ์ด ์์์์.if (!admin.apps.length) {๋ค๋ง, ์ด ์ฝ๋๋ require๋ก ๊ฐ์ ธ์ค๋๋ก ํ๋๋ฐ์.์ด๊ฒ ์ฌ๋ฌ ํ์ผ์ ๊ฑธ์ณ์์ ๋, ์ดํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ฉด ํ๋ฒ๋ง init ์ด ๋๋์ง ํ์ธํด๋ด์ผ๊ฒ ๋ค์. 2๋ฒ ์ง๋ฌธ์ admin.apps.length๊ฐ ์ด๋ค ๊ฐ์ ๊ฐ์ง๋์ง ํ์ธํด๋ณด์ ์ผํ ๋ฏํ๋ค์.if ๋ฌธ์์์ ๋์์ํ๋ค๋ฉด if๋ฌธ ์ฝ๋๊ฐ ์คํ๋์ง ์์์ ๊ฐ๋ฅ์ฑ์ด ์์ด์.
- 0
- 1
- 211
Q&A
๋ฐฐํฌ ํ ์ค๋ฅ
https://blah-blah-one.vercel.app/api/messages.list?uid=cccodus313&page=1&size=10์ด๋ ๊ฒ ์์ฒญํ๋ฉด{"message":"์กด์ฌํ์ง์๋ ์ฌ์ฉ์"}์ด๋ฐ ์๋ต์ด ๋์์์. ์ง๊ธ ๋ฐฐํฌ๋ ํ๊ฒฝ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋๋ก ์ ๊ทผํ์ง ๋ชปํ๊ณ ์๋๋ฏํฉ๋๋ค. ์ฝ๋๊ฐ ์๋๋ผ ํ๊ฒฝ๋ณ์๋ฅผ .env ํ์ผ์ด๋ ๋น๊ตํด๋ณด์ ์.
- 0
- 3
- 999
Q&A
const resp = await fetch(`/api/messages.list?uid=${uid}`)๊ฐ 404์๋ฌ๊ฐ ๋น๋๋ค
๋ค, ๋ฉ์์ง ๋ฆฌ์คํธ๋๊น ๋ชฉ๋ก์ฒ๋ผ ๋์์ผ๊ฒ ์ฃ . ๋๋ฒ๊น ๊ณผ์ ์ ์ด์ ์ ๋น์ทํฉ๋๋ค.๋์ด๊ฐ uid๊ฐ ์ฌ๋ฐ๋ฅธ๊ฐ?api ์ปจํธ๋กค๋ฌ๊น์ง ์๋ต์ด ์ ์๋?์ ์ค์ง ์์๋ค๋ฉด ํธ์ถํ url์ด ์ ํจํ๊ฐ?์ ์๋ค๋ฉด, ์ปจํธ๋กค๋ฌ์ ์ด๋ ์ง์ ์์ 404๋ก ๋ฐํํ๋๊ฐ? ๋ฑ์ ๊ณผ์ ์ผ๋ก ํ์ธํด๋ณด๋ฉด ๋ฉ๋๋ค.
- 0
- 1
- 378
Q&A
localhost:3000/api/user.info/totuworld 404 ์๋ฌ๊ฐ ๋น๋๋ค.
์ต์ข ํ์ธ ๋ ์ฌํญ์ ๋๋ค. ์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ ์ ๊ทผํ๋ url์ ์์ด๋๊ฐ ๋ฌ๋์ด์.๋ง์ฝ ์ email์ด totuworld ๋ผ๋ฉด ttotuworld ์ฒ๋ผ ์ค๊ฐ์ ๋ค์ด๊ฐ๊ฒ ์กฐ๊ธ ๋ฌ๋ผ์ ์ ๊ทผ์ด ์๋๊ฑฐ์์ต๋๋ค. ๋ ๋ฒ์งธ ๋ฌธ์ ๋ firebase auth ๋ฅผ ๋๊ธฐ๋ ์ด๊ธฐ๊ฐ์ด null์ธ๋ฐ์. ์ด๊ฒ undefined๋ก ๋์ด๊ฐ๋ฉด์ ๋ฐ์ํ์ต๋๋ค.https://github.com/cccodus313/Blah-Blah/commit/d493f443e596a73c09966400f551d3e85651eae0#diff-568e8274da487c742d5bb3662960de2752a55e6921e2929d8c8f426cfa2068f9L7 export default function useFirebaseAuth() { const [authUser, setAuthUser] = useState(null);์์ ์ฝ๋ ์ฒ๋ผ ๋์ด์์ด์ผํ์ด์! ์ด๊ฒ ๋ฌธ์ ๋ฅผ ์ผ์ผํจ ์ด์ ๋ ์๋ ์ฝ๋์์ null์ด ์๋๋ฉด InAuthUser๋ผ๊ณ ์๊ฐํ๊ณ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋๋ฐ์.์ด๊ธฐ๊ฐ์ด undefined์๊ธฐ ๋๋ฌธ์ ์์ ์กฐ๊ฑด์ ํต๊ณผํ๊ณ .uid์ ์ ๊ทผํ๋๊น ์๋ฌ๊ฐ ๋ฐ์๋์์ด์. const isOwner = authUser !== null && authUser.uid === userInfo.uid;
- 0
- 3
- 337
Q&A
localhost:3000/api/user.info/totuworld 404 ์๋ฌ๊ฐ ๋น๋๋ค.
์๋ ํ์ธ์ ์ฑ์ฐ๋.์ง๊ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ์ฉ์๊ฐ ์ถ๊ฐ๋ ์ํ์ธ๊ฐ์?
- 0
- 3
- 337
Q&A
์ฌ์ฉ์๋ฅผ ์ฐพ์ ์ ์๋ค.
์์ฑ์๊ฐ ์๋ค๋ ์ด๊ฒ ๋ฌด์จ...
- 0
- 1
- 328
Q&A
2. ์ฌ์ฉ์ API ๋ง๋ค๊ธฐ => ๊ฐ์๋ ์งง์ง๋ง ๋ฐฑ์๋ api ๋ง๋๋ ๊ธฐ๋ณธ ๋ด์ฉ ๋ค ๋ค์ด๊ฐ ์์ ์ฃผ์ํ์ธ์!!
flat_white๋ ์๋ ํ์ธ์ :)์ง๋ฌธ ๋๋ฌด ์ฌ๋ฏธ์๋ค์.๋ง์ต๋๋ค. ๊ณ์ ํ๋ค๋ณด๋ฉด ํด๊ฒฐ๋๋ ๋ถ๋ถ์ด ์์ด์.์ฑ ์ ์ฝ์ ๋ ๋ชจ๋ ๋จ์ด๋ฅผ ์ดํดํ๊ณ ์ฝ์ง ์์ฃ . ๋ฌธ๋งฅ์ ํตํด ํน์ ํต๋ฐฅ์ผ๋ก ์ถ์ธกํ๊ณ ๋์ด๊ฐ๋ค๋ณด๋ฉด ์ ์ฒด ๊ทธ๋ฆผ์ด ๋ณด์ ๋๋ค.๋ฌผ๋ก ๊ทธ๋ผ์๋ ์ดํด๋์ง ์๋ ๋ถ๋ถ์ ๋์ค์ ์ฐพ์๋ณด๋ฉด ๋ฉ๋๋ค.์ด๋ฐ ๋ฐฉ๋ฒ์ผ๋ก ํ์ตํ์๊ธธ ๊ธฐ๋ํ๋๋ฐ์. flat_white๋์ด ๊ทธ ๋ถ๋ถ์ ์ ํํ ์ง์ด์ฃผ์ จ๋ค์.
- 0
- 1
- 293