JWT (JSON Web Token)
1. JWT (JSON Web Token)
JWT란 : JWT(JSON Web Token)란 인증에 필요한 정보들을 암호화시킨 JSON 토큰을말한다
JWT 구성요소:
--헤더(Header): 헤더는 토큰의 타입과 사용된 알고리즘에 대한 정보를 담고 있다. 알고리즘은 HS256이나 RS256과
같은 암호화 방식을 나타내며, 토큰 타입으로는 'JWT'가 일반적으로 사용된다.
--페이로드(Payload): 페이로드는 토큰에 담길 실제 정보(클레임)를 포함한다. 여기에는 사용자의 정보, 토큰의 유효
기간, 발행자 등 다양한 클레임이 포함될 수 있다. 클레임의 종류에는 등록된 클레임, 공개 클레임, 비공개 클레
임이 있으며, 각각의 목적과 사용 방법이 다르다.
--서명(Signature): 서명은 헤더와 페이로드를 합친 후, 비밀키나 공개키/개인키 쌍을 사용하여 암호화하는 과정을
거친다. 이 서명을 통해 JWT의 무결성과 인증이 보장되며 JWT가 변조되지 않았음을 증명하는 용도로 사용된다.
서버는 이를 검증하여 안전한 정보 교환을 보장한다.
Signature 의 역할: Header와 Payload는 단순히 인코딩된 값이기 때문에 3자가 복호화 및 조작할 수 있지만,
Signature는 서버 측에서 관리하는 비밀키가 유출되지 않는 이상 복호화할 수 없다.
따라서 Signature는 토큰의 위변조 여부를 확인하는데 사용된다.
다양한 인증 타입(알고리즘)
-토큰에는 많은 종류가 있고, 다양한 종류의 토큰을 처리하기 위해 전송받은 type에 따라 토큰을 다르게 처리한다.
type에는 아래와 같은 타입들이 존재한다.
-- Basic : 사용자 아이디와 암호를 Base64로 인코딩한 값을 토큰으로 사용한다. (RFC 7617)
-- Bearer : JWT 혹은 OAuth에 대한 토큰을 사용한다. (RFC 6750)
-- AWS4-HMAC-SHA256 : AWS 전자 서명 기반 인증
2. Swagger
Swagger란 개발한 Rest API를 편리하게 문서화 해주고, 이를 통해서 관리 및 제 3의 사용자가 편리하게 API를 호출해보고 테스트 할 수 있는 프로젝트
3. gitActions work flow
1. Local Dev Env -> GitHub (Push)
동작: 개발자가 로컬 PC의 Git 리포지토리에서 소스 코드를 수정합니다. 이후 git push origin <브랜치명> 명령어를 실행합니다.
상세: 변경된 소스 코드 파일의 차이점(Diff) 데이터가
인터넷을 통해 GitHub에 위치한 원격 저장소(Remote Repository)로 전송 및 반영됩니다.
2. GitHub -> GitHub Actions (Send to GitHub Action)
동작: GitHub 저장소에 Push 이벤트가 발생하면, GitHub 내부의 웹훅(Webhook) 시스템이 작동합니다.
상세: 원격 저장소 상위 경로(.github/workflows/)에 저장된 *.yml 설정 파일을 찾아 읽습니다.
이 파일에 정의된 조건(예: main 브랜치에 push될 때)이 충족되면 GitHub Actions 인프라에 정의된 워크플로우(배포 작업) 실행을 트리거합니다.
3. GitHub Actions ->️ Amazon EC2 (git pull)
동작: GitHub Actions의 가상 환경(Runner)이 가동되며 Amazon EC2 서버에 원격 접속 명령을 내립니다.
상세:워크플로우에 저장된 암호화 키(SSH Key)를 사용하여 Amazon EC2 서버에 SSH 방식으로 원격 접속합니다.접속 성공 후,
EC2 서버의 쉘(Shell)을 통해 소스 코드가 위치한 디렉토리로 이동하여 git pull origin <브랜치명> 명령을 실행하도록 만듭니다.
이로 인해 EC2 서버가 GitHub 원격 저장소로부터 최신 소스 코드를 다운로드하게 됩니다.
4. Amazon EC2 (build)
동작: 최신 코드가 반영된 EC2 서버 내부에서 실제 서비스를 구동하기 위한 파일 변환 및 프로세스 재시작을 수행합니다.
상세:빌드(Build): Java, TypeScript 등 컴파일이나 패키징이 필요한 언어의 경우, npm run build나 ./gradlew build 같은 명령어를
통해 컴퓨터가 읽을 수 있는 실행 파일 형태로 변환합니다.배포 및 실행: 기존 구동 중이던 구버전 프로세스(예: Node.js, Spring Boot 등)를
종료하고, 새롭게 빌드된 코드로 프로세스를 재시작(Restart)하여 사용자에게 최신 상태의 웹 서비스를 제공합니다.
댓글
댓글이 없습니다.
