재귀 재귀를 활용하기 좋은 상황은 언제인지 예시를 들어 설명해주세요. 주어진 문제를 비슷한 구조의 더 작은 문제로 나눌 수 있는 경우 반복문의 중첩횟수를 예측하기 어려운 경우 반복문(while, for)으로 작성된 코드를 더 간결하고 이해하기 쉽게 작성하고 싶은 경우 예시: 마트료쉬카처럼 객체 안에 객체가 반복되고, 그 반복횟수를 알 수 없는 경우 UI/UX UI, UX의 개념과 두 개념의 관계에 대해서 설명해주세요. UI는 사용자가 제품과 상호작용하는 시스템으로 화면의 그래픽 뿐만 아니라 키보드나 마우스같은 물리적인 요소도 포함합니다. UX는 사용자가 제품을 이용하면서 직간접적으로 느끼고 생각하는 총체적인 경험으로 제품 자체에 대한 경험과 제품에 대한 홍보, 접근성, 사후 처리 과정에 느낀 경험을 뜻합..
OAuth 인증을 중개해주는 메커니즘 보안된 리소스에 접근하기 위해 클라이언트에게 권한을 제공하는 프로세스를 단순화한 프로토콜 사용자 정보를 이미 가지고 있는 웹서비스(Google, Facebook, Github 등)에서 사용자 인증을 대신 해주고, 접근 권한에 대한 토큰을 발급한 후 이를 이용해 내 서버에서 인증 소셜 로그인 선호 추세 - 사용자: 소셜 로그인으로(이미 가입된 계정을 이용해) 빠르게 서비스에 가입하는 것 선호 - 서비스(개발자): 신규 회원가입이나 회원 관리에 신경쓰지 않아도 되기 때문에 선호 보안상 이점 : 유저의 민감한 정보가 App에 노출될 일이 없고, 인증 권한에 대한 허가를 유저에게 미리 구해야 하기 때문에 더 안전하게 로그인 가능 OAuth 용어 Resource Owner: ..
클라이언트 Credentials CORS 요청에 자격인증정보(credentials)를 포함하고 싶을 때 설정 - Credentials: 쿠키, Authorization인증 헤더, TLS client certificates // client 헤더 withCredentials: true // 모든 axios 요청에 withCredentials를 true로 설정 axios.defaults.withCredentials = true // fetch 사용 시 fetch("localhost:4000", { method: "POST", credentials: "include" }) 서버 사용 모듈 const express = require('express'); // 서버 const cors = require('cors..
해싱(Hashing) 해시 함수를 이용한 암호화. 복호화 불가 항상 같은 길이의 문자열 리턴 동일한 문자열에 해시 함수를 적용하면 항상 같은 값 리턴 서로 다른 문자열에 해시 함수를 적용하면 다른 값 리턴 해싱의 목적은 복호화하여 기존 데이터를 사용하는 것이 아니라 이전 데이터와 현재 데이터가 일치하는 지 확인하는 것이기 때문에 복호화가 불가능한 암호화 방식을 사용함 => 민감한 데이터를 다룰 때 유출의 위험은 줄이면서 데이터 유효성을 검증하기 위해 사용되는 단방향 암호화 방식 레인보우테이블 해시 함수 결과값의 이전 모습을 알 수 있도록 기록해놓은 표(복호화 표) 레인보우 테이블이 유출될 경우 이전 값을 알아낼 수 있기 때문에 보안상 위협이 될 수 있음 솔트(Salt) 소금을 치듯 기존 데이터에 임의의 ..
Cookie 웹 사이트에 들어갔을 때 서버가 클라이언트에게 일방적으로 전달하는 작은 데이터 - 서버가 웹 브라우저(클라이언트)에 정보를 저장하고 불러올 수 있는 방법 - 해당 도메인에 대해 쿠키가 존재하면 웹 브라우저는 도메인에게 HTTP 요청 시 자동으로 쿠키를 함께 전달(헤더) 영속성을 띄기 때문에 장기간 보존해야하는 정보 저장에 적합(삭제하지 않는다면 사라지지 않음) ex) 로그인 상태 유지, 사용자 선호 테마, 장바구니, 30일간 띄우지 않기 등 쿠키는 쉽게 조회할 수 있기 때문에 보통 암호화되어 저장, 민감한 정보는 해싱 처리하지만 그래도 민감한 정보나 개인 정보는 담지 않는 것이 좋음 데이터 저장 이후 특정 조건(옵션)들이 만족된다면 서버가 원할 때 클라이언트 쿠키를 이용하여 데이터를 가져올 ..

