나는 이렇게 학습한다/CS 9

Refrsh token을 구현하며 느낀 점

리프레시 토큰을 사용하는 이유 리프레시 토큰은 액세스 토큰을 재발급하기 위한 용도로 사용합니다. 간략하게 토큰 로그인 과정을 설명해보겠습니다. 유저의 로그인 상태를 유지하기 위해서 서버는 클라이언트에게 액세스 토큰을 줍니다. 클라이언트는 액세스 토큰을 가지고 서버와 통신을 하며 로그인 상태를 보장받습니다. 서버는 토큰을 따로 저장하지 않고 토큰에 담긴 유저 정보를 decode 하여 확인합니다. 즉, 토큰에 담긴 정보를 통해 해당 유저가 로그인 상태라는 것을 인지할 수 있습니다. 하지만 액세스 토큰은 외부에 노출되기 쉽습니다. 액세스 토큰은 빈번히 사용되고 토큰 안에 유저 정보가 있기 때문에 보안상 매우 취약합니다. 이를 해결하기 위해 서버는 액세스 토큰에 만료기간을 부여하여 만약 토큰이 노출되더라도 그 ..

로그인시 Access Token, Refresh Token 보내주기

액세스 토큰을 사용하는 이유 서버가 액세스 토큰을 클라이언트에게 주면 클라이언트는 매 요청시 액세스 토큰을 서버로 보내주어 로그인 상태을 알려줍니다. 이러한 방식은 HTTP의 무상태 특성을 보완하기 위한 한 가지 방법이지만 액세스 토큰을 주는 방식은 전달 과정에서 탈취 당할 우려가 있어 보안에 문제가 있습니다. 이를 해결하기 위해 토큰에 만료기간을 주어, 만약 탈취를 당하더라도 시간이 지나면 토큰을 사용할 수 없게 만들 수 있습니다. 하지만 이는 로그인 상태가 주기적으로 풀린다는 뜻이고 사용자에게 큰 불편을 줄 것입니다. 그래서 사람들은 리프레시 토큰을 생각해내었습니다. 리프레시 토큰으로 액세스 토큰 재발급 리프레시 토큰은 액세스 토큰이 만료되었을 경우 이를 확인하고 다시 액세스 토큰을 발급하는 방법입니..

HTTP(Hyper Text Transfer Protocol)를 알아보자

HTTP란? HTTP는 서버-클라이언트 모델을 따르면서 리퀘스트, 리스폰스 구조로 웹 상에서 정보를 주고받을 수 있는 프로토콜입니다. TCP/IP 기반으로 작동하며 가장 큰 특징은 connectionless(비연결)와 stateless(무상태)입니다. *리퀘스트 구조 : 스타트 라인(메서드, path, http버전), 헤더, 바디 *리스폰스 구조 : 스테이터스 라인(http버전, status code, status message), 헤더, 바디 '비연결', '무상태'라는 특성은 더 많은 요청을 효율적으로 처리할 수 있도록 돕지만 클라이언트의 상태를 저장하지 않기 때문에 이를 해결하기 위해 쿠키, 세션 등이 사용됩니다. 또한 http는 정보를 text형식으로 주고받으므로 데이터 유출을 막기 위해 암호화를 ..

TCP와 UDP 비교

TCP와 UDP는 무엇인가요? TCP는 연결형, 신뢰성 프로토콜입니다. 연결지향적이기 때문에 3-way handshaking을 하여 두 호스트의 전송 계층 사이를 논리적 연결으로 연결합니다. 신뢰성을 보장하기때문에 헤더가 더 크고 속도가 비교적 느립니다. UDP는 비연결형, 비신뢰성 프로토콜로 헤더가 작고 수신여부를 확인하지 않아 속도가 빠릅니다. 단, 데이터의 내용이나 순서 등의 신뢰성을 보장하지 못합니다. TCP, UDP는 TCP/IP 4계층에서 전송계층에 해당됩니다. TCP로 전송하는 패킷을 segment, UDP로 전송하는 패킷은 datagram이라고 합니다. 어디에 사용하나요? TCP는 신뢰성이 중요한 통신 HTTP, File 전송에 쓰이고, UDP는 실시간성이 중요한 통신인 동영상 스트리밍 등..

메모리 단편화를 해결하는 세 가지 방법

배경 키워드 프로세스는 독립된 메모리 공간을 갖는다. 독립된 메모리이기 때문에 다른 프로세스의 메모리 공간에 일반적으로 접근할 수 없다. 운영체제는 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 제약을 받지 않는다. Swapping은 메모리의 관리를 위해 사용되는 기법이다. 예를 들어 CPU 할당 시간이 끝난 프로세스의 메모리를 HDD 같은 보조 기억장치로 내보내고 다른 프로세스의 메모리를 불러 들일 수 있다. Swap-in은 주 기억장치(RAM)로 불러오는 과정 Swap-out은 보조 기억장치로 내보내는 과정 메모리 관리 문제 단편화(Fragmentation)는 메모리 적재 및 제거가 반복되면서 프로세스들이 차지하는 메모리 틈 사이에 사용하지 못할 만큼의 작은 자유 공간들을 의미한다. 단편화는 '..

동시성(병행성) vs 병렬성

동시성(Cuncurrency) 논리적 개념 at the same time (X) 동시성이란 스위칭으로 한 번에 여러 작업을 동시에 다루는 것을 의미 → 싱글 프로세스, 싱글 스레드가 스위칭을 하면서 여러 작업을 수행 → 멀티스레드도 스위칭하며 작업 가능 비유) 하나의 로봇이 왔다 갔다 하며 작업을 수행 (바운드될 때마다 스위칭) 병렬성(Parallelism) 물리적 개념 at the same time (O) 병렬성은 한 번에 여러 작업을 병렬적으로 처리하는 것을 의미 → 멀티 프로세스, 멀티 스레드를 통해 동시에 여러 작업을 수행 → 싱글 스레드는 불가능 비유) 여러 로봇이 동시에 각자 맡은 작업을 수행 유의할 점 동시성과 병렬성은 함께 공존할 수 있다. 예를 들어 병렬적으로 작업을 수행하면서 그 하위에..

컴퓨터 구조와 운영체제 기본

1. 컴퓨터 구성 요소 CPU 명령어를 해석하여 실행하는 장치 메모리 주메모리 : 작업에 필요한 프로그램과 데이터를 저장하는 장소(동적) 보조메모리 : 저장장치라고 불리며 데이터를 일시적 또는 영구적으로 저장하는 장소(정적) 입출력 장치 키보드, 마우스, 모니터 등 시스템 버스 컴퓨터 구성 요소들을 연결하고 데이터를 주고 받는 역할 2. 운영체제(OS) 정의 : 컴퓨터 시스템을 운영하고 관리하는 소프트웨어 운영체제가 없는 컴퓨터는 처음에 설계한 대로만 사용할 수 있는 단순한 계산기에 불과하다 운영체제가 있는 컴퓨터를 프로그램이 가능한 기계라고 한다 윈도우, 맥, 우분투, 리눅스 등 프로세스 프로그램 : 어떤 문제를 해결하기 위해 컴퓨터에게 주어지는 처리 방법과 순서를 기술한 일련의 명령문의 집합체 (일련..

동기 vs 비동기

동기란? 코드가 반드시 작성된 순서로 실행된다 요청 후 응답을 받지 못하면 바운드 상태를 유지한다 이전 요청에 대한 응답을 받아야만 다음 코드를 진행하므로 연산이 느려진다 예) 주문 받은 순서대로 처리한다. 앞선 주문이 완료되지 않으면 다음 주문으로 넘어가지 않는다 비동기란? 코드가 반드시 작성된 순서로 실행되는 것이 아니다 요청 후 응답을 받지 못해도 바운드 없이 다음 코드를 수행한다 이전 요청에 대한 응답을 기다리지 않으므로 동기보다 더 빠르게 연산이 가능하다 예) 주문을 수행하지만 완료되지 않아도 다음 주문을 진행한다 무조건 비동기가 좋을까? 단순한 계산은 비동기로 구현할 경우 코드가 복잡해지고 유지보수가 어려워질 수 있다 다음 단계로 넘어가면 안되는 계산이라면 동기로 구현하자 동기 비동기 비교를 ..

CPU 바운드와 I/O 바운드

CPU 바운드 연산을 많이 해서 cpu가 막는 행위 프로그램이 실행될 때 실행 속도가 cpu 속도에 의해 제한됨을 의미함 정말 복잡한 수학 수식을 계산하는 경우에 컴퓨터의 실행속도가 느려진다 I/O 바운드 I는 인풋, O는 아웃풋 프로그램이 실행될 때 실행 속도가 I/O에 의해 제한됨을 의미함 사용자가 입력을 해야 다음 단계가 진행되는 경우 네트워크 I/O : 컴퓨터와 컴퓨터끼리 통신을 할 때 블로킹 : 바운드에 의해 코드가 멈추게 되는 현상 # 실습 코드 : 구글에 요청을 반복한다면? # pip3 install requests import requests def func(): result = requests.get("") return result for i in range(10): result = fu..