ThreadLocal를 이용한 로그 추적 (feat. 동시성 이슈)
·
Back-end/Java
요구사항[f8477cfc] OrderController.request()[f8477cfc] |-->OrderService.orderItem()[f8477cfc] | |-->OrderRepository.save()[f8477cfc] | |서비스를 운영하면서 로그를 추적하기 위한 프로그램을 작성한다고 해보자.HTTP 요청의 흐름대로 Controller, Service, Repository에서의 실행시간과 각각의 깊이를 나타내려면 어떻게 해야 할까?가장 단순하게 생각해 보면 파라미터를 통해 넘겨주는 방법을 고려해 볼 수 있다.이를 위해선 Controller에서 요청이 시작되면 해당 요청의 id 값과 깊이를 Service와 Repository에 넘겨주면 된다.해결법파라미터를 통해 HTTP 요청 id값 전달하기위..
Kafka란? (feat.성능과 고가용성)
·
Infra
카프카(Kafka) 란?카프카 홈페이지에 들어가 보면 카프카를 고성능 분산 이벤트 스트리밍 플랫폼이라고 소개하고 있다.또한 Fortune 100 기업 중 80프로 이상이 카프카를 사용한다고 한다. 아래의 이모티콘에서 볼 수 있듯다양한 업종에서 카프카를 사용하고 있다.카프카의 구조카프카의 구조를 간단히 도식화하면 위와 같은데 프로듀서와 컨슈머는 메시지(이벤트)를 기반으로통신한다. 프로듀서는 카프카 클러스터에 메시지를 저장하고, 컨슈머는 카프카 클러스터에서 메시지를 가져온다. 카프카 클러스터를 이루고 있는 브로커는 각각 하나하나가 서버라고 생각하면 되는데이런 브로커들이 모여 카프카 클러스터를 형성한다. 카프카 클러스터를 관리하기 위해 주키퍼 클러스터(앙상블)가 필요하다 (Kafka 2.8.0 버전부터 주키퍼..
클러스터와 노드 개념
·
Infra
클러스터란?위키백과에서 찾아보면 컴퓨터 클러스터는 여러 대의 컴퓨터들이 연결되어하나의 시스템처럼 동작하는 컴퓨터들의 집합을 말한다고 한다.노드란?노드는 클러스터를 구성하는 개별적인 컴퓨터(서버), 가상머신, 혹은 컨테이너 등을 가리키는 개념이다.여기서 주의할 것은 노드라고 해서 무조건 컴퓨터를 가리키는 것이 아니란 것이다.(예를 들어 쿠버네티스에서의 노드는 컴퓨터이지만, HDFS(Hadoop Distributed File System)에서 노드는대부분 스토리지 장치이다.)마스터 노드(Master Node)와 워커 노드(Worker Node)노드는 마스터 노드와 워커 노드로 나누어진다 (구체적인 명칭이나 역할은 사용하는 기술에 따라 달라질 수 있다.) 마스터 노드클러스터 전체를 모니터링하고, 자원(CPU,..
[BOJ][Java] 2193번 이친수
·
PS
문제 링크 : https://www.acmicpc.net/problem/2193 이 문제는 동적 계획법(DP)을 사용하면 해결할 수 있는 기본적인 문제이다.DP의 핵심은 문제를 작은 부분으로 나누고 그 부분들을 이용하여큰 문제를 해결하는 것이다.이 과정에서 점화식을 이용하게 되는데, 이때 점화식은 유일하게 존재하는 게 아닌 푸는 사람마다 다른 점화식을 도출할 수 있다. 먼저 문제의 조건을 살펴보면이친수의 시작조건은 무조건 1이어야 한다. 또한 1이 연속으로 나올 수 없다.이런 조건을 가지고 그림을 그려가며 조건을 시각화해보면 아래와 같다. 위와 같이 1은 0으로만, 0은 0과 1로 변형할 수 있다는걸 알 수 있다.이때 1과 0을 각각의 DP배열로 만들거나 2차원 배열을 통해 해결할 수도 있지만하나의 1차..