분류 전체보기(13)
-
멀티태스킹, 멀티프로그래밍, 타임쉐어링, 멀티프로세싱 알아보기
유니프로그래밍(단일프로그래밍) 항상 컴퓨터 내에서는 하나의 프로세스만이 실행되며, 프로세스가 종료되어야 다음 프로세스가 실행될 수 있는 형태의 시스템이다. 프로그램이 실행되기 위해서는 반드시 메모리에 올라와야 하며, 따라서 유니프로그래밍 시스템에서는 메모리에 단 하나의 프로그램만 올라오게 된다. 위와 같이 한 프로그램이 끝나야만 다음 프로그램이 실행될 수 있으므로 프로세스가 I/O 작업 등으로 인해 멈추게 되면 그 동안 CPU는 아무런 작업을 하지 않게 된다. 이로 인해 유니프로그래밍 시스템은 CPU 사용률(Utilization)이 좋지 않다. 멀티태스킹 특정 프로세스가 실행할 수 없는 상태가 되었을 때, CPU가 대기하지 않고 곧바로 다른 프로세스를 실행하도록 하여 CPU 사용률을 높일 수 있다. 이렇..
2024.03.27 -
인증 알아보기 (JWT)
토큰 기반 인증 이전 글에서 살펴본 세션을 사용하는 인증은 scale out 환경에서 처리가 복잡해진다는 문제가 있었다. 토큰 기반의 인증을 사용하면 이러한 문제점을 해결할 수 있다. 세션 기반 인증은 인증 정보를 서버에 저장하는 방식으로 구현되지만, 토큰 기반 인증은 쿠키와 비슷하게 인증 정보를 클라이언트가 가진다. 인증 정보는 토큰의 형태로 쿠키 혹은 브라우저의 로컬 스토리지에 저장된다. 토큰 기반 인증에서는 사용자가 가진 토큰을 HTTP의 Authorization 헤더에 실어서 보낸다. 우선 Authorization 헤더에 대해 좀 더 알아보자. HTTP 인증 프레임워크 HTTP 인증 프레임워크는 RFC 7235에 정의되어 있다. HTTP에서 인증은 일반적으로 다음과 같이 동작한다. 서버는 클라이언..
2024.02.18 -
인증 알아보기 (쿠키와 세션)
인증(Authentication)과 인가(Authorization) ✔️ 인증 (Authentication) 식별 가능한 정보를 이용하여 서비스에 등록된 유저의 신원을 입증하는 과정을 의미한다. 쉽게 말해서 로그인이다. ✔️ 인가 (Authorization) 인증된 사용자에 대해서 요청에 대한 권한을 확인하는 과정을 의미한다. 인스타그램을 예시로 들면, 내가 작성한 피드를 수정하는 것은 가능하지만 다른 사람의 피드는 내가 수정할 수 없다. 이는 다른 사람의 피드를 수정할 권한이 없기 때문인데, 이를 인가되지 않았다고 한다. HTTP 프로토콜의 특징 ✔️ 무상태성(Stateless) 서버는 클라이언트의 HTTP 요청 정보를 저장하지 않는다. 클라이언트가 요청을 여러번 보냈다고 하더라도, 각 요청들의 맥락이..
2024.02.17 -
InnoDB 알아보기 (On-Disk Structures - DoubleWriteBuffer)
Doublewrite Buffer MySQL이 비정상적으로 종료되었을 때, 버퍼 풀에서 플러시되었으나 데이터 파일에 일부만 기록된 데이터들이 생길 수 있다. (이들을 Partial-page 혹은 Ton-page 라고 한다.) InnoDB는 이러한 오작동으로 인한 데이터 손실을 방지하기 위해, 버퍼 풀의 더티 페이지를 데이터 파일에 쓰기 전에 한곳에 모아서 저장한 후(백업용도), 버퍼 풀의 더티 페이지를 데이터 파일로 쓰기 시작한다. 이때 데이터 파일에 쓰기 전 모아서 저장되는 영역을 Doublewrite Buffer라 한다. 즉 Doublewrite Buffer는 버퍼 풀에서 플러시된 데이터 페이지를 실제 데이터 파일에 쓰기 전에 저장하는 영역이다. ✔️ 작동 방식 위는 버퍼 풀에 존재하는 더티 페이지(..
2024.02.03 -
Spring Redis에 Transaction 적용하기
Redis Transaction 레디스에서는 트랜잭션을 지원하기 위해 다음 명령어를 지원한다. MULTI: 트랜잭선을 시작한다. 이후 들어오는 명령어는 곧바로 처리되지 않고 queue 쌓인다. EXEC: 커밋과 같다. queue에 쌓인 명령어를 일괄적으로 실행한다. DISCARD: 롤백과 같다. queue의 명령어를 일관적으로 버린다. WATCH: Lock과 동일한 역할을 한다. (낙관적 락 방식) 프로젝트 설정 ✔️ dependencies dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-da..
2024.02.03 -
Spring Data Redis 알아보기 (TTL 설정하기)
Redis Repository 설정 ✔️ dependency implementation 'org.springframework.boot:spring-boot-starter-data-redis' ✔️ application.yml spring: data: redis: host: localhost port: 6379 @RedisHash Redis Repository에 저장할 객체는 @RedisHash를 통해 설정할 수 있다. @RedisHash가 붙은 객체는 Redis에 hash 형태로 저장된다. 이때 value 속성을 통해 redis key의 prefix 를 지정해 줄 수 있다. import jakarta.persistence.Id; import lombok.Getter; import org.springfra..
2024.02.03