[DevCamp - 2일차] 예시 코드 뜯어보기

sooyoung choi·2024년 3월 19일
0

내일배움캠프

목록 보기
19/19

예시로 받은 코드를 뜯어보고 전에 구현했던 내 방식에서 생각하지 못한 부분들 위주로 작성해보았다.

JWT 블랙리스트

  • 단순히 잘못된 토큰을 가진 정보들을 모아둔 것이라 생각했다.
  • 한번 발급한 jwt를 무효화할 방법이 없으니 로그아웃 해도 만료시간 전에 해당 토큰을 그대로 사용할 수 있는 문제를 해결하기 위한 방법
  • 지난 프로젝트에서는 따로 생각해보지 못한 부분

로그인시 접속 로그 저장의 이유?

  • 지금까지 프로젝트를 하면서 간과했던 부분
  • 사용자의 접속 로그를 모니터링하면 비정상적인 접근 시도나 패턴을 식별하여 보안 위협을 초기에 알 수 있으며, 시스템의 오류나 문제를 진단하는 데 도움을 주고, 사용자의 행동을 분석하여 사용자 경험을 개선하고, 맞춤형 콘텐츠나 광고 제공에도 쓰임
    또한 비즈니스 결정의 유용한 인사이트 제공하여 그에 맞는 전략 수립시에도 쓰임
  • request 객체에서 받을 수 있는 ip, endpoint, user agent를 활용하신걸로 보임
  • endpoint? -> 사용자가 어떤 작업을 수행하려고 했는지, 어떤 페이지나 리소스에 관심이 있는지
  • user agent? -> 사용자가 요청을 보낼 때 사용한 브라우저, 운영 체제, 장치 등에 대한 정보

argon2

  • 기존 비밀번호 해싱은 crypto나 bcrypt를 사용해왔음
  • argon2 는 암호를 해싱하는데 걸리는 시간이나 소요되는 메모리 양을 설정할 수 있게 설계되었고, 사용하는 목적에 맞게 파라미터 변경으로 적용이 가능
  • 키 유도 함수(key derivation function)
  • Argon2d, Argon2i, Argon2id 3종류이며 비밀번호 해싱에 적합한 것은 Argon2id

해싱처리

const hashedPassword = await argon2.hash(dto.password);

인증처리

 if (user && (await argon2.verify(user.password, plainPassword))) {
      return user;
    }

키 유도 함수?

  • 일정한 길이의 비밀 키를 생성하기 위해 비밀 비트 문자열(예: 비밀번호, 패스프레이즈)을 사용하는 암호학적 함수
  • 여러 다른 키도 생성 가능하며 복호화도 가능

메모리 사용량, 연산 시간, 병렬 처리 등 다양한 파라미터 조정과 보안이 어떠한 연관성이 있는지?

  • 메모리 사용량을 높이면 공격자가 동시에 많은 수의 해시를 계산하는 것이 더 어려워진다고 합니다.
    -> 대규모 병렬처리 이용 공격(GPU, ASIC 등) 저항력 강화
  • 연산 시간을 늘리면 해시를 계산하는 데 더 많은 시간이 소요
    -> 무차별 대입 공격에 대한 저항력 강화
  • 병렬 처리는 해시 계산 시 사용할 수 있는 병렬 쓰레드 수를 지정함으로써 수준을 높이면 해싱 수행시 많은 CPU 자원이 필요
    -> 비용 대비 효과적인 공격에 대한 어려움이 증가, 시간-메모리-트레이드오프(TMT, 해싱 과정에서 메모리와 시간 사이의 관계를 이용하는 공격) 공격에 대한 저항력 강화

처음 본 기술스택

  1. SWC(Speedy Web Compiler)
  • 기존에 알던 babel의 역할과 동일해보였으나 babel의 싱글 쓰레드의 속도 문제를 해결한 컴파일러로 작게는 몇 배, 크게는 몇 십 배나 빠른 성능을 자랑하는 빌드 도구
  • swc 사용의 이유를 정리하자면, 빠른 속도로 자바스크립트 코드를 트랜스파일 하거나 타입스크립트 컴파일을 위해
  1. Yarn berry + Plug'n'Play + Zero-Install
  • 각각의 프로그램인줄 알았으나 Plug'n'Play와 Zero-Install은 Yarn berry의 중요한 특징들이었음
  • Plug'n'Play (PnP)는 기존의 node_modules 폴더 방식 대신, PnP 방식을 도입하여 의존성을 관리
    -> 프로젝트의 부팅 시간 단축시키는 효과와 파일 시스템을 더 효율적으로 사용하게 해준다.
  • Zero-Installs의 개념은 프로젝트의 의존성 정보를 .yarn/cache에 저장하여, 다른 개발자와의 협업 시 의존성 설치 과정을 건너뛰게 해주는 것
    -> CI/CD 파이프라인에서의 빌드시간 단축의 효과가 있다.

0개의 댓글