목록전체 글 (119)
철학과 학생의 개발자 도전기
JWT(JSON Web Token)란 무엇인가?JWT(Jason Web Token)는 사용자 인증 및 정보 교환에 널리 사용되는 경량의 JSON 기반 표준입니다(JWT, RFC 7519). 서버와 클라이언트 간의 안전한 정보 전송을 가능하게 하며, 인증 토큰으로 활용되어 로그인 세션 관리 등에 이용됩니다.작동 원리 및 구조JWT는 사용자가 시스템에 로그인할 때 발급됩니다. 서버는 사용자의 인증 정보를 검증한 후, JWT를 생성하여 클라이언트에 반환합니다. 클라이언트는 이후의 요청에 이 토큰을 포함시켜 서버에 보내, 자신이 이미 인증됐음을 증명합니다. 서버는 요청을 받을 때마다 JWT의 유효성을 검증하고 요청에 응답합니다. JWT는 세 부분으로 구성됩니다: 헤더(Header), 페이로드(Payload), ..

OAuth란 무엇인가? 인터넷 상에서 다양한 서비스를 이용하면서, 여러분은 아마도 "Facebook으로 로그인하기", "Google 계정으로 시작하기"와 같은 옵션을 본 적이 있을 것입니다. 이러한 편리한 로그인 옵션들은 어떻게 가능할까요? 바로, OAuth라는 개방형 인증 표준 덕분입니다. OAuth는 서비스 제공자 사이에서 사용자의 개인정보 접근 권한을 안전하게 교환할 수 있도록 해줍니다, 이는 사용자가 자신의 아이디와 비밀번호를 직접 공유하지 않고도 가능합니다. OAuth의 작동 원리 OAuth 인증 과정은 다음과 같은 단계로 이루어집니다: 사용자는 서비스 이용을 요청합니다. 클라이언트(서비스 이용을 요청하는 애플리케이션)는 사용자의 인증 및 권한 부여를 위해 인증 서버에 접근합니다. 인증 서버는 ..
1. 개요 정의: 비트마스크는 정수의 이진수 표현을 사용하여, 각 비트가 특정 상태나 조건을 나타내도록 하는 기법이다. 활용 예: 설정 옵션, 접근 권한, 기능 플래그 등 다양한 상태를 효율적으로 저장하고 관리한다. 2. 특징 비트마스크로 집합을 표현하는 방식은 다음과 같다 k번째 원소 포함여부: A & (1
1. 개요 다익스트라 알고리즘은 가중치가 있는 그래프에서 두 노드 간의 최단 경로를 찾기 위한 알고리즘이다. 주로 네트워크 라우팅 프로토콜이나 GPS 장치에서 경로를 계획하는 데 사용됩니다. 이 알고리즘은 그래프의 한 정점에서 다른 모든 정점까지의 최단 거리를 계산한다. 2. 특징 가중치 포함: 모든 간선은 양의 가중치를 가진다. 음수 가중치가 있는 경우, 알고리즘이 올바르게 작동하지 않는다. 그리디 알고리즘: 다익스트라 알고리즘은 현재 상태에서 최적의 해를 선택하는 그리디(Greedy) 방법론을 사용한다. 시간 복잡도: 우선순위 큐(Priority Queue)를 사용할 경우 O((V+E)logV)이다. (V는 정점의 수, E는 간선의 수) 3. 코드 import java.util.Arrays; impo..
1. 개요 LCA 알고리즘은 주어진 두 노드의 가장 가까운 공통 조상을 찾는 알고리즘이다. 비순환 그래프에서 두 노드를 연결하는 경로에 공통으로 존재하는 조상 노드 중 가장 가까운 조상을 찾는다. 이 알고리즘은 트리 구조에서 데이터의 계층적 관계를 분석할 때 유용하게 사용된다. 2. 특징 시간 복잡도: O(depth)이며 최악의 경우 O(N)이다. N은 원소 개수 두 노드의 depth를 맞춘 후, 하나씩 거슬러 올라가며 공통 조상을 찾는다. 3. 코드 public class LCATest { public static void main(String[] args) { // 예제 트리 구성 // 부모 인덱스 배열 (0번 인덱스는 사용하지 않음) int[] parentList = {0, 0, 1, 1, 2, 2..
1. 개요 최장 증가 부분 수열(LIS)은 주어진 수열 내에서 순서를 유지하면서 선택할 수 있는 가장 긴 증가하는 부분 수열을 찾는 문제다. 가장 긴 증가하는 부분 수열의 길이를 찾는 것이 목적이며, 해당 수열 자체를 구하는 것이 목표일 수도 있다. 2. 특징 다이나믹 프로그래밍 활용: LIS는 다이나믹 프로그래밍을 사용하여 해결할 수 있는 대표적인 예제 중 하나이다. 이 방식은 문제를 재귀적으로 분할하고, 중복 계산을 피하기 위해 이전에 계산된 결과를 저장한다. 이진 탐색 활용: 이진 탐색을 통해 LIS의 길이를 더 효율적으로 구할 수 있다. 이 방법은 수열의 각 요소를 순차적으로 검토하면서, 현재까지의 LIS를 유지하는 데 필요한 위치를 빠르게 찾아 업데이트한다. 시간 복잡도: 다이나믹 프로그래밍 방..
1. DFS 그래프의 깊은 부분을 우선적으로 탐색하는 방법 탐색을 시작한 정점에서 출발하여, 한 방향으로 갈 수 있는 경로가 끝날 때 까지 깊게 탐색하고, 더 이상 탐색할 곳이 없으면 마지막에 통과한 정점으로 되돌아가 다른 방향의 정점을 탐색 이 과정을 모든 정점을 방문할 때까지 반복 2. BFS 시작 정점으로부터 가까운 정점을 먼저 방문하고, 멀리 떨어진 정점을 나중에 방문하는 방법 시작 정점으로부터 각 정점까지의 최단 경로를 찾는 데 사용됨 큐(Queue)를 사용하여 구현 3. 코드 import java.util.*; public class GraphTest { static List graph[]; static boolean visited[]; public static void main(String ..
1. 개요 정렬된 배열에서 특정 요소의 위치를 찾기 위한 알고리즘이다. 탐색 범위를 반으로 줄여가며 원하는 값을 찾는다. 배열이 정렬되어 있을 때만 사용할 수 있으며, 매우 빠른 탐색 속도를 가진다. 2. 특징 시간 복잡도: O(log n) n은 배열의 크기 탐색 범위를 매 단계마다 반으로 줄임으로써, 대규모 데이터셋에서도 빠른 탐색을 가능하게 한다. 3. 코드 public class BinarySearchTest { public static void main(String[] args) { int[] arr = { 2, 4, 6, 8, 10, 12, 14, 16 }; int target = 10; int resultIndex = binarySearch(arr, target); if (resultIndex..