공부 이야기
-
인증 방식 세 가지공부 이야기/그냥 찾아보는 공부 2025. 1. 5. 10:28
인증은 산소 같은 존재다.분명 사용하고 있는데 그 개념이 너무 아리송송하기 때문이다.인증 방식에는 세 가지가 있다.먼저 인증 정보를 어디서 관리하냐에 따라 세션 방식, 토큰 방식으로 구분할 수 있다.세션 방식은 서버의 DB에서 정보를 관리하는 방식이고클라이언트의 쿠키 저장소를 활용하는 방식이 토큰 방식이다.세션 방식은 매번 DB 조회를 하기 때문에 서버 부담이 될 수 있다.토큰 방식은 중간 공격자에 의한 보안 위험이 발생할 수 있다.마지막 방식은 OAuth로 네이버 로그인, 구글 로그인과 같이 제 3의 공증 기관을 통해 인증하는 방식이다.
-
Redis를 사용하는 이유 (웹)공부 이야기/REDIS 2025. 1. 5. 10:19
웹에서 레디스를 사용하는 진정한 이유는 Session 관리 때문이다.사용자(유저) 인증 방식에는 크게 1.Session 2.Token 방식이 있다.인증에서 필요한 데이터를 저장하는 공간으로 나눈 것인데서버에서 저장하는 방식이 Session이다.Session 방식에 사용되는 인증 데이터는 크기가 크진 않지만 빈번히 조회하는 특성을 가진다.크기가 크지 않은 탓에 DB로 분리 저장할 필요가 없으며 빠른 인증 처리를 하기 위해 redis를 쓰게 되는 것!
-
리눅스의 io_uring에 대해공부 이야기/그냥 찾아보는 공부 2024. 11. 17. 21:45
1. 리눅스의 Async I/O는 일반 I/O에서 발생하는 블로킹 문제를 해결해주긴 함2. 그 이유는 사용자가 파일 시스템에 데이터를 쏘면 커널이 별도의 메모리 공간을 할당해서 처리 응답을 저장하기 때문임3. 사용자는 커널이 대신 응답 처리를 해줄 때까지 기다릴 필요가 없음4. 하지만 사용자 공간, 커널 공간 두 곳 모두 동일한 메모리를 할당해야 하는 비효율이 생김5. 이를 해결하기 위해 io_uring은 사용자, 커널 양쪽 다 접근 가능한 공유 메모리 영역을 만들어 놓고 관리함6. 두 번 복사할 필요가 없음7. 이는 메모리 공간의 효율 향상뿐만 아니라 복사 행위에서 발생되는 CPU cost도 줄임8. 한편, 공유 메모리 영역에는 요청 원형 큐, 완료 원형 큐를 둠9. AIO는 요청이 발생할 때마다 시스..
-
[JS] Closure란?공부 이야기/그냥 찾아보는 공부 2024. 9. 15. 18:14
함수가 실행됐을 때의 스코프(컨텍스트)를 기억하는 기능을 뜻한다.여기서 '스코프'란 지역변수가 될 수 있다.무슨 의미인지 와닿지 않을 수 있기 때문에 아래 코드를 통해 설명하겠다.function createCounter() { let count = 0; return function() { count += 1; return count; };}const counter = createCounter();console.log(counter()); // 1console.log(counter()); // 2console.log(counter()); // 3 js는 다른 언어와 다르게 함수를 값을 취급해서 넘길 수 있다.함수를 값으로 취급했기 때문에 고차함수, 동적 처리, 콜백..
-
[Redis] Redis는 key expiration을 어떻게 관리할까?공부 이야기/REDIS 2024. 6. 9. 20:47
1. CPU가 1초마다 전체 키를 순회하면서 expire을 체크하는 방식일까? (Polling)2. 이 방법은 CPU 사용과 같은 자원 소모가 막심할 것으로 보인다.3. expire time이 설정된 키는 TTL(Time2Live) 값을 가진다.4. 이 값은 Secondary Hash Table에 저장된다.5. 키에 접근할 때 (GET), 해당 테이블에 값이 있는지 없는지 먼저 확인한다.6. 만약 만료되었다면, 키를 제거하고 nil을 반환한다.7. 즉, Redis가 1초마다 전체 키를 순회 및 체크하는 방식이 아닌, 만료용 보조 테이블을 통해 관리한다.8. 하지만 여기서 클라이언트가 해당 키에 단 한 번도 접근하지 않는다면?9. 만료가 되어도 키가 제거되지 않은 채 공간만 차지하고 있을 것이다.10. 이..
-
[Redis] 복수 개의 명령어를 한 번에 처리하는 Command - MULTI, EXEC, DISCARD, WATCH공부 이야기/REDIS 2024. 6. 9. 17:38
1. Redis는 Spring JPA의 Transactional 기능처럼 여러 개의 연속된 명령어를 하나의 명령어로 묶는 기능을 지원한다.2. 하나로 묶으면 중간에 다른 클라이언트의 요청을 차단할 수 있다.3. ACID의 원자성을 높일 수 있는 방법이지만 싱글 쓰레드 기반의 Redis에서는 신중하게 써야할 것 같다.4. 명령어> MULTIOK> INCR fooQUEUED> INCR barQUEUED> EXEC1) (integer) 12) (integer) 1- 시작은 MULTI 명령어로 시작한다. Redis 서버는 OK를 응답한다.- 지정한 명령어를 순차적으로 수행한다. Redis 서버는 Queued를 응답한다. 큐에 추가했다는 의미인 듯하다.- EXEC 명령어로 큐에 저장한 명령어를 호출한다. Redi..
-
[Redis] 데이터 타입 - Stream공부 이야기/REDIS 2024. 6. 6. 15:00
1. Periodical Data를 취급할 때 효과적인 데이터 타입- Periodical Data는 연속적인 주기를 갖는 데이터를 맨 마지막에 추가하는 특징이 있다.- Redis Stream 은 Append-Only 방식이다. Redis 5.0 버전에서 List를 사용해 Periodical Data를 처리했다고 한다.2. Redis는 각 스트림 항목에 대해 고유 ID를 생성한다.3. XADD 명령어로 스트림 데이터를 생성할 수 있다.XADD race:france * rider Castilla speed 30.2 position 1 location_id 1"1692632086370-0" # 생성된 ID로 시간+일련번호로 구성res1 = r.xadd( "race:france", {"rider": ..
-
[Redis] Keys * vs Scan공부 이야기/REDIS 2024. 6. 5. 12:52
1. Single Thread Event Loop 기반인 Redis는 한 번에 하나의 명령어만 처리할 수 있다.2. KEYS * 명령어가 실행되는 동안, Redis는 다른 클라이언트 요청을 처리할 수 없으며, 이는 서버 전체의 응답성을 저하시킬 수 있다.3. 한편, Scan은 cursor 기반으로 iterating을 수행하는데 한 번에 전체 키 공간을 스캔하지 않고, 작은 부분씩 순차적으로 스캔한다.4. 각 호출에서 SCAN은 현재 커서를 반환하며, 다음 호출에서 이 커서를 사용하여 스캔을 이어간다. 5. Scan은 명령어가 실행되는 중간에 다른 클라이언트 요청을 처리할 수 있기 때문에 Non-Blocking Operation이다.6. 따라서 Key에 대해 전체 조회 혹은 대량 조회를 할 경우엔 key..