본문 바로가기

전체 글39

인증(Authentication) Bcrypt와 JWT에 대해서 1. Bcrypt란? 'Bcrypt'는 브루스 슈나이어가 설계한 키(Key) 방식의 대칭형 블록 암호에 기반을 둔 암호화 해시 함수의 한 종류로 Niels Provos와 David Mazieres가 설계했습니다. 주로 비밀번호와 같은 민감한 정보를 안전하게 저장하기 위해 사용됩니다. 이는 단방향 해시 함수로, 일반적인 해시 함수와는 다르게 동일한 입력에 대해 항상 동일한 출력을 생성하지 않습니다. 이 특성은 보안상 중요하며, 일반적인 해시 함수는 동일한 입력에 대해 항상 동일한 해시 값을 생성하기 때문에 레인보우 테이블과 같은 사전 공격에 취약할 수 있습니다. 또한, 해시 함수는 본래 빠르게 데이터를 검색하기 위해 탄생되었습니다. 따라서, 공격자는 매우 빠른 속도로 임의의 문자열의 해시값과 해킹할 대상의.. 2023. 11. 28.
세션(Session)과 토큰(Token)에 대해서 📍 들어가기 전 웹 환경에 사용자와 시스템 간 데이터를 교환하기 위해 HTTP 방식을 사용합니다. HTTP통신은 요청과 응답에 의해 동작하며, HTTP 특징 중 가장 중요한 특징은 바로 Stateless입니다. Stateless는 문자 그대로 State(상태) + less(없음)을 의미합니다. 각 HTTP 통신은 독립적으로 과거 통신(요청 및 응답)에 대한 내용을 전혀 기억하지 못합니다. 따라서, 매 통신마다 필요한 모든 정보를 담아 요청을 보내야 한다는 것입니다. 만약 로그인 후 상품 구매나 상품을 찜하기에 저장하는 것과 같이 여러 통신(요청/응답)의 진행 과정에서 연속된 데이터 처리가 필요한 경우 Stateless의 특징에 따라 매번 로그인을 위한 인증정보를 같이 보내주어야 합니다. 이런 불편함을 없.. 2023. 11. 24.
인증 & 인가에 대해서 1. 인증(Authentication) 1️⃣ 인증(Authentication)이란? "인증(Authentication)"은 특정 사용자나 시스템이 자신이 주장하는 신원(Identity)나 권한을 입증하는 과정 또는 결과를 의미합니다. 즉, 특정 사용자가 누구인지 확인하고, 그 사용자가 특정 자원이나 서비스에 접근할 권한이 있는지 확인하는 프로레스를 말합니다. 2️⃣ 인증의 유형 인증에는 여러 유형이 있습니다. 이 중에 단일 요소 인증(Single-Factor Authentication, SFA)은 사용자가 인증을 위해 단일한 인증 수단을 사용하는 방식입니다. 주로 아이디와 패스워드를 사용해 사용자 신원을 확인하는 전통적인 방법이 단일 요소 인증에 해당하며 사용자는 아이디, 패스워드를 입력해 시스템에 로.. 2023. 11. 23.
각 Layer 별 Error Handling에 대해 1. Controller Error 컨트롤러는 표현 계층, 즉 입력과 출력에 관련한 부분을 담당합니다. HTTP 통신을 처리하는 웹 서버의 관점에서는 http request(요청 입력), http response(응답 츨력)을 담당하는 레이어입니다. 따라서 통신이 처음 시작될 때, 사용자로부터 받은 정보를 클라이언트(프론트 엔드)가 전달해 주면, 해당 입력에 대한 유효성 검증을 처리하며 에러 및 예외가 발생할 수 있습니다. 이런 에러 및 예외 발생 시 전달하는 메시지에 KEY_ERROR가 대표적입니다. Request로 들어와야 하는 정보 가운데 누락된 key가 있을 때를 지칭하며 클라이언트가 키를 누락시켰다는 것은, request body라는 객체 안에 email 이라는 특정 키가 없는 것을 말합니다. .. 2023. 11. 23.
Error Handing 적용하기 1. Error Handing 적용하는 방법 이전 시간에는 Error Handing이 무엇인지 알아보았습니다. 이번 시간에는 Error Handing 적용하는 방법에 대해 살펴보겠습니다. 1️⃣ throw로 에러 던져보기 에러를 던지는 방법으로 throw가 있습니다. 이는 개발자가 작성하는 모듈에 발생 가능한 에러 상황에서 던지게 되며 상위 계층이나 호출하는 곳에 모듈의 에러를 감지할 수 있습니다. 아래는 에러를 던지는 기본적 방법입니다. 1) 동기함수에서 에러 던지기 // func.js function someFunc(someParam) { if (!someParam) { throw new Error('someError'); } // ...someFunc의 로직 return someParam; } mo.. 2023. 11. 19.
Error Handing에 대해서 1. Error Handing의 목적 & 의의 1️⃣ Error Handing 목적 소프트웨어는 의도에 맞게 잘 흘러가는 것이 좋겠지만, 항상 에러와 예외가 늘 발생하여 정상적인 사용이 막히게 됩니다. 에러가 발생하는 이유는 실행 환경, 사용자의 특성, 개발자의 실수 등 여러 가지 원인이 있습니다. 개발자는 사용자가 서비스를 이용하는 동안 발생할 수 있는 에러를 미리 사전에 예측하여, 이용자의 사용 흐름이 막히지 않도록 유도해야 합니다. 이런 과정을 Error Handing이라 합니다. 그러나 에러 발생율이 0%인 서비스는 존재하지 않습니다. 따라서, 예외 상황 및 에러가 발생할 경우 소프트웨어를 갑자기 종료하는 것이 아닌 에러가 발생했음을 알리고, 곧 서비스가 정상적으로 구동될 것을 안내하는 것이 좋습.. 2023. 11. 19.