[Infra] EC2 인스턴스 생성하기 & SSH 접속 방법
·
Infra
🎉  개요프로젝트를 진행하면 EC2를 제공해 주지만, 직접 EC2 인스턴스를 생성해서 미리 배포 연습을 할 것이다. 졸업 프로젝트에서 EC2를 생성해서 배포한 경험이 있지만, 이때는 너무 급하게 진행하다보니 정리를 하나도 해놓지 않았다. 이번에는 잘 정리해서 다음에 참고할 수 있도록 정리하려고 한다! ❓ EC2란?Elastic Compute Cloud의 약자로, 아마존에서 제공하는 클라우드 컴퓨팅 시스템이다. Amazon EC2를 사용해서  가상 서버를 구축하고 보안 및 네트워킹을 구성하며 스토리지를 관리할 수 있다. 간단하게 말하자면 AWS에서 원격으로 제어할 수 있는 가상의 컴퓨터를 한 대 빌리는 것이라고 생각하면 된다! ⚒️ EC2 인스턴스 생성하기1. 인스턴스 시작우선 EC2를 검색하여 AWS ..
[Spring] Access Token 블랙리스트 관리하기
·
Backend
🎉 개요로그인 기능을 구현하고 테스트 하던 중, Access Token을 새로 발급 받았는데도 발급 전의 Access Token으로 여전히 접근이 가능하다는 것을 알게 되었다. 이는 이전 토큰의 만료 기간이 남았기 때문에 해당 토큰이 유효하다고 인식하여 발생한 일이었다. 만약 이전 토큰이 탈취된 경우라면, 새 토큰이 발급되었음에도 탈취한 토큰으로 계속 접근이 가능하므로 보안상 문제가 생길 수 있다. 따라서 이전의 토큰을 무효화하여 접근할 수 없도록 해야 한다. 이 문제를 해결하기 위해 이전 토큰들을 블랙리스트에 넣어서 관리하는 방법을 선택했다. 스프링 시큐리티 관련 코드는 이전에 정리했으니, 블랙 리스트에 넣는 과정만 기록하려고 한다. [Spring] Spring Security JWT 로그인 구현하기..
[Web] 웹 소켓(Web Socket)이란?
·
Backend
프로젝트에서 웹 소켓을 활용한 기능을 개발하기 전에, 웹 소켓에 대해 먼저 공부하려고 한다. 💡 웹 소켓의 등장 배경가장 많이 쓰는 인터넷 통신 방식 중 하나는 HTTP를 이용한 클라이언트-서버 모델이다. 클라이언트가 서버에게 요청하고, 서버가 이에 응답하는 통신 방식이다. 하지만 이 방식은 실시간으로 데이터를 주고받는 데 한계가 있다. 클라이언트가 서버에게 요청하지 않는 이상, 서버는 클라이언트에게 먼저 데이터를 보낼 수 없다. 또한, 클라이언트는 항상 새로운 데이터가 있는지 확인하기 위해 서버에게 지속적으로 요청을 보내야 한다.  그러면 불필요한 트래픽이 증가되고, 이로 인해 서버의 비용이 증가한다. 그리고 요청과 응답 사이의 지연 시간이 있어 실시간 통신의 효율성을 저하시킬 수 있다.  이와 문제..
[Spring] Spring Security JWT 로그인 구현하기(with Redis)
·
Backend
📝 개요앞에서 JWT에 대해 대략적으로 알아봤으니, 이제는 JWT를 사용한 Spring Security 로그인을 구현하려고 한다. 이때, Refresh Token을 저장하기 위해 Redis를 사용하려고 한다. [Spring] JWT(JSON Web Token)란?스프링 시큐리티를 사용한 로그인(with JWT)을 구현하기 전, JWT에 대해 간단하게 알아보려고 한다! 🔎 JWT 개념JWT는 사용자 인증 정보를 JSON 형태로 안전하게 전달하는 Claim 기반 웹 토큰으로, Base6guswls28.tistory.com 👤 로그인 과정 알아보기AccessToken과 RefreshToken을 사용한 로그인 과정클라이언트가 ID, PW로 서버에게 인증을 요청한다.서버는 이를 확인하고 AccessToken..
[Spring] JWT(JSON Web Token)란?
·
Backend
스프링 시큐리티를 사용한 로그인(with JWT)을 구현하기 전, JWT에 대해 간단하게 알아보려고 한다! 🔎 JWT 개념JWT는 사용자 인증 정보를 JSON 형태로 안전하게 전달하는 Claim 기반 웹 토큰으로, Base64로 인코딩되어 클라이언트 - 서버 간 권한 검증에 사용된다.  🔧 JWT 구조JWT는 Header, Payload, Signature 총 세 부분으로 구성된다. 각 부분을 .을 이용해서 연결하고, 이 값을 Base64로 인코딩하여 JWT를 생성한다. 생성한 JWT는 HTTP 요청 시 Authorization 헤더에 Bearer JWT 토큰 형태로 전달된다.{ "Authorization": "Bearer {JWT 토큰}"} HeaderHeader는 JWT에서 사용할 토큰의 타입과 ..
[혼공컴운] Ch 04. CPU의 작동 원리
·
CS/컴퓨터구조
본 글은 강민철 님의 혼자 공부하는 컴퓨터구조 + 운영체제를 읽고 정리한 내용입니다.첨부된 이미지는 혼자 공부하는 컴퓨터구조+운영체제 유튜브 강의에서 캡쳐한 것입니다. ALU와 제어장치ALU계산을 담당하는 부품ALU가 받아들이는 정보피연산자레지스터부터 받음제어 신호제어장치로부터 받음 ALU가 내보내는 정보연산 결과특정 숫자, 문자, 메모리 주소CPU가 메모리에 접근하는 속도보다 레지스터에 접근하는 속도가 훨씬 빠르므로, 일시적으로 레지스터에 저장됨 플래그연산 결과에 대한 추가적인 상태 정보플래그 레지스터에 저장됨플래그 종류의미사용 예시부호 플래그연산 결과의 부호1이면 음수, 0이면 양수제로 플래그연산 결과가 0인지1이면 연산 결과가 0, 0이면 0이 아님캐리 플래그연산 결과 올림수나 빌림수가 발생했는지1..
[혼공컴운] Ch 03. 명령어
·
CS/컴퓨터구조
본 글은 강민철 님의 혼자 공부하는 컴퓨터구조+운영체제를 읽고 정리한 내용입니다.첨부된 이미지는 혼자 공부하는 컴퓨터구조+운영체제 유튜브 강의에서 캡쳐한 것입니다. 소스코드와 명령어고급 언어사람이 이해하고 작성하기 쉽게 만들어진 언어알고 있는 대부분의 프로그래밍 언어가 고급 언어에 속함ex. C, Java, Python, ... 저급 언어컴퓨터가 직접 이해하고 실행할 수 있는 언어고급 언어로 작성된 소스 코드를 실행하려면 반드시 저급 언어로 변환해야 함!저급 언어에는 두 가지 종류가 있음기계어어셈블리어기계어: 0과 1의 명령어 비트로 이루어진 언어즉, 0과 1로 이루어진 명령어 모음오로지 컴퓨터만을 위해 만들어진 언어라 사람이 그 의미를 이해하기 어려움어셈블리어: 0과 1로 표현된 명령어(기계어)를 읽기..
[혼공컴운] Ch 02. 데이터
·
CS/컴퓨터구조
본 글은 강민철 님의 혼자 공부하는 컴퓨터구조+운영체제를 읽고 정리한 내용입니다.첨부된 이미지는 혼자 공부하는 컴퓨터구조+운영체제 유튜브 강의에서 캡쳐한 것입니다. 0과 1로 숫자를 표현하는 방법정보 단위컴퓨터는 0 또는 1만 이해할 수 있음비트 (bit) 0과 1을 나타내는 가장 작은 정보 단위 1비트는 두 가지 정보 표현 가능 (0, 1)2비트는 네 가지 정보 표현 가능 (00, 01, 10, 11)...n비트는 2ⁿ가지 정보 표현 가능바이트 (byte)8개의 비트를 묶은 단위로, 비트보다 한 단계 큰 단위 (1byte = 8bit)총 256개(2^8)개의 정보를 표현할 수 있음표현 단위 (byte, kB, MB, GB, TB)바이트를 제외한 나머지 단위들을 이전 단위를 1,000개 묶어 표현한 단위..
[혼공컴운] Ch 01. 컴퓨터 구조 시작하기
·
CS/컴퓨터구조
본 글은 강민철 님의 혼자 공부하는 컴퓨터구조 + 운영체제를 읽고 정리한 내용입니다.첨부된 이미지는 혼자 공부하는 컴퓨터구조+운영체제 유튜브 강의에서 캡쳐한 것입니다. 컴퓨터 구조를 알아야 하는 이유문제 해결문제가 발생했을 때 컴퓨터 구조를 이해하고 있다면?문제 상황을 빠르게 진단할 수 있음문제 해결의 실마리를 다양하게 찾을 수 있음컴퓨터 구조 지식은 다양한 문제를 스스로 해결할 줄 아는 개발자로 만들어줌 성능, 용량, 비용어떤 CPU를 사용할지, 어떤 메모리를 사용할지 등을 직접 판단하고 현명하게 선택해야 함저렴한 컴퓨터? 부족한 성능..최신 컴퓨터? 높은 비용..개발한 프로그램이 어떤 환경에서 작동하는지 잘 이해하고, 프로그램을 위한 최적의 환경을 스스로 판단할 수 있어야 함컴퓨터 구조에서 배우는 내..
[BOJ] 18111: 마인크래프트 (JAVA)
·
Algorithm/완전탐색
📄 문제https://www.acmicpc.net/problem/18111 📝 풀이땅을 고르게 만들기 위해서는 먼저 목표로 하는 땅의 높이를 정해야 한다.  이를 위해 땅의 최소 높이와 최대 높이를 구해야 한다. 그 후, 목표 높이를 "최소 높이 ~ 최대 높이" 사이 값으로 지정하여 최적의 높이를 찾아 시간을 계산하면 된다.  땅의 최대 높이는 256이므로, 최소 높이에서 최대 높이까지 모든 경우를 확인해도 된다. 또한, 최대 높이가 크지 않으므로 땅의 정보를 2차원 배열 대신 1차원 배열에 저장할 수 있다. (해당 높이의 땅이 몇 개인지 저장하는 1차원 배열) 목표 높이를 정했으면 깎아야 할 블록의 개수와 쌓아야 할 블록의 개수를 계산한다. 깎아야 하는 블록의 개수: 해당 높이의 땅 개수 * (현재..