분류 전체보기
-
Kubernetes 환경에서 gRPC 로드밸런싱Infra 2024. 11. 17. 14:44
gRPC는 HTTP/2 기반으로 동작을 하고 HTTP/2는 하나의 TCP 연결에서 여러개의 스트림을 처리하도록 설계되어 클라이언트와 서버간의 연결이 오래 유지되는 Long lived connection 방식을 사용합니다.이러한 특성으로 인해 Kubernetes의 Connection Based 로드밸런싱이 gRPC에서는 정상적으로 동작하지 않게 되고 모든 요청이 동일한 파드에 고정되게 됩니다.Connection based 로드밸런싱이란?쿠버네티스의 기본 로드밸런싱 정책으로 L4 레이어에서 동작하며 TCP 연결이 생성될 때 로드밸런서가 특정 파드에 연결을 할당하고 연결이 종료될 때 까지 해당 파드에 트래픽을 라우팅하는 방식입니다.동작 방식클라이언트가 Service의 IP(ClusterIP, NodePort,..
-
[JPA] Optimistic, Pessimistic LockJAVA/SPRING 2024. 8. 10. 16:06
낙관적 락(Optimistic Lock)낙관적 락은 사전에 테이블 로우에 락을 거는 방식이 아닌 충돌이 발생했을 경우에 대비하는 방식입니다.테이블에 특정 컬럼을 추가하여 조회 시점의 값과 저장하려는 시점의 값이 동일한지 확인하여 충돌을 방지하도록 동작합니다.이는 충돌 발생 빈도수가 낮은 상황에 적합하며 지속적인 락으로 인한 성능 저하를 막을 수 있습니다.아래는 Spring boot, JPA에서 낙관적 락을 적용하는 예시입니다.Entity@Entityclass UserEntity( id: Long, name: String, version: Int,) { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long..
-
[Istio] External AuthorizationInfra 2024. 8. 4. 15:58
Istio Serive MeshIstio는 쿠버네티스 클러스터 내에서 서비스 간의 통신을 제어하고 관리하는 서비스 메쉬로 트래픽 관리, 보안, 정책 적용 및 모니터링을 제공하여 마이크로서비스의 복잡성을 관리하는 데 도움을 줍니다.External AuthorizationExternal Authorization은 Istio의 보안 기능중에 하나로 인증 서비스와 연동하여 요청에 대한 엑세스 제어를 할 수 있도록 중앙에서 관리 해줍니다.External Authorization은 Istio 데이터 플레인에서 트래픽을 처리하는 프록시인 Envoy Filter를 사용하여 구현됩니다. Envoy는 요청을 인증 서비스로 경유시키도록 하고 인증 서비스에 의해서 액세스 가능 여부를 결정하게 됩니다. 구성 요소Authori..
-
[Kubernetes] 쿠버네티스 클러스터 구조Infra 2024. 3. 31. 17:32
K8S 구조 쿠버네티스는 크게 클러스터 전체를 관리하는 컨트롤 플레인과 실제 구동되는 컨테이너가 배포되는 워커 노드로 나누어 집니다. 컨트롤 플레인 etcd 쿠버네티스 구성요소들의 상태 값, 설정등을 key-value 형태로 저장하는 데이터베이스 역할을 담당 kube-apiserver 쿠버네티스 클러스터의 내, 외부 상호 작용을 위해 API 통신을 담당하는 역할 Rest API 호출 또는 kubectl, kubeadm 과 같은 cli를 사용하여 api server에 접근할 수 있음 kube-scheduler 클러스터의 상태가 정상적인지 체크 각 노드의 CPU, 메모리 등의 자원 상태를 체크하여 신규 컨테이너 배치를 결정 kube-controller-manager 클러스터에 실제 실행을 명령하는 역할을 담..
-
HTTPS의 동작 원리Network 2024. 1. 27. 15:40
HTTPS란 HTTP에 암호 계층(SSL/TLS)을 추가한 개념의 프로토콜입니다. HTTPS는 데이터를 암호화하여 전송하기 위해 인증서를 통해 신뢰할 수 있는 서버인지 확인하고 서로가 함께 알 수 있는 암호화 키를 사용하여 데이터를 암호화합니다. SSL/TLS Handshake 클라이언트에서 사용 가능한 암호화/해시 알고리즘과 랜덤한 값, SSL/TLS 버전 정보를 서버에 전달합니다. 서버는 받은 암호화/해시 방식 중 우선순위가 높은 알고리즘과 랜덤한 값, 자신을 증명하기 위한 인증서를 클라이언트에 전달합니다. 클라이언트는 서버의 인증서가 올바른지 확인하기 위해 저장되어있는 CA 공개키로 인증서를 복호화합니다. 클라이언트는 자신이 만든 랜덤한 값과 서버에서 내려준 랜덤한 값을 사용하여 premaster ..
-
브라우저에 URL을 입력하면 어떤 동작을 하는가Network 2024. 1. 27. 14:25
1. URL 파싱 URL을 입력받은 브라우저는 URL을 파싱하여 어떠한 프로토콜, 도메인, 포트로 구성된 구조인지 해석합니다. 2. DNS 기록 확인 브라우저는 연결할 서버를 파악하기 위해 도메인으로 IP 주소를 확인하는 과정을 거칩니다. 이때 IP 주소를 확인하기 위해 먼저 캐시된 DNS 기록을 확인하는데 순서대로 브라우저의 캐시, OS 캐시, 라우터 캐시, ISP 캐시에서 캐시된 DNS 기록을 확인합니다. 캐시된 DNS 기록이 없다면 ISP가 DNS 서버에 질의를 하여 IP 주소를 찾습니다. 이때 재귀적 질의를 통해 최상위 DNS 서버 까지 질의하게 될 수 있습니다. 3. 서버와의 TCP 연결 서버의 IP 주소를 확인 후 서버와 데이터 패킷 전송을 위해 TCP 연결을 하게 됩니다. 연결은 3-way ..
-
[DB] 클러스터링(Clustering)DB 2024. 1. 21. 16:23
클러스터링 클러스터링은 동일한 데이터베이스를 여러대의 서버가 관리하도록 수평적인 구조로 분산 환경을 구성하여 Failover 시스템을 구축할 수 있습니다. 데이터베이스 서버의 상태가 1개라도 Active 상태이면 장애 없이 서비스를 운영할 수 있습니다. 또한 여러대의 데이터베이스 서버에 로드 밸런싱을 통해 부하 분산도 가능합니다. 동작 방식 Active Active 여러대의 데이터베이스 서버를 모두 Active 상태로 두는 방식으로 서버 하나에 장애가 발생하더라도 다른 서버가 역할을 바로 대행할 수 있어 서비스의 중단을 방지할 수 있습니다. 하나의 데이터베이스를 공유하게 된다면 병목이 발생할 수 있습니다. 활성 상태의 서버를 동시에 여러대를 운영한다면 비용이 증가하게 됩니다. Active StandBy ..
-
[알고리즘] 동적 계획법 (Dynamic Programming)Algorithm 2024. 1. 6. 12:06
동적 계획법이란? 하나의 큰 문제를 여러개의 작은 단위의 문제로 나누고 작은 단위의 문제를 먼저 해결 후 결과를 저장한 뒤 더 큰 단위의 문제를 해결할 때 재활용하여 사용됩니다. 동적 계획법은 재귀 함수와 동작 방식이 유사합니다. 하지만 재귀 함수는 작은 단위의 문제 해결이 여러번 반복 될 수 있는 구조입니다. 대표적인 예시인 피보나치 수열로 보면 점화식은 f(n) = f(n - 1) + f(n-2) 이지만 f(n - 1), f(n-2)에서 각 함수를 한번씩 더 호출하면 동일한 값을 2번씩 구하게 되고 그로인해 피보나치 수를 구하기 위한 함수의 호출 횟수는 기하급수 적으로 증가하게 되고 시간 복잡도는 O(n^2)가 됩니다. 동적 계획법을 사용하게 된다면 작은 단위의 문제를 저장하게 되어 중복된 계산을 방..