전체 글 (236) 썸네일형 리스트형 MDC(Mapped Diagnostics Context)를 사용하여 로그 추적하기 로깅이란로깅이란, 시스템이 동작할 때 시스템의 상태 및 동작 정보를 기록하는 것을 의미한다. 로깅을 통해 개발자는 개발 과정 또는 개발 후에 발생할 수 있는 예상치 못한 애플리케이션의 문제를 진단할 수 있고, 다양한 정보를 수집할 수 있다. 사용자 로그의 경우 분석 데이터로 활용할 수도 있다. 하지만 적절한 수준의 로그 기록 기준을 잡지 못하면 방대한 양의 로그 파일이 생성되는 문제를 겪거나, 의미 있는 로그를 쌓지 못하는 경우가 발생할 수 있다. 결국 효율적으로 로깅하는 방법을 이해하는 것이 중요하다.로깅 라이브러리로깅 관련 프레임워크는 대표적으로 log4j, logback, log4j2가 있고, 이들으르 통합해서 인터페이스로 제공하는 slf4j 라이브러리가 있다. 현재 log4j는 deprecated.. [백준] 5567. 결혼식 https://www.acmicpc.net/problem/55671. BFS로 푸는 방법import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static StringTokenizer st; public static void main(String[] args) throws IOException { int n = Integer.parseInt(br.readLine.. 다익스트라에서 방문처리를 하는 시점 https://www.acmicpc.net/problem/1753위 문제는 기본적인 다익스트라 문제이다. 그런데 다음과 같이 풀면 틀린다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static StringTokenizer st; public static void main(String[] args) throws IOException { st = new.. 분산 환경에서 데이터 일관성 확보하기 0. 개요프로젝트에서 PT 수업 예약 API를 개발하며 고려한 점들을 정리하고자 한다. PT 수업 예약 요청은 Pt 서버와 Auth 서버를 거치는 분산 환경에서 처리된다. 단일 서버에서 모든 로직을 수행한다면 구현이 간단하지만, 여러 서버를 거치게 되면 트랜잭션의 원자성 및 데이터 일관성을 유지하기 위해 다양한 상황을 고려해야 한다. 이 글은 분산 환경에서 어떤 것들을 고려했는지 그 고려 사항들을 정리한 글이다.1. 분산 환경에서 로컬 트랜잭션들 간 원자성 보장하기분산 환경에서의 원자성분산 환경에서는 여러 개의 로컬 트랜잭션들이 묶여 하나의 논리적인 트랜잭션을 구성한다. 그렇기 때문에 로컬 트랜잭션들이 순차적 또는 병렬로 실행되면서 원자성이 깨지는 문제가 발생할 수 있다. 예를 들어, 마이크로서비스 A.. Transactional Outbox Pattern을 이용한 분산 환경에서의 결과적 일관성 확보 문제 상황사용자 정보를 변경한 후 커밋되었지만 메시지가 발행되지 않는 경우메시지를 발행했지만 사용자명 변경 내역이 롤백된 경우다음과 같이 컨트롤러에서 userService를 호출해서 사용자 정보를 변경하여 DB에 커밋한 후 kafkaService를 호출해서 변경된 사용자 정보를 카프카 메시지로 발행한다고 가정하자.@RestController@RequiredArgsConstructorpublic class UserController { private final JwtUtils jwtUtils; private final UserService userService; private final KafkaService kafkaService; @PutMapping("/edit") publ.. 카프카란 무엇인가? 카프카의 탄생 배경카프카는 미국의 대표적인 소셜 네트워크 서비스인 링크드인에서 처음 시작된 기술로, 링크드인 서비스가 급속도로 성장하면서 발생하게 된 여러 이슈들을 해결하기 위해 탄생했다. 링크드인 서비스가 성장하면서 어떤 상황에서 어떤 새로운 시스템에 대한 개발 요구가 높아졌길래 카프카가 탄생하게 된 것일까? 다음 그림은 카프카가 개발되기 전 링크드인의 시스템 구성도이다. 카프카 등장 전에는 각 서비스가 엔드투엔드로 연결되어 있었다. 이러한 엔드투엔드 연결 방식의 아키텍처는 많은 문제점이 있었다.첫 번째로, 통합된 전송 영역이 없으니 시스템 복잡도가 증가할 수밖에 없다. 따라서 문제를 발견하기 위해서는 이와 관련된 여러 데이터 시스템을 확인해야 했다.두 번째로, 데이터 파이프라인 관리의 어려움이다. .. 토큰(JWT) 인증 방식을 좀 더 안전하게 설계하기 JSON Web Token의 약자인 JWT는 온라인 네트워크에서 정보를 안전하게 통신할 때 사용하는 인터넷 표준 토큰이다. JWT는 인증, 정보 교환 등 다양한 용도에 사용된다. 이때 주고받는 정보를 클레임(Claim)이라고 하고, 클레임의 집합은 JSON 객체로 표현한다.1. JWT의 두 가지 유형JWT에는 두 가지 유형이 있다. 더 널리 사용되는 첫 번째 방식은 JWS(JSON Web Signature)이다. JWS 방식을 사용하면 클레임의 내용을 누구나 읽을 수 있지만, 서명되어 있기 때문에 데이터의 무결성이 보장된다. 두 번째 방식인 JWE(JSON Web Encryption)이다. JWE에서는 클레임 자체를 암호화한다. 그래서 복호화 방법을 알고 있어야만 페이로드를 읽을 수 있다. 보안 측면에서.. [백준] 1058. 친구 https://www.acmicpc.net/problem/10581. 플로이드워셜로 푸는 방법플로이드워셜은 N개의 노드에서 N개의 노드로 이동하는데 걸리는 최단 거리(비용)을 구할 수 있다. 즉, 각 노드에서 다른 N-1개의 노드로 몇 번의 이동으로 도달 가능한지 구한 후(=사람 a와 사람 b의 관계), 1번 또는 2번으로 이동이 가능하면 2-친구 관계이므로 카운트해주면 된다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;public class Main { static BufferedReader br = new BufferedReader(new Inpu.. 이전 1 2 3 4 5 ··· 30 다음