목록전체 글 (140)
juni

Jest / vitest 기반 유닛 테스트 코드 작성 및 테스트참고 사이트https://velog.io/@thdrldud369/Vite-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%97%90-jest-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0 Vite 프로젝트에 Jest 추가하기Vite로 만들어진 React 프로젝트에 Jest를 추가하는 방법에 대한 설명velog.io 하지만 jset를 사용하려는데 에러가 발생했습니다.Error [ERR_REQUIRE_ESM]: require() of ES Module C:\Users\sangj\OneDrive\바탕 화면\sparta\onboarding\node_modules\strip-ansi\index.js from..
NextAuth.js 사용하기NextAuth.js는 Next.js에서 인증과 세션 관리를 쉽게 할 수 있는 라이브러리입니다. OAuth, 이메일 인증, 자격 증명 기반 인증 등 다양한 인증 방식을 지원합니다. NextAuth.js를 사용하면 세션 관리를 간단하게 할 수 있어요. npm install next-auth 설정 (pages/api/auth/[...nextauth].js):import NextAuth from "next-auth";import Providers from "next-auth/providers";export default NextAuth({ providers: [ Providers.GitHub({ clientId: process.env.GITHUB_CLIENT_ID,..
1. refetch:즉시 데이터를 다시 가져옵니다: refetch는 호출된 즉시 쿼리를 다시 실행하여 데이터를 갱신합니다.사용자 상호작용에 적합: 특정 이벤트(예: 버튼 클릭, 사용자 액션) 후 데이터를 즉시 갱신해야 할 때 적합합니다.단일 호출: 해당 컴포넌트에서 refetch()를 호출하면, 쿼리의 데이터를 한 번만 갱신합니다.적합한 경우:데이터가 특정 사용자 액션 이후 즉시 새로 고쳐져야 하는 경우.예를 들어, 사용자가 버튼을 눌러 직접 데이터를 다시 가져오게 하는 상황.2. invalidateQueries:쿼리를 무효화하고 필요할 때 다시 실행: 쿼리가 "더 이상 유효하지 않다"고 표시되며, react-query가 적절한 시점(예: 컴포넌트가 다시 마운트되거나, 페이지 포커스가 바뀔 때)에 쿼리를..
세팅 목표Vite + Typescript 기반 프로젝트 설치zustand, tanstack query, tailwind css(또는 styled-components), react-router-dom 세팅환경변수 세팅 및 폴더구조 구성하기json placeholder를 이용하여 외부 통신 테스트 하기JWT 기술분석 : access, refresh token의 개념과 관리전략 blog 작성회원가입, 로그인, 마이페이지 페이지 컴포넌트 구현필수기능 : 회원가입, 로그인, 프로필 변경tailwind 또는 styled-components를 이용한 스타일링JWT 인증서버를 활용하여 access token 기반 페이지 권한 처리(라우팅 제어) vite를 ts로 설정yarn create vite . --template..
문제 설명문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요. function solution(s) { const words = s.split(" ") const answer = words.map(word => ( word.split("").map((c, i) => { if(i % 2 === 0) return c.toUpperCase(); return c.toLowerCase(); }).join("") )).join(" ") return answer;} 입력 받은..
function solution(n, m) { let gcd = 1; let lcm = 0; const answer = []; for (let i = 1; i 풀이를 위해 유클리드 호재법을 이용했습니다. 유클리드 호제법의 원리는 두 수를 나눈 나머지를 r이라고 할 때, 두 수 중 작은 수와 r의 최대공약수가 두 수의 최대공약수와 같다는 것이다. 이러한 과정을 반복하다가 나머지가 0이 될 때 나누는 수가 두 수의 최대공약수인 것입니다. 위를 활용하여 최대 공약수는 1부터 N(a, b 중 작은 수)까지 순회하면서 a와 b를 각각 나누었을 때 그 나머지가 둘 다 0이되는 수, 즉 나누어 떨어지는 수를 찾고최소 공배수는 두 수를 곱한 값을 최대공약수로 나눈 수임을 활용하여 풀이했습니다.
process.stdin.setEncoding('utf8');process.stdin.on('data', data => { const n = data.split(" "); const a = Number(n[0]), b = Number(n[1]); for(i=0; i 1. process.stdin.setEncoding('utf8');setEncoding('utf8'): 표준 입력(사용자가 입력하는 값)이 UTF-8 인코딩으로 처리되도록 설정합니다. UTF-8은 일반적으로 텍스트를 처리할 때 사용하는 인코딩 방식이에요. 이 부분은 사용자가 입력하는 값(예: 5 3)을 문자열로 처리하기 위한 설정이에요.2. process.stdin.on('data', data => { ... })process..

supabase에서 realtime 적용이 필요한 테이블에만 설정 export const fetchMessages = async (senderId: string, receiverId: string, postId: string) => { const { data, error } = await supabase .from('messages') .select( ` *, sender:users!messages_sender_id_fkey ( id, name, avatar ), receiver:users!messages_receiver_id_fkey ( id, name, avatar ) ` ) .eq('post_id', postId) .or( ..