벨만-포드 알고리즘 (Bellman-Ford Algorithm)
·
알고리즘
벨만-포드 알고리즘이란?벨만-포드 알고리즘은 그래프에서 특정 시작 노드로부터 다른 모든 노드까지의 최단 경로를 구할 때 사용하는 알고리즘입니다. 특히, 가중치가 있는 그래프에서 최단 경로를 구하기 위해 사용할 수 있습니다. 특징벨만-포드 알고리즘의 특징은 다음과 같습니다.가중치가 음수인 그래프를 처리할 수 있다.음수 사이클이 있는 경우를 식별할 수 있다.시간 복잡도는 O(NM)이다. (N은 노드의 수, M은 간선의 수). 벨만-포드 알고리즘 동작벨만–포드 알고리즘은 노드의 수가 N개일 때, 모든 간선을 최대 N−1번 반복하며 최단 경로의 길이를 갱신합니다. 노드가 N개인 그래프에서 사이클을 포함하지 않는 최단 경로는 최대 N−1개의 간선으로 구성될 수 있기 때문에, N-1번의 라운드를 거치며 모든 ..
[Java] 동시성 제어 2탄 - 세마포어(Semaphore)
·
Teck Stack/Java
개요[Java] 동시성 제어 1탄 - Lock [Java] 동시성 제어 1탄 - Lock개요멀티 스레딩 환경에서 발생할 수 있는 동시성 문제 상황을 살펴보고, Java에서 이를 어떻게 제어할 수 있는지 알아보고자 합니다. 동시성 제어에는 다양한 방법이 존재하지만, 이번 포스팅에taetae99.tistory.com 이전 게시글에 이어서, Java 환경에서 동시성을 제어하는 방법에 대해 작성하겠습니다. 이번 게시글에서는 세마포어를 활용한 동시성 제어를 다루고 있습니다. 세마포어란?세마포어는 동시에 실행할 수 있는 스레드 수를 제한하는 데 사용합니다. 즉, 자원에 대한 접근을 일정 수준으로 제한하고 싶을 때 사용할 수 있습니다. 세마포어의 동작은 다음과 같습니다.세마포어에서 퍼밋을 획득한다. ( permi..
[Java] 동시성 제어 1탄 - Lock
·
Teck Stack/Java
개요멀티 스레딩 환경에서 발생할 수 있는 동시성 문제 상황을 살펴보고, Java에서 이를 어떻게 제어할 수 있는지 알아보고자 합니다. 동시성 제어에는 다양한 방법이 존재하지만, 이번 포스팅에서는 그중에서도 Lock을 활용한 제어 방식에 대해 중점적으로 다뤄보고자 합니다. 동시성 문제 상황 상품 클래스(Product)에 재고 감소 로직(decrease)이 있습니다.public class Product { private String name; private int stock; public Product(String name, int stock) { this.name = name; this.stock = stock; } public void decreas..
[Cache] 서버 캐시란?
·
Teck Stack/Redis
개요'주니어 백엔드 개발자가 반드시 알아야 할 실무 지식'을 읽고 내용을 정리한 게시글입니다. 내용 설명이 더 필요하다고 생각한 부분은 추가하였습니다. 서버 캐시응답 시간을 줄이고 처리량을 높이기 위해 DB 서버를 수직 또는 수평 확장할 수 있다. 하지만 DB 서버를 확장하려면 비용이 많이 든다. DB 서버를 확장하지 않고 응답 시간과 처리량을 개선하기 위해 캐시 사용을 고려할 수 있다. 캐시에 데이터를 저장하면 동일한 데이터를 요청할 때 DB가 아닌 캐시에서 데이터를 읽어와 응답할 수 있다. 일반적으로 캐시에서 데이터를 읽는 속도가 DB보다 빠르기 때문에 자주 조회되는 데이터를 캐시에 보관하여 응답시간을 줄일 수 있다. 캐시에서 데이터를 읽는 속도가 빠른 이유는, 캐시 사용 시 메모리에 데이터를 저장..
[Auth] OAuth2 로그인 시 Access Token을 헤더에 담는 방법
·
Teck Stack/Spring
개요지난 글에 이어 이번에는 OAuth2 로그인 방식에서 JWT를 Access Token / Refresh Token 구조로 사용할 때, Access Token을 헤더에 담는 방법을 다루어보고자 합니다. 문제 상황Access Token과 Refresh Token으로 인증을 관리하게 되면 다음과 같은 구조로 설계하게 됩니다. Access TokenHTTP Header에 담는다.Authorization : Bearer {AccessToken} Refresh TokenHttpOnly 쿠키에 담는다. 하지만 OAuth2 소셜 로그인에 성공하면, 리다이렉트가 수행되어 Access Token을 헤더에 담아 전달할 수 없습니다. 그렇다면 Access Token을 어떻게 헤더로 가져올 수 있을까요? 우선 Refre..
[Auth] OAuth2 구글 로그인 + JWT 방식의 인증 플로우
·
Teck Stack/Spring
개요OAuth2와 JWT로 인증을 구현 후, 복습하면서 OAuth2 + JWT 인증 플로우를 정리하게 되었습니다. Google 인증 연동 과정 및 코드는 첨부하지 않고, 인증 플로우에 대해 정리하고자 합니다. OAuth2 Code Grant 방식의 동작 순서OAuth2의 Code Grant 방식은 다음과 같은 순서로 동작합니다. 1. 로그인 페이지로 이동2. ID, Password로 로그인 요청3. 로그인이 성공하면 설정한 redirect_url로 리다이렉트가 되며 쿼리 파라미터로 코드를 전달4. 코드를 통해 인증 서버에 access 토큰 요청 (여기서 access_token은 Google API로 전송하기 위한 토큰)5. access 토큰을 통해 유저 정보를 요청 및 획득 OAuth2 로그인 책임..