From ae6088e0e76e05678e220a63841d964e70c5b287 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=A0=95=EC=9C=A4?= Date: Sun, 19 Dec 2021 10:44:34 +0900 Subject: [PATCH 1/4] =?UTF-8?q?create:=20[OS]=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EB=9E=A8=20vs=20=ED=94=84=EB=A1=9C=EC=84=B8=EC=8A=A4?= =?UTF-8?q?=20vs=20=EC=8A=A4=EB=A0=88=EB=93=9C=20(#9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...s \354\212\244\353\240\210\353\223\234.md" | 147 ++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 "OS/\355\224\204\353\241\234\352\267\270\353\236\250 vs \355\224\204\353\241\234\354\204\270\354\212\244 vs \354\212\244\353\240\210\353\223\234.md" diff --git "a/OS/\355\224\204\353\241\234\352\267\270\353\236\250 vs \355\224\204\353\241\234\354\204\270\354\212\244 vs \354\212\244\353\240\210\353\223\234.md" "b/OS/\355\224\204\353\241\234\352\267\270\353\236\250 vs \355\224\204\353\241\234\354\204\270\354\212\244 vs \354\212\244\353\240\210\353\223\234.md" new file mode 100644 index 0000000..68a1160 --- /dev/null +++ "b/OS/\355\224\204\353\241\234\352\267\270\353\236\250 vs \355\224\204\353\241\234\354\204\270\354\212\244 vs \354\212\244\353\240\210\353\223\234.md" @@ -0,0 +1,147 @@ +# 프로그램, 프로세스, 스레드 + +## 프로그램(Programe)이란? + +- **특정 작업을 수행하기 위해** 작성된 일련의 지침을 포함하는 **실행 파일** + +- 컴퓨터의 주 메모리에 저장되지 않고, 디스크 또는 컴퓨터의 **보조 메모리에 저장**된다. + +- 프로그램은 주 메모리에서 읽고 커널에 의해 실행된다 + + ex) chrome.exe (웹 페이지 보기), notepad.exe (텍스트 파일 편집) + +- **특징** + - **수동적(정적) 개체(passive entity)**. 실행할 명령어 그룹 저장. + - 수동으로 **삭제할 때까지 메모리에 저장**된다. + - 프로그램은 **실행 없이 어떤 작업도 수행 불가능.** + +## 프로세스(Process)란? + +> program is in execution (실행 중인 프로그램) + +- 메모리에 올라와 **실행되고 있는 프로그램의 인스턴스(독립적인 개체)** + +- 프로그램이 실행되는 실행 단위 + +- 프로그램 실행 중에 생성되어 **주 메모리에 load**된다. + + ex) google 크롬 아이콘을 더블 클릭하면 크롬 프로그램을 실행하는 프로세스가 시작된다. + +- **특징** + + - **능동적(동적) 개체(active entity)**. 응용 프로그램의 목적을 수행함 + - **수명이 매우 제한적**. 작업이 완료되면 종료된다. + - 프로세스에는 파일 디스크립터(file descriptors), 네트워크 포트와 같은 **시스템 자원이 할당**된다. + - 여러 프로세스가 동일한 프로그램과 관련될 수 있다.
ex) 메모장 프로그램의 여러 인스턴스 실행 가능 (각 인스턴스 = 프로세스) + - 프로세스에 대한 정보는 **PCB(Process Control Block)**에 저장된다. + +### PCB(Process Control Block) + +> 특정 프로세스에 대한 중요한 정보를 저장하고 있는 운영체제의 자료구조 + +- 사용자가 프로세스를 생성할 때마다 운영체제는 해당 프로세스에 해당하는 PCB를 생성한다. + +- **[PCB]에 저장되는 정보** + +| 이름 | 정의 | +| -------------------------------------- | ------------------------------------------------------------ | +| 프로세스 식별자 (Process-Id, PID) | 프로세스 식별 번호 | +| 프로세스 상태 (Process state) | new, ready, running, waiting, terminated 등의 상태를 저장 | +| 프로세스 우선순위 (Process Priority) | 수명, 소비한 자원 등으로 우선순위 나눔
숫자 값이 작을수록 해당 프로세스의 우선 순위 증가 | +| 회계정보 (Accounting Information) | 사용된 CPU 양과 시간, 시간 제한, 계정 번호 등 제공 | +| 프로그램 카운터 (Program Counter, PC) | 프로세스가 다음에 실행할 명령어의 주소 저장 | +| CPU 레지스터 (CPU Registers) | 인터럽트 발생 or 프로세스 간 문맥 교환 발생 시 임시 정보 저장. | +| PCB 포인터 (PCB Pointers) | 프로세스 상태가 ready인 다음 PCB 주소 저장 | +| 열린 파일 목록 (List of Open Files) | 프로그램이 실행되는 동안 필요한 모든 파일 정보 저장 | +| I/O 상태 정보 (I/O status Information) | 프로세스에 할당된 입출력 장치 목록 저장 | + +## 프로세스 상태 (Process State) + +![프로세스_상태도](https://github.com/KJY97/Note/blob/main/img/OS/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4_%EC%83%81%ED%83%9C%EB%8F%84.png?raw=true) + +- **New** : 프로세스가 생성중인 상태 + +- **Running** : CPU를 잡고 명령어(instruction)를 수행중인 상태 +- **Ready** : CPU를 기다리는 상태 (다른 조건을 다 만족하고 CPU만 얻으면 되는 상태를 의미) +- **Blocked(wait, sleep)** : CPU를 주어도 당장 명령어(instruction)을 수행할 수 없는 상태 + - Process 자신이 요청한 event(예: I/O)가 즉시 만족되지 않아 이를 기다리는 상태 + - ex) 디스크에서 file을 읽어와야 하는 경우 +- **Terminated** : 수행(execution)이 끝난 상태 + +## 프로그램과 프로세스 차이점 + +| | 프로그램 | 프로세스 | +| --------- | ------------------------------------------------ | -------------------------------- | +| 정의 | 프로그래밍 목표를 달성하기 위해 정렬된 작업 그룹 | 프로그램이 실행 중 | +| 상주 위치 | 디스크 or 보조 메모리 | 주 메모리 | +| 개체 유형 | 정적, 수동적 개체(passive entity) | 동적, 능동적 개체(active entity) | +| 자원 관리 | 명령어 저장을 위한 메모리만 필요 | 리소스 요구사항이 매우 높음 | +| 수명 | 수명이 길다. (삭제 전까지 저장됨) | 수명이 짧고 매우 제한적 | + + + +## 스레드(Thread) + +> 프로세스 내의 실행 흐름 + +![스레드](https://i0.wp.com/javaconceptoftheday.com/wp-content/uploads/2014/11/ThreadsAndProcesses.png?w=1200) + +- 프로세스의 **실행 가능한 가장 작은 단위** + +- 프로세스는 동시에 실행되는 여러 스레드를 가질 수 있다. + + - 이러한 프로세스를 경량 프로세스(Lightweight Process) 라고도 부른다. + +- **분류** + + | User Threads | Kernal Threads | + | ----------------------- | --------------------- | + | 사용자에 의해 구현 | OS에 의해 구현 | + | 구현이 쉬움 | 구현 복잡 | + | 종속 스레드로 설계 | 독립 스레드로 설계 | + | 문맥 교환 시간이 짧음 | 문맥 교환 시간이 길다 | + | 하드웨어 지원 필요 없음 | 하드웨어 지원 필요 | + +### 멀티 스레딩 + +**하나의 프로세스를 다수의 실행 단위로 구분**하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 **수행 능력을 향상시키는 것** + +- 즉, 하나의 프로그램에 동시에 여러개의 일을 수행할수 있도록 해주는 것 +- 하나의 프로세스 내 **메모리와 자원을 공유**한다. +- 메모리의 **code, data, heap 영역은 공유**하고, **stack과 PC 레지스터는 따로 할당**받는다. + - **각 스레드는 독립적으로 수행**되어야 하기 때문. +- **장점** + - **응답시간 단축** : 여러 스레드로 분할되면 하나의 스레드가 실행을 완료될 때 즉시 출력 반환 가능 + - **빠른 통신** : 동일한 메모리 영역을 공유해서 여러 쓰레드 간 통신이 원활함 + - **빠른 문맥 교환** : 프로세스에 비해 캐시 메모리를 비울 필요가 없기 때문. + - **시스템 처리량 향상** : 각 스레드 기능을 하나의 작업으로 간주하면서 단위 시간당 완료되는 작업 수 증가함 +- **문제점** + - **동기화 문제** + - 공유하는 자원에 동시에 접근하는 경우, 프로세스와 달리 **데이터와 힙 영역**을 공유하기 때문에 어떤 쓰레드가 다른 쓰레드에서 사용중인 변수나 자료 구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다. 따라서 동기화가 필요! + - 동기화를 통해 작업 처리 순서와 공유 자원에 대한 접근을 컨트롤할 수 있다. 그러나 불필요한 부분까지 동기화를 하면 과도한 lock으로 인해 병목 현상이 병목 현상이 발생해 성능 저하 가능성 높다. + - 구현이 어려움 + - 테스트, 디버깅하기 어려움 + - 하나의 스레드의 문제가 발생하면 전체 프로세스에 영향을 끼침 + +## 프로세스와 스레드 차이점 + +| | 프로세스 | 스레드 | +| -------------- | ------------------ | -------------------------------------- | +| 정의 | 프로그램이 실행 중 | 프로세스의 세그먼트 | +| 프로세스 타입 | 중량 프로세스 | 경량 프로세스 | +| 종료 시간 | 많은 시간 소요 | 적은 시간 소요 | +| 생성 시간 | 많은 시간 소요 | 적은 시간 소요 | +| 문맥 교환 시간 | 많은 시간 소요 | 적은 시간 소요 | +| 메모리 공유 | 비공유 | 공유. 단, stack과 PC 레지스터는 비공유 | + + + +## Reference + +- https://javaconceptoftheday.com/differences-between-program-vs-process-vs-threads/ +- https://www.guru99.com/program-vs-process-difference.html#3 +- https://binaryterms.com/process-control-block-pcb.html +- https://www.geeksforgeeks.org/thread-in-operating-system/?ref=lbp +- https://www.guru99.com/difference-between-process-and-thread.html +- https://goodgid.github.io/What-is-Multi-Thread/ + From 9f9cd023f3b10e0576a5a89a54e187e6440c732e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=A0=95=EC=9C=A4?= Date: Sun, 26 Dec 2021 17:28:01 +0900 Subject: [PATCH 2/4] =?UTF-8?q?update:=20[OS]=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EB=9E=A8vs=ED=94=84=EB=A1=9C=EC=84=B8=EC=8A=A4vs?= =?UTF-8?q?=EC=8A=A4=EB=A0=88=EB=93=9C=20(#9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...44 vs \354\212\244\353\240\210\353\223\234.md" | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git "a/OS/\355\224\204\353\241\234\352\267\270\353\236\250 vs \355\224\204\353\241\234\354\204\270\354\212\244 vs \354\212\244\353\240\210\353\223\234.md" "b/OS/\355\224\204\353\241\234\352\267\270\353\236\250 vs \355\224\204\353\241\234\354\204\270\354\212\244 vs \354\212\244\353\240\210\353\223\234.md" index 68a1160..e627822 100644 --- "a/OS/\355\224\204\353\241\234\352\267\270\353\236\250 vs \355\224\204\353\241\234\354\204\270\354\212\244 vs \354\212\244\353\240\210\353\223\234.md" +++ "b/OS/\355\224\204\353\241\234\352\267\270\353\236\250 vs \355\224\204\353\241\234\354\204\270\354\212\244 vs \354\212\244\353\240\210\353\223\234.md" @@ -1,5 +1,10 @@ # 프로그램, 프로세스, 스레드 +> - 프로그램이란 특정 작업을 수행하기 위한 실행파일이다. 실행파일을 클릭했을 때 메모리 할당이 이루어지고, 이 메모리공간으로 코드가 올라간다. 이 순간부터 프로세스이다. +> - 프로세스는 OS로부터 자원을 할당받는 실행되고 있는 프로그램의 인스턴스이다. 각각 독립된 메모리 영역(Code, Data, Stack, Heap 구조) 등을 할당받는다. +> - 스레드는 프로세스의 가장 작은 실행단위로, 프로세스가 할당받은 자원을 이용한다. 프로세스 내에서 각각 stack과 PC 레지스터만 따로 할당받고 Code, Data, Heap 영역은 프로세스 내에 쓰레드끼리 공유하면서 실행된다. +> - 스레드를 사용하면 응답시간 단축, 빠른 통신과 비용적음, 빠른 문맥 교환, 시스템 처리량을 향상시킬 수 있지만, 스레드의 자원 공유는 동기화 문제에 신경을 써야하며 멀티스레드 프로그래밍은 구현과 디버깅이 어렵다는 문제점이 있다. + ## 프로그램(Programe)이란? - **특정 작업을 수행하기 위해** 작성된 일련의 지침을 포함하는 **실행 파일** @@ -11,7 +16,7 @@ ex) chrome.exe (웹 페이지 보기), notepad.exe (텍스트 파일 편집) - **특징** - - **수동적(정적) 개체(passive entity)**. 실행할 명령어 그룹 저장. + - **수동적(정적) 개체(passive entity)**. 실행할 명령어 그룹을 저장.
당장 실행파일을 열어보면 다양한 명령어가 적혀있는 것을 알 수 있다. 이러한 명령어를 그룹으로 모아저 저장하는 것이 프로그램! - 수동으로 **삭제할 때까지 메모리에 저장**된다. - 프로그램은 **실행 없이 어떤 작업도 수행 불가능.** @@ -31,7 +36,7 @@ - **능동적(동적) 개체(active entity)**. 응용 프로그램의 목적을 수행함 - **수명이 매우 제한적**. 작업이 완료되면 종료된다. - - 프로세스에는 파일 디스크립터(file descriptors), 네트워크 포트와 같은 **시스템 자원이 할당**된다. + - 프로세스에는 OS로부터 **실행에 필요한 자원을 할당**받는다.
ex) 파일 디스크립터(file descriptors), 네트워크 포트, cpu시간, 메모리 영역(Code, Data, Stack, Heap 구조) - 여러 프로세스가 동일한 프로그램과 관련될 수 있다.
ex) 메모장 프로그램의 여러 인스턴스 실행 가능 (각 인스턴스 = 프로세스) - 프로세스에 대한 정보는 **PCB(Process Control Block)**에 저장된다. @@ -72,7 +77,7 @@ | | 프로그램 | 프로세스 | | --------- | ------------------------------------------------ | -------------------------------- | -| 정의 | 프로그래밍 목표를 달성하기 위해 정렬된 작업 그룹 | 프로그램이 실행 중 | +| 정의 | 프로그래밍 목표를 달성하기 위해 정렬된 작업 그룹 | 실행 중인 프로그램 | | 상주 위치 | 디스크 or 보조 메모리 | 주 메모리 | | 개체 유형 | 정적, 수동적 개체(passive entity) | 동적, 능동적 개체(active entity) | | 자원 관리 | 명령어 저장을 위한 메모리만 필요 | 리소스 요구사항이 매우 높음 | @@ -122,6 +127,10 @@ - 구현이 어려움 - 테스트, 디버깅하기 어려움 - 하나의 스레드의 문제가 발생하면 전체 프로세스에 영향을 끼침 +- 사용 사례 + - 영상통신 : 영상을 받아 화면에 출력하는 작업과 영상을 생성하여 보여주는 작업이 동시에 발생 + - 웹 브라우저 : UI를 처리하는 작업과 표시할 데이터를 가져오는 작업이 동시에 발생 + - 게임 : 그래픽을 실행하는 작업과 UI를 그리는 서버통신을 담당하는 소켓 작업이 동시에 발생 ## 프로세스와 스레드 차이점 From a8caea476eafea9fd3c29ff13590e9835597c7ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=A0=95=EC=9C=A4?= Date: Sun, 6 Feb 2022 18:55:45 +0900 Subject: [PATCH 3/4] =?UTF-8?q?create:=20[ETC]=20CI/CD=EB=9E=80=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "ETC/CI, CD\353\236\200.md" | 62 +++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 "ETC/CI, CD\353\236\200.md" diff --git "a/ETC/CI, CD\353\236\200.md" "b/ETC/CI, CD\353\236\200.md" new file mode 100644 index 0000000..1f556c6 --- /dev/null +++ "b/ETC/CI, CD\353\236\200.md" @@ -0,0 +1,62 @@ +# CI/CD란 + +## 요약 + +> 애플리케이션의 개발 단계를 자동화하여 짧은 주기로 고객에게 애플리케이션을 제공하는 방법 + +## CI/CD가 나온 배경 + +- 모든 개발이 끝난 이후에 코드 품질을 관리하는 고전적 방식의 단점을 해소하기위해 나타난 개념 +- 분업과 협업의 과정에서 코드의 Merge 과정은 까다롭고, 테스트하는데 큰 자원을 소비되게 된다. 이 문제를 해결하기 위해 도입 +- 개발 브랜치가 일정 기간 이상 이용되면, 통합의 어려움은 커지고 충돌 해결에 들어가는 시간이 길어지고 오류 발생 위험이 커진다.
이러한 단점을 극복하고자 변동 내용의 반영 빈도를 늘리는 **자동화**가 등장 + +## CI의 정의 + +- **지속적인 통합(Continuous Integration)** +- 어플리케이션의 **새로운 코드 변경 사항**이 정기적으로 **빌드 및 자동 테스트** 되어 공유 레포지토리에 **통합(병합)**하는 것 +- 개발자를 위한 자동화 프로세스(여러명의 개발자간의 코드 충돌을 방지하기 위한 목적) +- 자동화된 테스트에서 **동작을 확인**하고 변경으로 인해 문제가 생기는 부분이 발견되면 CI를 통해 빠르게 수정 가능 +- 버그를 신속히 찾아 해결하고 소프트웨어 품질 개선, 새로운 업데이트의 검증 및 릴리즈 시간 단축시키는 것이 핵심 목표 + +### CI를 만드는 데 필요한 4가지 규칙 + +- 모든 소스 코드가 있고 누구나 현재 소스(및 이전 버전)를 얻을 수 있는 단일 장소 유지할 것 +- 누구나 단일 명령을 사용하여 소스에서 시스템을 빌드할 수 있도록 빌드 프로세스를 자동화 할 것 + +- 단일 명령으로 언제든지 시스템에서 우수한 테스트 모음을 실행할 수 있도록 테스트 자동화할 것 +- 누구나 현재 실행 파일을 얻으면 지금까지 가장 완전한 실행 파일을 얻었다는 확신을 하게 할 것 + +> 이 중 가장 중요한 것이 **테스팅 자동화**!!
지속적인 통합을 하기 위해서는 무엇보다 이 프로젝트가 완전한 상태임을 보장하기 위해 테스트 코드가 구현되어 있어야만 한다. + +## CD의 정의 + +- **지속적인 서비스제공(Continuous Delivery)** or **지속적인 배포(Continuous Deployment)** + - **지속적인 서비스제공(Continuous Delivery)** + - 공유 레포지토리로 자동으로 Release 하는 것 + - 운영팀이 보다 빠르고 손쉽게 애플리케이션을 프로덕션으로 배포 가능 (**수동적 배포**) + - 프로덕션 환경으로 배포할 준비가 되어 있는 **코드베이스를 확보**하는 것이 목표 + - **지속적인 배포(Continuous Deployment)** + - 프로덱션 레벨까지 자동으로 deploy 하는 것 + - 애플리케이션을 프로덕션으로 릴리스하는 작업을 **자동화** + - 개발자가 애플리케이션에 변경 사항을 작성한 후 몇 분 이내에 애플리케이션을 **자동으로 실행**할 수 있는 것을 의미 +- 간단히 말하면 **배포 자동화 과정** +- 서버가 많을 경우 개발자가 일일이 배포를 진행하지 않아도 되므로, 리소스가 낭비되지 않는다. + +![CI/CD flow](https://www.redhat.com/cms/managed-files/styles/wysiwyg_full_width/s3/ci-cd-flow-desktop_edited_0.png?itok=TzgJwj6p) + +## CI/CD 종류 + +- Jenkins +- CircleCI +- TravisCI +- Github Actions + +등.. + +## 참고 + +- https://www.youtube.com/watch?v=0Emq5FypiMM&t=10s + +- https://www.redhat.com/ko/topics/devops/what-is-ci-cd +- https://devuna.tistory.com/56 +- https://www.martinfowler.com/articles/originalContinuousIntegration.html \ No newline at end of file From e70a12cc320415b1f9839205cb392ad02e1e3c14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=A0=95=EC=9C=A4?= Date: Sat, 12 Mar 2022 23:41:36 +0900 Subject: [PATCH 4/4] =?UTF-8?q?create:=20[Network]=20JWT=EB=9E=80=3F=20(#7?= =?UTF-8?q?4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "Network/JWT(Json Web Toekn)\353\236\200.md" | 137 ++++++++++++++++++ Network/img/jwt_process.jpg | Bin 0 -> 33486 bytes "Network/img/jwt\352\265\254\354\241\260.jpg" | Bin 0 -> 65797 bytes 3 files changed, 137 insertions(+) create mode 100644 "Network/JWT(Json Web Toekn)\353\236\200.md" create mode 100644 Network/img/jwt_process.jpg create mode 100644 "Network/img/jwt\352\265\254\354\241\260.jpg" diff --git "a/Network/JWT(Json Web Toekn)\353\236\200.md" "b/Network/JWT(Json Web Toekn)\353\236\200.md" new file mode 100644 index 0000000..6b95c7e --- /dev/null +++ "b/Network/JWT(Json Web Toekn)\353\236\200.md" @@ -0,0 +1,137 @@ +# JWT(Json Web Toekn)란? + +## 등장 배경 + +> 기존의 시스템에서는 `서버(세션) 기반의 인증방식`을 사용하였다.
하지만 시스템의 규모가 커지면서 `서버 기반의 인증방식`은 한계점을 보이기 시작하였고, 이 문제점들을 보완하는 `토큰 기반의 인증 방식`이 등장하게 되었다.
그리고 최근에는 Json 포맷을 이용하는 JWT를 주로 사용한다. + +### **서버(세션) 기반 인증 시스템** + +- **서버 측**에서 사용자들의 **정보를 기억** +- 사용자들의 정보를 기억하기 위해서 **세션을 유지**하는데, **메모리 or 디스크 or DB** 등을 통해 관리 (**Sateful 서버**) +- 소규모 시스템에서는 아직도 많이 사용되고 있지만, 웹/앱 어플리케이션이 발달하면서 **몇 가지 문제점**이 보이기 시작 + 1. 사용자가 많은 사이트의 경우 세션 저장 시 **메모리 or DB를 많이 차지** + 2. 서버를 확장하기 위해 세션을 분산시키는 시스템 설계해야 함. but 이 과정은 매우 **어렵고 복잡**하다. + 3. 여러 도메인에서 **관리하기 번거로운 쿠키** (**CORS**) + +### **토큰 기반의 인증 시스템** + +- 인증받은 사용자들에게 **토큰을 발급**하고, 서버에 요청을 할 때 헤더에 토큰을 함께 보내도록 하여 **유효성 검사 실시** +- 사용자의 인증 정보를 서버나 세션에 유지하지 않고 클라이언트 측에 저장 => 서버는 완전히 **Stateless** + - 더이상 사용자가 로그인 되어있는지 안되어있는지 신경쓰지 않고 시스템 확장이 가능해진다. +- 클라이언트와 서버의 연결고리가 없어 **시스템 확장에 매우 적합(Scalability)** + - 세션의 경우 해당 사용자는 처음 로그인 했었던 서버에만 요청을 받아야 하지만, 토큰의 경우 어떠한 서버로 요청이 와도 상관이 없다. +- 쿠키를 사용하지 않으므로 쿠키 사용에 의한 취약점이 사라짐 +- 토큰에 선택적인 권한만 부여하여 발급이 가능 (**Extensibility**) + - OAuth의 경우 Facebook, Google 등과 같은 소셜 계정을 이용하여 다른 웹서비스에서도 로그인을 할 수 있다. +- 다양한 디바이스, 도메인에서도 토큰의 유효성 검사 진행 후 요청 처리 가능 (**CORS 문제 해결**) + - 이런 구조를 통해 assests 파일(Image, html, css, js 등)은 모두 CDN에서 제공하고, 서버 측에서는 API만 다루도록 설게할 수 있다. + +## JWT란? + +- JWT는 `Json Web Token`의 약자로 **인증에 필요한 정보들을 암호화시킨 토큰**이다. +- 세션/쿠키와 함께 모바일과 웹의 인증을 책임진다. +- 세션/쿠키 방식과 유사하게 사용자는 Access Tocken(JWT Token)을 HTTP 헤더에 실어 서버로 보내게 된다. +- Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 **Claim 기반 Web Token** + - **Claim(클레임)** 이란 사용자 정보나 데이터 속성 등을 의미 +- JWT는 토큰 자체를 정보로 사용하는 **Self-Contained 방식**으로 정보를 안전하게 전달한다 + +## JWT 구조 + +JWT는 **Header, Payload, signature** 세 가지로 나눠져 있으며, Json 형태인 각 부분은 `Base64`로 **인코딩** 되어 포함된다.
또한 각각의 부분을 이어주기 위해 `.`구분자를 사용하여 구분한다. + +![jwt구조](img/jwt구조.jpg) + +### Header + +- `alg` + - 해싱 알고리즘 방식 지정 + - 주로 HS256(SHA256) 또는 RSA를 사용하며, Signature 및 토큰 검증에 사용한다. +- `type` + - 토큰의 타입을 지정 ex) JWT + +### Payload + +토큰에서 **사용할 정보**의 조각들인 **Claim(클레임)** 이 담겨 있다. + +**Key/Value 방식**으로 이뤄져있으며 (JSON과 유사) 다수의 정보를 넣을 수 있다. + +- Register Claim(등록된 클레임) + + - **토큰 정보를 표현하기 위해 이미 정해진 종류의 데이터** + - 모두 **선택적으로 작성**이 가능하며 사용할 것을 권장 + + | 키워드 | 의미 | + | :----: | ------------------------------------------------------------ | + | iss | 토큰 발급자(issuer) | + | sub | 토큰 제목(subject) | + | aud | 토큰 대상자(audience) | + | exp | 토큰 만료 시간(expiration)
NumericDate 형식으로 되어 있어야 함 ex) 1480849147370 | + | nbf | 토큰 활성 날짜(not before)
이 날이 지나기 전의 토큰은 활성화되지 않음 | + | iat | 토큰 발급 시간(issued at)
토큰 발급 이후의 경과 시간을 알 수 있음 | + | jti | JWT 토큰 식별자(JWT ID)
중복 방지를 위해 사용하며, 일회용 토큰(Access Token) 등에 사용 | + +- Public Claim(공개 클레임) + + - **사용자 정의 클레임**으로 **공개용 정보**를 위해 사용 + - 충돌 방지를 위해 **URI 포맷**을 이용 + + `{ "https://naver.com": true }` + +- Private Claim(비공개 클레임) + + - **사용자 정의 클레임**으로 **서버와 클라이언트 사이에 임의로 지정한 정보**를 저장 + + `{ "token_type": access }` + +### Signature + +- 서명(Signature)은 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 **고유한 암호화 코드** + +- 위에서 만든 **Header**와 **Payload**의 각 값을 **BASE64**로 인코딩 하고, 그 값을 비밀키를 이용해 헤더에서 **정의한 알고리즘**으로 해싱한다.
그리고 이 값을 다시 **BASE64**로 인코딩하여 생성 + +## JWT 동작 방식 + +![jwt_process](img/jwt_process.jpg) + +1. 사용자가 ID와 PW를 입력하여 로그인 시도 +2. 서버는 사용자가 맞는지 요청을 확인 +3. secret key를 통해 **Access Token(JWT)** 을 발급 +4. JWT 토큰을 클라이언트에 전달 +5. 클라이언트에서 API를 요청할 때, 클라이언트가 `Authorization header`에 **Access token(JWT)** 을 담아서 전달 +6. 서버는 JWT Signature를 체크하고 Payload로부터 사용자 정보를 확인한 뒤 데이터를 반환 + +> [참고] 처음 사용자를 등록할 때 **Access token**과 **Refresh token**이 **모두 발급**되어야 함 + +## JWT 장단점 + +### 장점 + +사용자 인증에 필요한 모든 정보는 토큰 자체에 포함하기 때문에 **별도의 인증 저장소가 필요없다** + +- URL 파라미터와 헤더로 사용 +- 수평 스케일이 용이 +- 디버깅 및 관리가 용이 +- 트래픽 대한 부담이 낮음 +- REST 서비스로 제공 가능 +- 내장된 만료 +- 독립적인 JWT + +### 단점 + +- 토큰은 클라이언트에 저장되어 데이터베이스에서 사용자 정보를 조작하더라도 토큰에 직접 적용할 수 없다. +- 더 많은 필드가 추가되면 토큰이 커진다. +- 비상태 애플리케이션에서 토큰은 거의 모든 요청에 대해 전송되므로 데이터 트래픽 크기에 영향을 미칠 수가 있다. + +## 유용한 상황 + +- 회원 인증 (JWT를 사용하는 가장 흔한 시나리오) +- 정보 교류 + - JWT는 정보가 `Signature` 되어있기 때문에 두 개체 사이에서 안정성있게 정보 교환하기 좋은 방법이다. + +## 참고 + +- https://mangkyu.tistory.com/55 + +- https://elfinlas.github.io/2018/08/12/whatisjwt-01/ +- http://www.opennaru.com/opennaru-blog/jwt-json-web-token/ +- [JWT 구조 출처](https://jwt.io/) \ No newline at end of file diff --git a/Network/img/jwt_process.jpg b/Network/img/jwt_process.jpg new file mode 100644 index 0000000000000000000000000000000000000000..648b03e0b43bc1fc937a40489e92fba55d1fe22a GIT binary patch literal 33486 zcmeFZ2UJttx-J|9L~7_AqJV-FQL3~=L_kCYRJsrqkR~9~0t6x;MXG>+fD(!{Dfy)L z(2GcK(n&z+kWd4JrKO>vWuT)we}RdCiHVVck&&5&ot2q| zjfIhsm7A4~gOiJkiwVfX%gxEl&dJ63XD3wDlyhik>1k={Ihh%mIse@catna%0+l!Q zMQSP$z&SQ5YBnlz2LJ>BP|;FG`{#iF+k@&HWsK+PF3>YDQVytM1)QUzranhQ{pYAD zM+Z`V2hgz5vR}HPd7i`g8J&m+r(AGC_65<~-&(mI4&%h+pT7>FXW-`H<>SA6MO@;l zq=KT7@=X<0tvlK}x_9;NJ$h_nYG!U>X=`Wy!oktW+0)D0#~0@3ANn>dJR*JE-nB1y|TKt zj^EweKR7%h9H0Ct7Zrf|zl!xgB>M-s*eG(HqoJXuq5D%Vs&l@SM$JY;d+Ek`c1>ft zXC53Pa={lkZzp7bYo!;Je~9CH{(6{!TTB6S8ULqff0OLrCRoUSNV5MS*#DGk8o)$N zMNu9#8vp`0dz2F;0r=0}3d`KGD{2z`e%*Z*tFNATogvFxY&_7#q8xXa>|Nx{L+@h$ zGF zDK0<;E9RgB`bR#Src;LB*2#cyx+eG}c468O3yQhy35hI|zG$1^o{y~f8h;=4Lw78F zk6+S&^PvpXd9wafxPC+3_NQG-C&nZ~(nF`|-?_Ox<>m{sQ$3C0HEHkTJNR?8MdHnI zh%GHVuyyyM^=kvlWt2{`_FBn+V9=)^X6OU>)w6GKZ9gz38P6%lzJOo>NuQ=p-7rBU1@t8@#*|{zXI~xz|bh z?81Se$=1wB^L9mJs8Ln;@9D>x^L9YNgipm+`Dj4*a<7yaXmc7}{LilNoT!(H(#91H zG}?U9-2mXDTP!(^J6OYRAP}xjfR@3wRp=u3U4?w-goGVeB(mSUzWb6nYx$^U&AKbT z*ve(vASKWKV*0=?O>Ma5aIQB~0iMQ)_Pa#R8wQCo7p!iyC=L?r-Spb<*t6P?)uGt- z7d5^U08c%&hrdX&oCJnc)_q?)l;%HvkC&c%e=57DxJPR~=Dsqn$e7WWDmVM&?nuu{ z!;M}@+Sh|CYvz(8Ys&p}nbK}CymP-JK`%5sV{GTY3^jM2RoR~9(HtoWzdpvzC{0<* z_dNQUFw#6)G0YBP(#DL(n^oyl?%Luun=b{s^Rw6f6zzJg`*Mi+Cm~%%bvr<%Y^f?; z-~2B7z_-Lm!(07B4)djs&3xm;yW8oeseVOrfp`~2@In!F)ZwXw*C{lZ4B)vqvbnu~ z%Ihs9F*0#{WWYV5C6&4I%6UDAkKoy%47yO-C=X71ua#UI>NM9D`Yk6WfuD6&t;dCioDa!n3ao4)mRUu8fY*aal zsD{^AOn7)mlSH4NVMYxvQ_u%UnUCQ60Ed1(_MmIG)0BMwLLKqcBlHzj7ndnM_+pS zCPP03J*GC(-4NpXjG1!=v8}2G6}f4K@6vpJs1EqBcsG8}*7>^UIXh<+;tQBXbec_i?IQozI*gmDNdjI?VhxtYLV)Qr=Rj zu0a#O*EFZcS;)3j%o|gax~X4sv!2YhrC1;-50x*CZV2}bt?XwDn_?S#OyzC(;BuOu1NjIa-M@H=AldnB>tGxC0%odrHIy3r-MP}IVWYyoBSI6TOA3NzBSi@*Iq~QmcLoo{c+xry3dvj z2#M16z^exGI!+tmIz|KnAttUCGNv9YG^cv$n_7JFFU-YmKYVZ=^W<77UKA_a4SEY! zAZW;hS7A|+L9CNjr#^R|ai>gAWC&sFZ(rm5sVNc5Bk=|$NL7#a+T>iEd^f1jve$h6#LB#Rvu@i{}wRsFzrm#V!v{9(}b@_1yF$lE<%Z7Aok{q z>xU2)H!v6c`XpQ_U4YgH~=scY36h1Hbt(G)8=96(|W!#vuy^D(r*Ry{i zzIt7wkb1Zf#d?-Y1~{Xs;nX;r3J(PKjHR!WZL0U$=RE5l_KDc1UvhYJ)eb8Fbwcv# z$IwFyilRQlZ=dCoF0GMRMw?lu=VyDg=GRT@D>`XETzoUq!_VC!6#iNd@Y<1j-=-OH zR&|h@PrPKMcvJc4+a15nI>cE@6VXBN0F_1txUEh#3p+BMH}QsK;NNwMIZ1OsxqHW_#bx{$lyQK!gnqzO}&L)%K zW8Pw1_d)mx(_#$EC$rASk2uW0NzJ31B|#U6#sLrxEo@hPV|iWe*rnj?M^X(bPn1_O zKaCqs9U0?GGFkCu4f)pA8|dd1{BTQseW~6wo`}eEuO9n!JL3YNY|cKa8o!fh_i<}A zF(?n`xI3@Q&qmstB?Ez7{5#>IX$pZZMk9&O`L)aI6IqwN#IEuY9l7GO!Q30d^0>hH z_ue~U^_g{-KeyjIsjRN(g;5PCZL7VO56&E4M6+G9Yr-Ezmf2TkcIh3^|5BRNt2VDu zQ8V`uRUbzZEaw%;fNZo48PNKP3?N#2`c6)&CNEE#`LfSh-|t*bceu9QT_o)%K0Bnw zI;_nZ9uyPQdot<*rQVmB&3JUVEHD{;aBh`B%`@8f$Z2 zkjRMw{HJNCl%Q*H7@^pu46aj)(@DxUC%9l{J@g9ov6tk)WnCbZrJ7gga=x-ECkEL@ zod7Z2F}8%TMGy-iQ_4wtX?*ii6ZdY6LeTT`(?MxjEWS&=UHwvv4?=TYRL7I&1~Lj= zxa;qva?kio^ZoqVe+_$sS2R&RCTf=qh(`*#lc?an1Vkwz^ofgmnDE8X?fv4~ANOo4 z$2d4Nl@=R%6R34K1?{}@DZ02-vW!Qx#1qV_mCSgiCu6(_?tsS-!-?9G zcng$+G;HbHHpuH#AB%c>;L0suIEX>Bt>x_Yu4Ib!W(u|NJy#1!`owPF9YlSWZqwbZ z>Kg|S#Acv`VHF0kxufbm>=W(!EC58s3<~i6M%}xM{zi1MaGA4cZxoyJ{3SvjR>Rhu z;EFeUGPyE#=Y)B>CfUAL+Gq6AoM2YYGQL%%7v)S4z_~mjXyIkCZ;L(Ll|$9F3$;p| z@H=NjGecgUTUk^lj1te{mhmIZ6dlEg=d8qS|B zPkz~o57CN?@1kPCv2$v9Bk9zqb=JjOu!Vh7T+_HADvT;6Gqm3?I3iM>`@ z3OB{`%m>5I&Q)7qmF1mWRA)xwt4=^%)BtAe0`DXL#3@d=<9y!pIehQ_hjfwm`SZFq2Qp^Jes z3JXBT3DwIXw%mu@8w{^*Byut#J^Nn{(e*(uAQm%_v|z3$`FWmMy-U^z-?S@5SSRq< zkCkFSyO$e-KX^|k%i&@K#zjOhej|Eui)BI2)tO{{`|$3VTcYms+o5ryw|u^`a0VnA zW{qoDng22L(ynO?<+^`*^Ee>7$W&r-{l_g%s@IKHhxND_Lg->yk(lvLs$rtqx6Q8$ zDr7*jUI9V*u!UfNXT*L&0O5+*4QtPic&3UAo53)&kKD#@FX{6S=$^VvD3)GXuo>R* z+V}!=_h!@*`J<W19*OpK-a~e9|nslpZd{Lve1?G{g0CvGYum*t}Qgf zCQ&h$$b;97IzTd75>mFiABIdzZ09Fl_t^Y8 zyYpe$AH}p{*V+uhZ6DJfY_tcl5LziJv78L66vY^_ud<$f4OEp1PiHJtD^FRzPL#^W z!@=A*mLv?XD~W5GkYb>9H+B^e_FFwj}+?!0ReZdbT>SfTQc8?_F3G?|x9Z^J~j zap9#|v#S#i9T%pjU)#(&j^4H2{FJD)ycb{UrxDP-r6OlQnc349*nySqz88I^dUoI2 zsfEp7H@a=u05$cW=0t6S8Ho@i)~v%oTql;k#_3LtY#ck6%5ww@gkK9xIQtA&B5@N` zFb#UPy9J30TkNu@4}1|KQX`UT0kAFCrEoE}PX4#rHo>=AK*@Tho?-vVLS2v~Y4#y3 z)fz!XkT<~PH((KrF8rZ`sOeRSX8SRtvi)j5-mqA)z=n^RZ{qyTY;DE6W!YiA+5ybs z?NH|a=3+pgoD)md!jyBCy4}~WUmBmfF8WV4g8cE27-Y3?>q4-UdeBvTX~?>#YqRW2ymrD%^n}S#G#wdWhkm3O5-6SxmbD8+>TszJ%;Rvce6=^_V6QjxGTg zbuZHP+Qxmpg(?XWgmd9!+hkOv8-*~|vh6sDu9sWMPtKq_pn(R<``949bQP#= zFxY1o5<_&#cQTWdljer1Zq+Wa=C7=bz0uhC6{|&JP+UUCOg?l%Rt&b5+IFhAOT$8~ z4Mlo^@Hefxg>w>+%^|u4S&^>1&mmu9Qp5p3%j1nD@hv>=(PDhYdDIf4tJ!12<8Vh< z+sbmb*gDjvNLF-hJs6gOwPJl_Z@%zMHw=RVxoUaYKk@Ei6JJIJeB<;!wpo*mt;;Cv@A{RrH(w%rkbV8+nz$m&rqd)r?bb$}xrkkHQY>8+%qonsPHSUl0g&xX%sHY?a_uu>lW@@YQAFBorB-Axd#dQiCT4vho=ltQz;Cb{7bS2Z-Y}&>3ErD1L$_?#Gh|xf^4R z?f)P8*^0TwBLsAxvN-U zsVJ0?fse*~uIZ8upWX@GK9JfHW;Ug!hB}phT!}z77Muu%&YC3KwMZWU+14Ma{BVKBX1tNYyXaur9f=57fJD0i-ije>Qe9%NJ!3D zvpC^xb1K29B1nrLBf-70{rRc*Sxe`D#)9w|)o1JuK~m=(R_M7QkjR0fi)@y5DR`SQF>zN$ z*LAk&{hL5z-BXirFp%^UT{$_pgckZqsu>LU5p2Rk>CTbq|asnKY&>&Ly~W1fXk+ELdk$#~{>EQHD`m%UxZ3i*^IUzhoUnhcITGjIzQ95RkCM7EXIB;s-Y$8> zzTS!3?EYm*Ub=g_Yn0V!H#K*@f@X6#(?9X_)$oqlP_}=#vht%;cW*+>6UnTTn3}gLeNTnDd z-O~qMT_@J6e(Kc*72UBLAu3(EidaZxK`TTcXeduDqmeUtHn;jmhG>oqR zHiH46hR5P!nUz$whu;WISlRQWeqnyRZ^S{;7iZt;xVS5gHT0F;@~Cw1(_0VePyEM$ zGipnaSPB|<+GcYR=aci2$ma3dtW#KW#B~W>H|pA>9e3AO+{M1{oL?89TM+}Tq-!6H z1hJs)1&|TKVA9|uT9?=SJIVA$=GD4IH0gj`@h$o#D+nLVP@iCi7w=wRC0c!b zk_}}hw72WIIC(f+tPi*-QhQK*S5Uj^;I23 zuSclcbU2?b3m+UGEyYKGK?L1Gn7cJzW;=|VwCxHTQ)A_Hccq@&FPhS%jmnLSlzPv{g8LLf}=(FV-^!6 zYC#CB-~=h3!f&Izvk1=Cw>R!)7&PEE`=u_3C)_WVO>fZs{`2M$ssgT7LaFO;B_HH1 zE93guYo=wEE!g5zS|7z#9k1X|G0?bXwxC|H2*DTI7Ynh*DP^FX-c#;7mIddO{_XIm zpACQoybr zkVVOYhT+Cv9ILC7%s2S2Bq_!`QqO4Y>?ja-1E3PX*9mPKnsxZ@sAd+I1s-W{GJs6hT51(J)xG46dP_9+=l-I{?J1ez}cy>L(#5UfyK2X_T&uhhe zt`rk#&vF|POYYIl>NuWwxWE@j{)n*szCg_dtudSZdm||wev;>3)pa+?5|y;^WI(z& zo)V!L)(8KqH&!rm+jE(krKp|%w!eL?FA}f4gMB=*o;oL5Gim%5qkDgYRuQ+~y8LkG|FL4sz{t5RLFc z-CIok0K1!1mcLg2NEYl$X4fyGbZa^z)!VxYzAg3U8++9WnF#_~#1Nn<9kPoUtq6AOta9Ps9;BHhs z4&9{-7A3qqrkse%Qh)VNtSptwHf1RwcJC7@0gw$P=#?bgZr&kKB4Dw>cErIi&@M_@ z2q#*@h?g&UF`f6vgY&P>8wBYEEeNZh<%6%l?^IAg8VDX54(Gr$414BPa(8B~!v_02 zuZ(z-zGni!2PX@9HaFIgNDw1>@iQgVYEp3J>4pe`#RwVQla?_z=3_6-ZOJUY;F~tC zqx(i>+WdoJOhhq9tr;|xIOtn1G%zQ&*|oHG@1ws$!8HVj^)F5U1!4Y=HY$vQu{Jyb z`%jB-UN%%@Ktdw$2ucQMDh^C)FM^KwE|LM1Rj|)tWlWL|G|q#>3KwZ}nvG`Gnu+7B zy4`VonE3{5)D>(I~+xfJDBB$-^w|>5%9t0;(JY>tf(31tEcu>r0dg__LV22@* zCW#D)p@g}>J7eh8`5+O*q8O6+qIr8a=`{M-_?P$*&u$j*E#hB2VU*H?WdsBtM+UHx z+|aA9J;{LgE<3=hkXm%I@I!W?g|qr@&sO&ea64_r27Fm z3;q5Eq5!{o`W(j7QlB-}sBtPxNYX*uq$>GejMLl~VUZew{KK3~&dvW#4)rf2Ea@@T zF&RKv7Oi(5bz1uUF@bmyFSMSbJ)!09UC{Wh?t#f4&(?t=l{_SdutJ?|vqN7(-@kOi z@=82pu}m0@OYN$?T!W)MhzJv}3bV(dBeSp1yZ6pX%h50?GXX94b zo9Ykdc_)ZsZV{?JO>UPyy;7l8k@Rf6$Pu&nsH~Zez+*(9tOfdmmGBaG_>*eD00spWXqe^yqM%E1ANG4B!eWWWi1nNPhefU>B2=}sx@ zDl2_D9&fuIdzI*TaE~I>r-OfKF#p$GZ)uN^BkB!eu{`~-Ae%^yOFgvjAOBJT3)a$i z5fzm%7jwIJ*n{d{ptzWt$*!G{qm&hWeBO3Ze&-vnCd#1=*Zhn?$%9|t2X1s}$e&!w zY1TZ8q2%Pb!YpTn=^&tUf-VLEq8U82EB`Gp%T!@iw;r$wxh^Ch;6Gcd zi~mPm{*TXp)zXT~-|MinkOGl{3rCP$@sBC0UmJY#&s6_!`TqY6yAfS{Q`UBO`%;`2 zX)}s9NT>PfpTvm8&k%ZuBlERw^L;hM1wvl1qjwWO*SngNKHj$P@{^+Aw`OCNW-bORw)*f1 z_<76jRbuzL&Tk#zkM5QPT@t-0UUj7vQso`@=JK-wLVi~OU+&!7Jy9)nH{HVBIo&fa z1*+3rZLTgCC|@HTW{`UZ27QbVk1im@Ef+@U*EPpp6Req|q90VCnxgOr0LB)U(5OmR zmxp6sTad?IP4Nw=VJZjxov#k8Pn9h@Ql@N?UQlBA7>_UhK!{A}0 z_}0-?U|L**FWaXVZ&Vqi5-C|yCz^(UdSsxcgMShKb)kpxa_Q&I*LPdIFKG^PjW}B- z=f@Y!LZMGO9UR=kEy}LED&h}L{9y=S090se+6KB8O||+usrxEbWF=nBdD^qCqjgR- zMADyf$JZhwk=zQ%2-VcE%7$7u*(!H-XQ=|GL#1c;<7V{LBRl{i5`BUsFRB@1i~5y! zUPz{Prs?Wjm;6qJ%*XEDl3hZ$2Sa+xiyZOJMczv&mY)P4=Ae})ql-f;49~~xYPExp z0%uijs%+g7s5AxFEeSEUGXusCqGhfRB^#=&i1mL@GMz^>S;}42e_r)4sn0{A!5Xh|-kdx#({~hK@mH-W0lrA zmo!Re{bnTDb##Kl-zcq8{QLh2i_tiE7)dzB>`XOag7TIO+1xV);JWU%)KrSg{YTH^ zH3m^n=@qEfKA1r$_f!`v@fHpoinR*xtqe6Sk2<*cK4iEgiubB$h>nYo6a1rHk_)&~ zrbau~9sn;?ZA>JsBe8K-Cy@TbCnI3BTdsMYCtR53(ME0}dQt)NC8zC7t zW5S&tRE3!{+47nR@Jh~H9~U+CvyPm;AQNL3C_%mIEY(G+`bDRs+E1YuDCL(f5WxU$ zU!t4m6b|cnM`L@Gs!R)Lz+o24e3bUn?-y2G`q7Stap{oF9o)camui3BL@uYCE)6&LMZRr&pXtKTI*JT{ z{jXBV1S`D2JwgrcNE06(IpEcAGw$}>;yj;xyHr3C4Jglx+cGaR@3(+{?X|bA--u~k zhc(%)i$k&d?(oadQfP&*+lW#;m>OlO)NlX z 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 G$^QeA!r(9f literal 0 HcmV?d00001 diff --git "a/Network/img/jwt\352\265\254\354\241\260.jpg" "b/Network/img/jwt\352\265\254\354\241\260.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..4730e71d5e7b9cf17131b46ac2ade99121358dfb GIT binary patch literal 65797 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

eFXA<&zJeS>(VDn!odH_&Meoh7M_ zB@NvJ)^r3}c!J0Qm}y;aMjiRBK?2X57n_k5EQD)cp2t!61Y@AERcU9Akm2M;HD)JA0#jVj1 z47yejuM*)6r0j6@bHDyns7wFa9~%$(p^w710yT!vz!Lo=DZt=XJK-bVC%fjtWG zTq54U-Sx4#nHMG*hO*jF95%l#ZOG5wAyACRlJPv0Pzq1oR0NPMEA|yJJVA11;@%O8 z;d`qHJT1WYC(qoaHf>9u+a_eKXgjMeGS;CIoZH!h#IRJMWFT!hNBZ8Qd(#FaG@^1h z+wjHBM}K|mC*HGJKMQ~_8yn*aGZN_=*k_D#``HG;xv+$AABzTHfexH9T7iw*J`)Jl z&Hkb?nO#uSoZlOOtB>mgo`L)L=erMMPN00Pya`qtbu$)s?h)#A7Iafn>Q%D;=3<@p z=Cu_B*zJRp_hi4Y-#}@bcHk9BD64WXVSzmx$R$n5PAyf8qYPbm@I9&kM(w5X^izpp z!;4kepuRn}gBTs3z6=7(BGBQqOzQ`gmz%piPam99JDYN?H`SBR?TqvuHFDph8@P#H zdAJ;rfsCE;Y|qai{}pn z*i%q|ZVmCGU8+F%Z$@s{I(M~qRrufIciI6Lmaz3{3W}z7t1>>Ox6UfRw!~7z&PA2- zB&sssn_Y02hj>^$Ip4G3r+U>lNVFJ56`L}~(uRpW;nWSEcKxgH8gd+Rt49;qOz%S_WU^_YTR|*WiYF zEZcc@hF1=A&78c4)*sUf$r|dg3oU&qQT;p}8{5wbYd^5;jEo1zOr#{kiO*_MA$V6*Z(LQ0 zL1!9db#$J~Xi{lbyTg2M^xjXr7*A!lC+0S4fq9k0kfis&X9FEyd8#y+8Jey=&R-6T zIlbdqa3a*u<6J^MrtvCKFh$UbE)*f|;qoi)ATWI}F#W1~Y?K%l8CbcbZ{uP#+A98y zx$jw|lg)$dqnD|WJ6DN|OYm;Fo)h&94@uk@vMu*;`&4X6vcP%U<>dm|2-PHmYd6p* z0{qcbV|RaReJVtn6RfY`gP;k5>Tg`ttsr2`*oe%Qa4MQUD!+L*IN)~dS(HL| z*FuBmhkssTK73v^_l?y0-i@r=s&MLY)57_AO08L_^9EG+SD_*kDL@)k6hzAxEEJLG!3_(_lV#5Fv;W={Xz?5N+vm+*hu|*GhiR#x_2@W zors|}n+2^@PwOaX7@9Ge+R}8;GP$^u*Sr08fA#v!lIw>YZVPGc8H$>GD1Eo*NY&3D z_swR>$E%F{ReLoJZJA8TRdKW-kX&py4a*h!uL5Z5HtMJ1!qzCZC1_q#W) z?m|jhcwsgthaX0=>~UF1VJu@Bf%`L?Hf?sTd4Y1=eS3=90Y07YYYtuq<`4?OG%~UW zoGdTh;+aHArb{031~!_ziJl5G*U?gT3tf#@5o{!21O4G$3fyT=?9EPdu}>BGk;%?p zyLHqpWK*$o&c2VlscAwsDi@yg2?~qI5aH$GD*Ceaq!}>b8@OsG;SYY}#*MZqxOq7; z`gXSZ`)e{XGS~ARG@v}=Jef#N1}D303JHsdY`H7SM(lf+4sb20Ui`MsnJq32gj#cXeHZz1Xj3{!4gLW0(g@8qkukMF;fmWEqf zANBxav@iZ7`W4@^XS~9~uQHW2`nL!kWtP3N{}vw}ey@Zbc6PX-`yDV`!JC zrRU@X(upAR$3e`@%y0AF?LzcQsew^dl?)Dlm02=pk$1)u>`7@2_>=g<%AZaF|0=8A zoV;EguE%~_?r4$v?`Ap!bteBu0eL<&lYxbWWhpBq@fJAd|ASEPi>Y84hlXa<=m6h~ OCHq2Ns^Gc4*Z%;~!Ga9{ literal 0 HcmV?d00001