분류 전체보기 210

23.08.23 리프레시 토큰 (Refresh Token)

레디스 클라우드로 연결은 끝났다 그럼 이제 리프레시 토큰을 발급하고 이것을 레디스에 저장해야 한다. 토큰을 그럼 어떤 경우에 사용할까? 당연히 로그인했을 때 처음 발급 된다. 로그아웃을 한다면 토큰을 지워줘야 한다. 엑세스 토큰이 만료된 경우에 리프레시 토큰을 통해서 다시 재발급한다. 이때 액세스 토큰을 발급하는 API를 만들 수도 있지만 매번 새로운 엑세스 토큰을 발급받기 위한 과정이 불필요해 보인다. 한 번에 처리하는 방법이 없을까? 그래서 기존 토큰을 확인하던 미들웨어에서 토큰을 재발급하게 바꿨다. 회원 탈퇴를 할 경우에 탈퇴한 회원이기에 접근을 막기 위해 토큰을 지울 필요가 있다. 회원 가입을 하고 따로 로그인을 하는 것보다 바로 로그인이 되는 게 더 편할 것 같다. 회원가입 완료 시 로그인처럼 ..

23.08.22 레디스 클라우드(Redis Cloud)

진행 중인 프로젝트가 회원가입을 하고 로그인을 해야 서비스를 이용할 수 있었다. 그래서 사용자 인증을 무엇으로 하냐 고민을 했을 때 토큰이 더 적합해 보였다. 서버의 성능이 좋지 않다. 그런데 세션을 사용할 경우 서버에 성능이 더 저하될 가능성이 있다. 모바일 환경을 타겟으로 하는데 모바일에선 백그라운드에서 연결이 종료 되는 경우가 많다. 그래서 토큰을 이용하는데 이 때 토큰의 가장 큰 단점인 탈취 문제가 생긴다. 이를 해결하기 위해서 리프레시 토큰 로테이션 전략을 사용하려는데 리프레시 토큰을 서버에서 가지고 있을 수 있는 공간이 필요했다. 그래서 처음에는 사용자 정보가 있는 테이블에 같이 저장하려 했으나 로테이션 전략으로 인해서 사용한 리프레시 토큰을 바꿔줘야 하고 리프레시 토큰의 유효 기간이 지나도 ..

23.08.20 레디스 (Redis)

Redis (Remote Dictionary Server)는 오픈 소스 인메모리 데이터 구조 저장소로, 데이터베이스, 캐시, 메시지 브로커로 사용할 수 있습니다. 문자열, 세트, 해시, 리스트, 비트맵 등 다양한 데이터 구조를 지원합니다. 높은 성능, 확장성, 다양성으로 널리 알려져 있습니다. 작동 원리 및 구조 인메모리 저장소: Redis는 주 메모리(RAM)에 모든 데이터를 저장합니다. 이는 디스크 I/O를 피하고 데이터에 대한 빠른 액세스를 가능하게 합니다. 단일 스레드 이벤트 루프: Redis는 단일 스레드와 비동기 I/O를 사용합니다. 모든 명령은 단일 스레드의 이벤트 루프에서 실행되며, 이로 인해 CPU 바운드 작업에서는 병목 현상이 발생할 수 있습니다. Key-Value 저장: 기본적으로, ..

23.08.19 쓰레드(thread)

쓰레드(thread)는 컴퓨터 프로그래밍과 운영체제에서 사용되는 기초 개념입니다. 쓰레드는 프로세스(process) 내에서 실행되는 작은 단위로, 한 프로세스 안에는 하나 이상의 쓰레드가 있을 수 있습니다. 각 쓰레드는 자신만의 레지스터, 스택, 프로그램 카운터 등을 가지며, 메모리와 파일, 그 외 자원들은 프로세스 내의 다른 쓰레드와 공유됩니다. 쓰레드의 특징 가벼움: 쓰레드는 프로세스에 비해 생성과 제거가 빠르고, 적은 자원을 사용합니다. 자원 공유: 같은 프로세스 내의 쓰레드들은 코드, 데이터, 힙 영역 등을 공유합니다. 응답성 향상: 하나의 작업이 지연될 때, 다른 쓰레드가 독립적으로 실행될 수 있습니다. 멀티코어 활용: 멀티코어 프로세서에서는 여러 쓰레드가 동시에 실행될 수 있어 성능이 향상됩니..

23.08.18 프로세스 (Process)

프로세스는 컴퓨터에서 실행 중인 프로그램의 인스턴스를 말합니다. 프로그램은 디스크에 저장된 실행 가능한 파일이며, 이 프로그램을 실행하면 운영 체제는 새로운 프로세스를 생성하여 해당 프로그램을 실행합니다. 각 프로세스는 독립적인 실행 환경을 가지며, 다른 프로세스와는 분리되어 실행됩니다. 여기서 프로세스의 주요 특징과 관련 정보를 설명하겠습니다. 프로세스의 특징: 독립성: 각 프로세스는 서로 독립된 실행 환경을 갖습니다. 한 프로세스의 문제가 다른 프로세스에 영향을 주지 않습니다. 메모리 공간: 프로세스는 자신만의 가상 메모리 공간을 가집니다. 이로 인해 각 프로세스는 서로의 데이터에 직접 접근할 수 없습니다. 코드, 데이터, 스택: 프로세스는 실행 코드, 데이터, 스택 등 여러 영역을 포함하는 메모리 ..

23.08.17 OAuth

OAuth (Open Authorization)는 사용자가 하나의 서비스 (예를 들어, Google 또는 Facebook)의 자격 증명을 사용하여 다른 서비스에 로그인할 수 있도록 하는 표준 인증 프로토콜. 이는 사용자가 각각의 서비스에 대해 별도의 아이디와 비밀번호를 만들 필요가 없도록 해 준다. 또한, OAuth는 사용자가 특정 서비스에 다른 서비스의 일부 기능에 접근할 수 있게 허가할 수 있는데 예를 들어, 사용자가 트위터 계정에 연결된 앱에게 트윗을 작성하거나 팔로워 목록을 볼 수 있는 권한을 부여할 수 있다. OAuth의 주요 개념 1. Resource Owner: 리소스(데이터, 기능 등)의 소유자, 일반적으로 사용자입니다. 2. Resource Server: 리소스를 호스팅하는 서버, 예를 ..

23.08.16 RDBMS와 No SQL

RDBMS (관계형 DB): 정해진 데이터 스키마에 따라 테이블에 데이터가 저장이 되고, 데이터는 관계를 통해서 분산되어 저장된다. 장점은 정해진 스키마로 인해서 데이터의 무결성이 보장되고 각 데이터를 관계를 통해 중복 없이 저장할 수 있다. 즉 정해진 데이터 공간을 효율적으로 활용할 수 있다. 하지만 스키마를 미리 정해야하고 관계가 되어있는 데이터들 간에 조인으로 인해 쿼리문이 복잡해질 수 있다. 대표적으로는 MySQL, PostgreSQL NoSQL(비관계형 DB) : SQL을 제외한 모든 방식의 DB이다. SQL과 반대로 데이터 간의 관계가 없고 다른 자료구조를 같은 컬렉션에 추가할 수 있다. 그래서 장점은 일반적으로 속도가 빠르고 데이터의 형식이 비교적 자유롭지만 그로 인해 데이터가 중복될 수도 ..

23.08.15 아키텍쳐 설계

아키텍쳐 설계에 대한 자세한 내용을 알기 전에 일단은 전체적인 내용과 개념에 대해서 이해하기 위해서 정리한 것이다. 이를 통해서 적어도 내가 어떻게 프로젝트를 설계했는지 설명할 수 있어야겠다. 그리고 더 공부를 해서 여러 방법들을 참고하고 장단점을 비교하거나 보완해서 보다 효율적인 설계를 할 수 있어야할 것이다. 집짓기에 비유 요구 사항 수집 및 분석: 집을 지을 때 필요한 방의 개수, 크기, 기능 등을 정합니다. 이는 집의 거주자가 원하는 스타일과 필요로 하는 기능을 이해하는 과정과 유사합니다. 시스템 분해: 큰 집을 주방, 거실, 침실 등의 각 구역으로 나눕니다. 각 구역이 어떤 역할을 하는지 결정합니다. 구성 요소 선택: 어떤 재료(벽돌, 목재, 철근 등)를 사용할 것인지 결정합니다. 통신 및 인터..

23.08.14 passport.js

Passport.js는 Node.js 애플리케이션에서 사용되는 인증 미들웨어. 사용자 인증을 구현하기 위한 간단하고 유연한 도구를 제공. 즉, 인증 처리를 대신해주고 개발자는 인증 이후 처리에만 집중할 수 있게 해 준다. 주요 특징: 유연성: Passport.js는 "전략"이라는 개념을 도입함으로써 다양한 인증 방법을 지원. 개발자는 애플리케이션에 필요한 전략만 선택하여 사용하면 된다. 450가지 이상의 전략: 로컬 인증(이메일/비밀번호)부터 Facebook, Google, Twitter와 같은 OAuth 기반 인증까지 수많은 전략이 커뮤니티에 의해 제공하기에 참고할 자료가 많다. 세션 관리: 사용자가 로그인할 때, Passport는 세션에 사용자 정보를 저장하여 이후의 요청에서도 인증 상태를 유지할 수..