๐ํ๋ก๊ทธ๋๋ฐ/Next.js
์์ ํฌ์ธํธ๋ 2๊ฐ์ด๋ค. credentials์ type์ ๋ช
์, ๋ก๊ทธ์ธ ์ฑ๊ณตํ๊ณ return ๋๋ user ๊ฐ์ any๋ก ๋ฐํ import bcrypt from "bcrypt"; import NextAuth, { AuthOptions } from "next-auth"; import CredentialsProvider from "next-auth/providers/credentials"; import prismadb from "@/app/lib/prisma"; import { PrismaAdapter } from "@auth/prisma-adapter"; export const authOptions: AuthOptions = { providers: [ CredentialsProvider({ name: "..
๐ํ๋ก๊ทธ๋๋ฐ
Go๋ main ํจํค์ง ๋ด์ Entry Point์ธ main() ํจ์๋ฅผ ์ฐพ์ ํ๋ก๊ทธ๋จ์ ์คํํ๋ค. Go ์์๋ ํ ๋น๋๋ ๊ฐ์ ๋ณด๊ณ ๊ทธ ํ์
์ ์ถ๋ก ํ๋ ๊ธฐ๋ฅ์ด ์์ฃผ ์ฌ์ฉ๋๋ค. ์ฌ๋ฌ ๊ฐ์ ์์๋ค ๋ฌถ์ด์ ์ง์ ํ ์ ์๋๋ฐ, ์๋์ ๊ฐ์ด ๊ดํธ ์์ ์์๋ค์ ๋์ดํ์ฌ ์ฌ์ฉํ ์ ์๋ค const ( Visa = "Visa" Master = "MasterCard" Amex = "American Express" )
๐ํ๋ก๊ทธ๋๋ฐ
์ธ์
์ ๋ฌผ์ด์ ํต์ ํ๋๋ก ํ์ ์ธ์
์์ด ์งํ ์ ์ฐ๊ฒฐ์ ๋งบ๊ณ ๋์์ ๋ฐ์์ผ๋ก ์๋ฒ์์ ์์ฉ๊ฐ๋ฅํ ๋ฒํผ๊ฐ ์์ด์ ์ฐ๊ฒฐ์ด ๋์ด์ง๊ฑฐ๋ ๋ณด์์ฅ๋น์์ ๊ณต๊ฒฉ์ผ๋ก ์ธ์ํด์ ์ฐจ๋จ ๋ ์ ์๋ค. session = requests.Session() session.get("URL") session.close()
๐ํ๋ก๊ทธ๋๋ฐ
ํด๊ฒฐ๋ฐฉ๋ฒ ๊ฐ์ฒด๋ถํด ๋ฌธ๋ฒ์ ํตํ์ฌ return ํ๋ค export async function GET(request: NextRequest) { const result = await prismadb.user.findMany(); // Modify the result to exclude the 'hashedPassword' field const modifiedResult = result.map(({ hashedPassword, ...rest }) => rest); return NextResponse.json(modifiedResult); } const modifiedResult = result.map(({ hashedPassword, ...rest }) => rest);์์ ๊ฐ์ฒด ๋ถํด๊ฐ ์ผ์ด๋ฉ๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก๋..
๐ํ๋ก๊ทธ๋๋ฐ
์์ฑ๋ฐฐ๊ฒฝ ์ธ์ฆ์ ๊ต์ฒด ์์
์ด ํ์ํ ๋ IIS ํ์ผ ์ ์ฉ์ผ๋ก pfx ํ์ผ๊ณผ keypass๋ฅผ ์ ๋ฌ ๋ฐ์๋ค. ๋๋ CloudFlare์ cert.pem, priv.key๋ก ์์
์ ํด์ผํ๋ ์ํฉ์ด๋ค. pfx ํ์ผ์์ ์ถ์ถํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ธ์ฆ์ ์ถ์ถ ๋ฐ ๊ฐ์ธํค ์ถ์ถ์ ํ์ฌ ์ ์์ ์ผ๋ก ์ธ์ฆ์ ์์
์ ์๋ฃํ๋ค! openssl ๋ช
๋ น์ด๊ฐ ์ค์น๋์ด ์์ง์์์ wsl์ ๋์์ ๋ฐ์ wget์ผ๋ก wsl ์ธํฐํ์ด์ค ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์์
ํ๋ค. ์ธ์ฆ์์ถ์ถ(certification) openssl pkcs12 -in [yourfile.pfx] -clcerts -nokeys -out [drlive.crt] ๊ฐ์ธํค์ถ์ถ(private key) openssl rsa -in [drlive.key] -out [drlive-d..
๐ํ๋ก๊ทธ๋๋ฐ/Next.js
์์ธ fetch๋ก api๋ฅผ ํธ์ถ ์ cache๋ก ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ด๋ค. dev ํ๊ฒฝ์์๋ cache ์์ด ๊ฐฑ์ ๋์ ์๋์์ง๋ง production ํ๊ฒฝ์์๋ cache๋ก ๋ณ๊ฒฝ์ด ๋์ง ์์ ๊ฒ์ด๋ค. prisma์ findMany findDelete๊ฐ ๊ณ ์ฅ๋์ค ์์๋ค ํด๊ฒฐ๋ฐฉ๋ฒ api tsํ์ผ์ dynamic ์ง์ // /api/log/route.ts import prismadb from '@/app/libs/prismadb'; import { NextResponse } from 'next/server'; // ํธ์ถ์ cache ์์ด ์ํ export const dynamic = 'force-dynamic'; export async function GET(request: Request) { try { const l..
๐ํ๋ก๊ทธ๋๋ฐ/Next.js
nextjs์์ ํ๋ api ๋จ์์ ํ์ผ์ ์ ์ฅํ๊ณ ๋ค์ ๋ถ๋ฌ์ค๊ณ ๋ณ ์ง์ ํด๋ณด์์ง๋ง ์ ๋์ง์์์ json ๋ฐฐ์ด์ ๋ฐ์ ํ๋ก ํธ์์ ์ ์ฅํ๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝํ๋ค. ์ถ์ฒ https://kwtjdtn.tistory.com/9 [Javascript] xlsx๋ฅผ ์ด์ฉํ์ฌ json data๋ฅผ ์์
ํ์ผ๋ก ๋ค์ด๋ก๋ ํ๊ธฐ (์ด๊ฐ๋จ) ์ด๋๋ฏผ ์๋น์ค์ JSON ๋ฐ์ดํฐ๋ฅผ ์์
ํ์ผ๋ก ๋ณํํ์ฌ ๋ค์ด๋ก๋ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฒ ๋์๋ค. ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ๋ค์ด ์๊ฒ ์ง๋ง xlsx ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๊ธฐ๋ก ํ๋ค. (๋๋ฌด ๊ฐ๋จํ๊ธฐ ๋๋ฌธ,,) ๋ผ kwtjdtn.tistory.com import * as XLSX from 'xlsx'; const downloadExcel = (data) => { const worksheet = XLSX.ut..
๐ํ๋ก๊ทธ๋๋ฐ/Next.js
ํด๋ผ์ด์ธํธ const fileUpload = async (file: Blob) => { const formData = new FormData(); formData.append('file', file, file.name); // ํ์ผ ์ด๋ฆ์ ๋ช
์ try { const res = await fetch('/api/upload', { method: 'POST', body: formData, }); const data = await res.json(); console.log('์๋ฒ ์๋ต:', data); } catch (error) { console.error('ํ์ผ ์
๋ก๋ ์ค ์ค๋ฅ:', error); } }; export default fileUpload; ์๋ฒ(api/upload/route.ts. import..
๐ํ๋ก๊ทธ๋๋ฐ
ํ์ค์์ฝ ๋ธ๋์น๋ฅผ ๊ณ ์๋ก ๋ง๋ค์ด๋ผ ๊ทธ๋ฆฌ๊ณ ์๋ก์ด ๊ณณ์ ๋ฎ์ด์จ๋ผ ํ๋์ ๋ธ๋์น๋ฅผ ๊ณ ์๋ก ๋ง๋ค๊ณ ๊ฑฐ๊ธฐ์ ์ต์ด ์ปค๋ฐํ๊ณ origin์ ๋ฎ์ด ์์ฐ๋ ๊ฒ์ด๋ค. protected branch๋ผ๋ฉด ํด์ ํด์ผ ํธ์๋๋ค. git checkout --orphan latest_branch git add -A git commit -am "Initial commit message" #Committing the changes git branch -D master #Deleting master branch git branch -m master #renaming branch as master git push -f origin master #pushes to master branch git gc --aggressive --prune=..