9. 분산 추적 (Spring Cloud Sleuth) 및 로깅 (Zipkin)9.1 분산 추적9.1.1 분산 추적이란?분산 시스템에서 서비스 간의 요청 흐름을 추적하고 모니터링하는 방법각 서비스의 호출 관계와 성능을 시각화하여 문제를 진단하고 해결할 수 있도록 도움주요 개념: 트레이스(Trace), 스팬(Span), 컨텍스트(Context)트레이스(Trace) : 트레이스는 하나의 요청이 시작부터 끝까지 각 서비스를 거치는 전체 흐름스팬(Span) : 스팬은 분산 추적에서 가장 작은 단위로, 특정 서비스 내에서의 개별 작업 또는 요청컨텍스트(Context) : 컨텍스트는 요청이 서비스 간에 전달될 때 함께 전파되어, 각 서비스가 요청의 전체 흐름에 대한 정보를 가질 수 있게 함9.1.2 왜 분산 추적이..
분류 전체보기
5. 서킷 브레이커 (Resilience4j)5.1.1 서킷 브레이커란?서킷 브레이커는 마이크로서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지하는 패턴외부 서비스 호출 실패 시 빠른 실패를 통해 장애를 격리하고, 시스템의 다른 부분에 영향을 주지 않도록 합니다.상태 변화: 클로즈드 -> 오픈 -> 하프-오픈5.2.2 Resilience4j의 주요 특징서킷 브레이커 상태: 클로즈드, 오픈, 하프-오픈 상태를 통해 호출 실패를 관리클로즈드(Closed):기본 상태로, 모든 요청을 통과호출이 실패하면 실패 카운터가 증가, 실패율이 설정된 임계값(예: 50%)을 초과하면 오픈 상태로 전환예시: 최근 5번의 호출 중 3번이 실패하여 실패율이 60%에 도달하면 오픈 상태로 전환오픈(Open):모든..
개요언제?검색 등의 요청에서 파라미터가 많음쿼리문을 객체로 다루어 동적으로 생성하고자 할 때 사용→ 쿼리문의 where 조건 변동성이 크고 복잡하여 쿼리문을 객체로 다루어 동적으로 생성하고자 할 때 사용ORM JPA 로 웬만한 건 다 할 수 있지만, JPA 어노테이션으로 네이티브 쿼리로만 관리하기에는 쿼리가 복잡하거나 가독성이 떨어지거나 유지보수가 어려울 경우에 사용 장점sql 실행하지 않아도 컴파일 시 오류 발견 가능메서드로 쿼리 구성 가능유지보수성 알고 가야 할 것, 선택의 이유queryDSL 도 JPA 처럼 내부적으로 EntityManager 기반으로 동작JDBC 템플릿 기준으로 쿼리 생성하는 건 똑같음항상 왜 선택했는가를 말할 줄 알아야함복잡한 쿼리문에 대헤 조금만 쿼리가 길어져도 유지보수가 어려..
에러 메세지인데 이게 중요한 게 아니었음2024-11-12T16:10:25.033+09:00 ERROR 16884 --- [spartaOrderSystem] [ main] o.s.b.web.embedded.tomcat.TomcatStarter : Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'webSecurityConfig' defined in file [C:\\JHPro\\spring_2024\\sparta\\back\\build\\classes\\java\\main\..
음나 통합테스트 안짜봤구나공부 고! JUnit5 쓸 것임 개념@SpringBootTest : 모든 스프링 빈을 로드(스캔&등록)함. application context 를 생성하여 테스트 실행운영환경과 가장 유사한 테스트 가능옵션classes : 해당 클래스만 빈으로 등록(모든 빈 등록x)properties, value : 같은 속성. @Value 에 들어가는환경변수 값 주입webEnvironment : application context 관련 설정MOCK : 기본값. application context 를 생성하지만 mock 환경으로 제공하므로 내장서버(tomcat) 실행되지 않음RANDOM_PORT : 실제 서블릿환경 제공. application context 생성. 내장서버 실행. 사용되지 않는 ..
[백준] 1074 Z | Gol5 | 분할정복(divide and conquer) Pythonhttps://www.acmicpc.net/problem/1074 접근사분할 하면서 좌표 위치에 따라 순서를 더해 계산해가면 될 것 같았다유형 : 분할정복[문제해석] 2^N 크기의 정사각형 배열을 Z모양으로 나눠 탐색할 때, 특정 칸을 탐색하는 순서 구하기 Z모양 탐색이란 : 2사분면 > 1사분면 > 3사분면 > 4사분면 순 [구상] 4x4. N=2 4x4/4 = 4 가 제일 큰 사각형 크기. 현재 탐색중인 면 크기 = S 이 중에 누구? r,c 값이 S / 2 보다 큰가?작은가? 그 안에서 다시 2^N/2 /2 0 1 2 3 0 | 0 1 4 5 1 | 2 3 6 7 2 | 8 9 ..
발단pk로 auto increment 된 정수형을 쓰느냐 UUID를 쓰느냐 둘다 쓰느냐의 이야기를 하다가CUID 라는 걸 알게 되었다.최근에 TSID 도 쓰게 되어서 유니크한 값에 사용되는 자료형들에 대해 짧게 적어보려는 글의 시작(+UUID version,GUID, TSID 와의 비교까지 해보면..좋을 듯?) CUIDhttps://github.com/paralleldrive/cuid2 GitHub - paralleldrive/cuid2: Next generation guids. Secure, collision-resistant ids optimized for horizontal scaling and perforNext generation guids. Secure, collision-resistant i..
배경websocket 에서의 사용자 인증로직을 구현하다가사용자 정보를 세션으로 관리하는 과정에서ws 연결되어있는 사용자가 http 요청을 보내면 세션이 어떻게 되는 거지? 라는 생각이 들었다분리되어 관리된다는 말을 봤는데 진짜인지 궁금해서 테스트해봤다. 시나리오회원가입ws 연결 맺고 세션에 사용자 정보 저장하기ws 연결 맺은 클라이언트가 http 요청 보내고,http 요청 시 세션 정보(세션 id, 사용자 정보) 로그로 출력해보기예상안1 : ws와 http 세션이 따로 관리되어 세션id가 다르고 사용자 정보가 확인되지 않음예상안2 : 같은 클라이언트로 인식해서 ws연결에서 세션에 저장된 사용자 정보가 출력됨 츄라이~ 결과1. 소켓 연결 전 http 요청으로 확인한 session id : 7491B3D4C..
[백준] 5430 AC | deque, 구현 | Gol5 Pythonhttps://www.acmicpc.net/problem/5430 접근유형 : deque, 구현 [문제 해석] 주어진 문자열에 주어진 연산을 수행한 결과를 출력양쪽에서 제거가 일어나야 하므로 데크deque 사용시간제한이 넉넉하지는 않은 것 같아서뒤집기 연산 시 문자열을 실제로 뒤집지 않고 현재 앞방향을 표시해두고 그에따라 처리하는 방향으로 풀어보겠음시간 제한 : 1초 트러블 슈팅입력을 깔끔하지 않게 주는 경우를 많이 겪어보지 못해서아래 경우들 처리에 좀 시간이 걸렸다. 알아두자~앞뒤의 특정 문자 제거하고 입력받기 : string = input().strip(”\n그리고제거할문자들”)** input()은 마지막에 \n가 같이 들어오므로 s..
[백준] 2696 치즈 | BFS | Gol5 Pythonhttps://www.acmicpc.net/problem/2636 접근유형 : bfs [문제 해석] 치즈의 공기에 노출된 부분이 한시간에 한칸씩 녹을때, 마지막에 녹은 치즈 칸수와 다 녹기까지 걸린 시간은?-> BFS로 공기를 상하좌우 인접한 것만 탐색해나가면 치즈 속 구멍을 공기로 인식하지 않도록 처리가 가능해짐! 구상 1. 전체 치즈 개수 적어둠 2. BFS 돌며 공기랑 인접한(이번에 녹을) 치즈 위치 적어둠 3. 녹임. 녹은 치즈 개수를 전체 치즈 개수에서 빼서 남은 치즈 개수 계산해둠 4. 다 녹을 때까지 반복 트러블 슈팅구멍이 아닌 공기에 노출된 부분만 세는 방법을 깔끔하게 생각해내지 못했는데,확실히 공기인 부분에서 시작하는 bfs를 ..
송도 컨벤시아에서 열린 GDG 주최 컨퍼런스에 다녀왔다!Google I/O Extended Incheon 송도https://festa.io/events/5477 I/O Extended 2024 Incheon | Festa!Festa에서 당신이 찾는 이벤트를 만나보세요.festa.io 연이 있는 발표자 분께서 초대권을 주셔서 다녀올 수 있었다 ㅎㅎ사실 취준생 수준에서 알아듣기 힘든 내용이 많을까봐 고민도 했는데..결과적으로는 다녀오길 잘 한 것 같다.최근에 누군가 말씀해주신 컨퍼런스 발표 추천 기준을 생각해서 오늘 들을 세션들을 골라봤는데,정말 전보다 많은 내용을 이해하고 온 것 같아 신기했다.아무것도 모르는 기술, 또는 내용을 다 알것 같은 세션이라면 듣지 말 것그냥 입문을 위한 설명 세션도 bad (내..
[백준] 2869 달팽이는 올라가고싶다 | 수식 | Bro1 Pythonhttps://www.acmicpc.net/problem/2869 접근시간제한 0.25초시간제한때문에 반복문 없이 수식으로 해결해야 하는데 수식정리 머리가 안굴러가서 애먹은 문제..^.^브론즈라고 만만하게 보지 마라 하늘아래 알고리즘문제는 공평하다math.ceil() 대신 그냥 /나누기연산 후 int()함수 적용한 결과와 같은지 비교해서 소수점유무를 알아내 처리해도 올림과 같은 효과를 낼 수 있다.풀이달팽이는 무조건 낮에 도착하므로, 마지막날 갈 수 있는 거리는 밤에 미끄러지는 영향을 받지 않는다.따라서 한번의 낮 이동값을 미리 전체거리에서 빼두고, 남은 거리 이상 이동하려면 낮밤(하루)를 최소 몇번 지나야 하는지 계산하면 된다. 나..
[백준] 12904 A와 B | greedy? | Gol5 Pythonhttps://www.acmicpc.net/problem/12904 접근유형 : greedy [문제 해석] 문자열을 두 종류의 연산만으로 특정 문자열로 바꿀 수 있는지 확인하는 문제 문자열 S, T주어짐. S를 T로 바꿀 것 가능한 연산 두가지 마지막에 A추가 전체를 뒤집고 B추가 바꿀 수 있으면 1, 없으면 0 출력 구상 그냥 bfs로 연산 경우의 수 다 확인?? -> 너무 오래 걸림거꾸로 연산? -> 이게 연산 수가 적다! T -> S 뒤집는 연산 - 현재 마지막 글자에 따라 연산이 결정된다. 마지막 글자가 A이면 : 마지막에 위치한 A제거 마지막 글자가 B이면 : 마지막에 위치한 B제거 후 전체 뒤집기 트러블 슈팅x 코드im..
[백준] 2812 크게 만들기 | stack, greedy? | Gol3 Pythonhttps://www.acmicpc.net/problem/2812 접근유형 : stack, greedy?이런것도 그리디에 속하는 구나..? 흠 [문제 해석] 주어진 숫자에서 숫자 K개를 지웠을 때 얻을 수 있는 가장 큰 수 구하기고려해야할 조건 자릿수 (앞으로 갈수록 큰 숫자가 자리하도록) 그 숫자 자체 구상앞에서부터 그 다음자리가 현재자리보다 크면 현재자리 삭제 -> 아이디어는 맞음! 구현에 스택을 떠올릴 것..~ 트러블 슈팅x 코드import sysinput = sys.stdin.readlinestack = []N, K = map(int, input().split())nums = tuple(map(int, input(..
[백준] 1946 신입사원 | greedy | Sil1 Pythonhttps://www.acmicpc.net/problem/1946 접근유형 : greedy 아이디어 생각하는 거 하나 더 배웠다..~ [문제 해석]두가지 순위 중 적어도 하나는 선발인원 내 최저순위가 아닌 사람 최대인원수 구상 아 설명부터 어렵다일단 각 순위 1등을 뽑아놓고 이 1등의 다른 순위를 이기는 사람을 고름? x순위 합 작은순? x-> 첫번재 순위대로 정렬해두고 차례로 보면서 b순위 기준점을 넘는지 판단하면 된다..a는 갈수록 낮아지기만 하므로 b만 보면 되는 것..!!..! 백준 예제로 예시를 들어보면 아래처럼 된다.v는 선발한 사람, x는 선발하지 않은 사람이다.예1) 1 4 v -> min_second = 4 2 3 v -..