영속성 엔티티는 DB 테이블의 컬럼을 모두 가져야 할까?
·
CS & Architecture
"만들면서 배우는 클린 아키텍처"라는 책을 읽으며 고민했던 내용을 정리해 본 글입니다. 다른 의견이 있으시다면 댓글 언제나 환영합니다! "만들면서 배우는 클린 아키텍처"를 읽으면서 다음과 같은 질문이 떠올랐다. 조회/명령 모델을 분리하여 DTO Projection을 빈번하게 사용하는 상황에서, 영속성 엔티티는 반드시 테이블의 모든 컬럼을 갖고 있어야 할까? 클린 아키텍처에서 영속성 엔티티의 역할 클린 아키텍처는 계층 간 의존성을 끊는 것을 목표로 한다. 서비스는 DB를 모르고, DB는 도메인의 비즈니스 규칙을 모르도록 설계한다. 이를 위해 두 가지 객체를 명확하게 분리한다. 도메인 모델순수 Java 객체. JPA 모름비즈니스 규칙과 행위를 담음서비스 계층에서 사용영속성 엔티티@Entity 붙은 JPA..
벨만-포드 알고리즘 (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..