본문 바로가기

전체 글185

PKCE란 🔐 PKCE (픽시)란?PKCE (Proof Key for Code Exchange) 는👉 OAuth2 인증 코드 플로우에서 코드 탈취 공격(code interception)을 방지하기 위한 보안 강화 방법입니다.📌 왜 필요한가?기본 OAuth2 인증코드 방식에서는:클라이언트가 /authorize 요청 → 인증 서버에서 code 응답클라이언트가 /token 요청 시 그 code로 access token 받음✅ 문제: 공격자가 중간에서 code를 가로채면 access token을 받아버릴 수 있음→ 이걸 막기 위해 PKCE를 사용합니다. 용어 설명code_verifier클라이언트가 랜덤하게 생성한 문자열 (43~128자 사이, 영숫자 + -._~)code_challengecode_verifier를 .. 2025. 6. 26.
코드아티팩트에서 커스텀 라이브러리 관리하기 https://www.notion.so/limew/Code-Artifact-1753cf01ac408083be1be0164ccdbe7c 2025. 1. 7.
isostring 1일 밀리는 이유 https://anywaydevlog.tistory.com/46 [javascript] toISOString() 1일 전 날짜가 뜨는 이유 및 해결법 (UTC 타임존 zero offset 이슈)toISOString() 는 Date 를 ISOString(yyyy-mm-ddThh:mm:ss) 형식의 문자열로 변환해주는 함수이다. 그런데 이 함수를 사용하면 날짜가 하루 전 날짜가 찍힌다. 이유는 이 함수가 우리나라 Time Zone 이 아니라 UTCanywaydevlog.tistory.com 2024. 12. 16.
useSearchParam 사용시 api 2번 호출되는 거 해결 처음에 훅을export const useQueryParam = (defaultParams: I_QueryParam) => { const [searchParams, setSearchParams] = useSearchParams(); // 디폴트 쿼리 파라미터 설정 useEffect(() => { // 기본값을 기준으로 현재 searchParams에 없는 값을 설정 let updated = false; for (const [key, value] of Object.entries(defaultParams)) { if (!searchParams.has(key)) { searchParams.set(key, value); updated = true; }.. 2024. 12. 10.
form.submit()와 axios.post() 데이터 전송의 포맷차이 form.submit()와 axios.post()는 서로 다른 방식으로 데이터를 전송합니다.HTML form.submit()HTML 폼을 사용하여 데이터를 제출할 때, 사용자가 입력한 데이터는 기본적으로 application/x-www-form-urlencoded 형식으로 서버에 전송됩니다.예를 들어, 사용자가 입력한 username과 password가 있다면, 서버에 보내는 데이터는 다음과 같은 형식입니다 username=사용자명&password=비밀번호 Axios axios.post()Axios를 사용하여 POST 요청을 보낼 때, 기본적으로 JSON 형식으로 데이터를 전송합니다.위의 예시에서 axios.post()를 사용할 경우, 데이터는 다음과 같은 JSON 형식으로 전송됩니다 { "user.. 2024. 10. 24.
파일 다운로드 처리 export const downloadFiles = async (data) => { await data.reduce(async (promise, item, index) => { await promise; const link = document.createElement("a"); link.download = `all_temp_file_name ${index}`; link.href = item; document.body.appendChild(link); link.click(); document.body.removeChild(link); // 0.5초 지연 return new Promise((resolve) => setTimeout(resolve, 500));.. 2024. 9. 20.