목록분류 전체보기 (51)
GiYeong

JWT : Token OAuth : Framework OAuth Framework를 통해 생성된 OAuth Bearer token은 사용자의 정보와 같은 중요한 정보가 있는 토큰이 아니다. 이는 일종의 포인터로서 OAuth Framework를 통해 해당 정보가 저장되어있는 주소를 확인할 수 있는 역할을 한다. 반대로 JWT Token은 명확한 정보를 가지고 있다. 때문에 가지고있는 속성 정보에따라 크기가 가변적이며, 이로인해 데이터베이스에서 사용자의 정보를 조작하더라도 토큰에 직접 적용할 수 없는 문제점이 있고, 토큰의 크기가 커지면 데이터 트래픽에 영향을 미칠 수 있는 단점이 있다.

JWT JWT는 유저를 인증하고 식별하기 위한 토큰(Token)기반의 인증 방식이다. 토큰은 서버가 아닌 클라이언트에 저장되기 때문에 메모리나 스토리지 등을 통해 세션을 관리했던 서버의 부담을 덜 수 있다. 토큰 자체에 사용자의 권한 정보나 서비스를 사용하기 위한 정보가 포함되어 있기 때문에, 데이터가 많아지면 토큰이 커질 수 있으며, 토큰이 한 번 발급된 이후 사용자의 정보를 바꾸더라도 토큰을 재발급하지 않는 이상 반영되지 않는다. JWT를 통해 RESTful과 같은 무상태(Stateless)인 환경에서 사용자 데이터를 주고받을 수 있게 된다. 즉, JWT와 같은 토큰을 클라이언트에 저장하고, 요청 시 단순히 HTTP 헤더에 토큰을 첨부하는 것으로 단순하게 데이터를 요청하고 응답을 받을 수 있다. 동작..

단방향 암호화 암호화를 수행하고 나온 데이터를 다시 원래의 데이터로 변환할 수 없는 암호화 방식으로 복호화가 불가능하다는 의미이다. 단방향 암호화로 가장 많이 알려져있는 알고리즘으로는 해시(Hash) 알고리즘이 있다. 이를 통해 데이터의 무결성을 검증할 수 있다. Hash 알고리즘 임의의 크기를 가진 데이터를 고정된 데이터의 크기로 변환시키는 알고리즘으로, 동일한 값이 입력되면 언제나 동일한 출력 값을 보장한다. MD5 알고리즘 임의의 길이의 메시지를 입력받아 128비트의 고정 길이의 값을 출력한다. 입력 메시지에 길이 제한이 없으며, 주로 프로그램이나 파일이 원본 상태 그대로인지 확인하는 무결성 검사등에 사용되지만 보안 관련 용도로 권장하지 않는다. SHA(Secure Hash Algorithm) 알고..

대칭키 암호화 방식 암복호화에 사용하는 키가 동일한 암호화 방식이다. 장점 공개키 암호화 방식에 비해 속도가 빠르다. 단점 안전한 키 교환 방식이 요구된다. 사람이 증가할수록 전부 따로따로 키 교환을 해야하기 때문에 관리해야하는 키가 많아진다. 비대칭키(공개키) 암호화 방식 암복호화에 사용하는 키가 서로 다른 암호화 방식으로, 송수신자 모두 한쌍의 키(개인키, 공개키)를 가지게 된다. 대칭키 암호화 방식의 키 교환 문제를 해결하기 위해 등장한 방식으로, 공개키는 모든 사람이 접근 가능한 키이고, 개인키는 각 사용자만이 가지고 있는 키이다. A가 B에게 데이터를 보낸다고 가정할 때, A는 B의 공개키를 통해 암호화한 데이터를 보내고 B는 B의 개인키로 암호화된 데이터를 복호화하기 때문에 암호화된 데이터는 ..

캐시 메모리 속도가 빠른 장치와 느린 장치 간의 속도 차이로 인한 병목 현상을 줄이기 위한 범용 메모리로서, 주기억장치에서 자주 사용하는 프로그램이나 데이터를 저장하여 처리속도를 빠르게 해준다. 캐시 메모리와 주기억장치 사이에서 정보를 옮기는 것을 매핑(Mapping)이라고 하며 직접 매핑(Direct Mapping), 연관 매핑(Associate Mapping), 집합 연관 매핑(Set Associate Mapping)이 있다. 직접 매핑(Direct Mapping) : 주기억장치의 블록들이 지정된 한 개의 캐시 라인으로만 매핑되는 방법으로, 간단하고 구현하는 비용이 적지만 캐시 적중률이 낮아질 수 있다. 연관 매핑(Associate Mapping) : 직접 매핑 방식의 단점을 보완한 방식으로, 모든 ..

물리적 메모리 크기의 한계를 극복하기 위해 나온 기술로, 프로세스를 실행할 때 실행에 필요한 일부만 메모리(주기억장치)에 로드하고 나머지는 디스크(보조기억장치)에 두는 것이다. 즉, 보조기억장치의 일부를 주기억장치처럼 사용하는 것이다. 현재 가동되고 있는 프로세스의 내용 중, 덜 중요한 것들은 디스크 공간에 옮겨 놓고, 프로세스가 동작하면서 메모리에 필요한 데이터가 없으면 디스크에서 이를 가져오는 방식이다. 이를 통해 프로세스 전체가 물리적 메모리에 있는 것처럼 수행된다.

Starvation 특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당 받지 못하는 상태 Deadlock은 여러 프로세스가 동일 자원에 대한 점유를 요청할 때 발생하고, Starvation은 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때 발생한다. 해결방법 프로세스의 우선 순위를 수시로 변경하여 각 프로세스마다 높은 우선 순위를 가질 수 있는 기회를 준다. 오래 대기한 프로세스의 우선 순위를 높인다. 우선 순위가 아닌 요청한 순서대로 처리하는 Queue를 사용한다.

Deadlock 운영체제에서 데드락이란 시스템 자원에 대한 요구가 뒤엉킨 상태이다. 즉, 한 프로세스가 점유하고 있는 자원을 다른 프로세스에서 기다릴 때 무한 대기에 빠지는 상황을 말한다. Deadlock 발생조건 상호 배제 : 한 번에 프로세스 하나만 해당 자원을 사용할 수 있다. 사용 중인 자원을 다른 프로세스가 사용하려면 해당 자원이 해체될 때까지 대기해야 한다. 점유 대기 : 자원을 최소 하나 보유하고, 다른 프로세스에 할당된 자원을 점유하기 위해 대기하는 프로세스가 존재해야 한다. 비선점 : 이미 할당된 자원은 강제로 뺏을 수 없다. 대기 프로세스의 집합이 순환 형태로 자원을 대기하고 있어야 한다. Deadlock 해결법 데드락 발생 예방 데드락 발생 가능성을 인정하고 적절하게 회피 데드락 발생..

Thread Safe Thread Safe하다는 것은 멀티 스레드 프로그래밍에서 어떤 메서드나 변수, 객체가 여러 스레드로부터 동시에 접근이 이루어지더라도 실행에 문제가 없음을 의미한다. 즉, 어떤 메서드 또는 변수, 객체가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드에서 이를 호출하여 동시에 실행되더라도 각 스레드에서 실행 결과가 올바르게 나오는 것이다. 1. MUTEX를 이용한 동기화 방법 2. SEMAPHORES를 이용한 동기화 방법

동기(Syschronous) 데이터의 요청과 결과가 한 자리에서 동시에 일어나는 것으로, 요청을 하면 반드시 요청한 자리에서 결과가 주어져야 한다. 즉, 요청을 보낸 후, 응답을 받아야지만 다음 동작이 이루어지는 방식으로서, 설계가 간단하고 직관적이지만 모든 작업이 순차적으로 실행되며 어떤 작업이 수행중이라면 다음 작업은 대기해야 한다. 비동기(Asynchronous) 동시에 일어나지 않는다는 의미로서, 요청과 결과가 동시에 일어나지 않는다. 동기 방식보다 설계가 복잡하지만, 결과가 주어지는데 시간이 걸리더라도 해당 시간 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 잇다. 블록(Block) 호출된 함수가 자신의 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 re..