Trouble Shooting
-
DB서버 병목 장애 해결기: 5시간 배치를 5분으로 만들기
*보안을 준수하기 위해 각종 명칭은 모두 디저트 명으로 대체했다문제 상황맡은지 한 달이 된 서비스에서 daily batch 작업 실행 중 심각한 DB 서버 병목 현상이 발생해 서비스 장애로 이어졌다.증상특정 쿼리가 5시간 동안 실행되며 결과를 반환하지 않음후속 작업들이 대기 상태로 멈춰 batch 프로세스 전체가 중단해당 프로세스 이후의 데이터 처리 파이프라인 진행 모두 중단쿼리 자체는 기존과 동일했으나, 서버 재구축 이후 성능이 급격히 저하pid | usename | application_name | client_addr | duration | state | query_preview-------+------------+------------------..
2025.10.26
-
[Open Search] OpenSearch text/keyword 매핑 차이로 인한 검색 오류 해결기
스터디 일정이 있어서 일찍 퇴근한 나는 내가 개발한 로그 페이지에 결과가 출력되지 않는다는 과장님의 카톡을 받게 된다.다음날 아침 일찍부터 출근해서 문제를 파악해 보았다. 우리팀은 tts, stt, 대화엔진 등 여러 시스템을 거칠때마다 로그를 남긴다.각 서비스간 연동 로그를 OpenSearch에서 조회해서 유의미한 정보로 가공한 후 스프링으로 백엔드 api를 구현하고 리액트로 프론트단까지 구현하는게 내 업무였다. 분명히 정말 동일한 코드로 생성된 동일한 쿼리가 날아가는데왜 TB 환경에서는 되고 STG 환경에서는 되지 않는지 고민을 시작했다. OpenSearch dashboard의 dev tools를 켜고 쿼리가 왜 안 되는지 조건을 하나씩 빼면서 실행해보았다 ```GET project_name_log_*..
2025.02.18
-
Exception authenticating MongoCredential{mechanism=SCRAM-SHA-256, userName='root', source='admin', password=, mechanismProperties=}] with root cause
🚩문제 : MongoDB 연결이 되지 않고 에러 발생2024-05-09T20:16:58.672+09:00 ERROR 23172 --- [core] [nio-8081-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.data.mongodb.UncategorizedMongoDbException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-256, userNa..
2024.05.09
-
[Kotlin] Cannot set property id because no setter, no wither and it's not part of the persistence constructor
🚩에러2024-04-25T22:52:54.233+09:00 ERROR 21840 --- [core] [nio-8081-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.IllegalStateException: Cannot set property id because no setter, no wither and it's not part of the persistence constructor public kpring.chat.chatroom.mod..
2024.04.25
TIL(CS)
-
복합 인덱스 설계 스터디 노트: 개념부터 실전까지 한 번에 다 정리!
SQL Booster라는 책을 읽으며 복합 인덱스 설계를 공부하다가잘 이해가 가지 않는 부분을 완벽하게 이해가 갈 때까지 나노단위로 쪼개서 모든 개념을 정복한 후 남기는 스터디 노트이다카디널리티와 셀렉티비티(선택도)의 개념도 구분해서 이해되게 정리하고레코드 읽는 부분도 잘 이해가 가지 않으면 모두 시각화하여 이해가 잘 가도록 정리했다복합 인덱스 접근 과정 설명B-Tree 인덱스의 기본 구조B-Tree 인덱스는 루트 노드, 브랜치 노드, 리프 노드로 구성됨데이터베이스가 인덱스를 이용해 데이터를 찾는 과정은 다음과 같다루트 노드에서 시작브랜치 노드를 통해 리프 노드로 이동리프 노드에서 필요한 데이터를 스캔리프 노드의 RID(Row Identifier)를 이용해 실제 테이블 데이터에 접근인덱스 내부 동작 원리..
2026.02.01
-
웹소켓이란? (feat.Spring,STOMP,SockJS)
웹소켓이란?웹소켓(WebSocket)은 클라이언트와 서버 간의 실시간 양방향 통신을 가능하게 하는 프로토콜기존의 HTTP 통신 방식은 클라이언트가 요청을 보내면 서버가 응답하는 요청-응답 모델을 따른다.반면, 웹소켓은 최초 연결 이후 클라이언트와 서버 간에 지속적인 연결을 유지하면서 상호 간에 데이터를 주고받을 수 있다.이는 실시간 기능이 필요한 애플리케이션(채팅, 실시간 알림, 게임) 등에 유용하게 사용된다.웹소켓의 특징양방향 통신클라이언트와 서버 모두 메시지를 보낼 수 있다.지속적인 연결HTTP와 달리 웹소켓은 연결이 한번 성립되면 끊기지 않고 계속 유지된다낮은 오버헤드HTTP처럼 매번 요청 헤더를 보내지 않고, 한 번 연결되면 지속적으로 데이터를 주고받을 수 있어 오버헤드가 적다.지연 감소(실시간 ..
2024.10.26
-
OOP의 SOLID 원칙
OOP의 SOLID 원칙S : Single Responsibility Principle클래스는 하나의 책임만 가져야 하며, 클래스가 변경되는 이유는 단 하나뿐이어야 한다하나의 클래스가 하나의 기능만 담당하도록 하여 코드의 응집도를 높이고, 유지보수를 용이하게 한다SRP 위반 예시Invoice 클래스가 여러 책임(기능)을 가지고 있다.Invoice 클래스는 청구서의 데이터 저장, 청구서의 프린트, 그리고 총액 계산을 모두 담당하고 있다.class Invoice { private double amount; public Invoice(double amount) { this.amount = amount; } public double getAmount() { retu..
2024.05.28
-
RDBMS의 ACID 트랜잭션과 NoSQL의 BASE 속성
ACID vs BASE 비교개념ACIDBASE가용성낮음 (일관성을 우선)높음 (가용성을 우선)일관성높음 (즉각적인 일관성)낮음 (최종적인 일관성)상태단단한 상태 (변경 불가능한 상태)부드러운 상태 (변경 가능한 상태)트랜잭션 격리강한 격리성약한 격리성시스템 설계 목표안정성과 신뢰성확장성과 가용성ACID 트랜잭션은 금융 거래와 같이 높은 일관성과 신뢰성이 요구되는 시스템에 적합하며, BASE 속성은 대규모 분산 시스템에서 높은 가용성과 확장성을 필요로 하는 시스템에 적합하다ACID 트랜잭션RDBMS에서 트랜잭션의 신뢰성과 일관성을 보장하는 속성Atomicity (원자성)트랜잭션의 모든 작업이 완전히 수행되거나 전혀 수행되지 않아야 함을 보장트랜잭션 중 일부 작업만 수행되거나 실패하는 경우, 시스템은 트랜잭..
2024.05.28
Coding Test
-
[프로그래머스] 충돌위험 찾기
문제 주소https://school.programmers.co.kr/learn/courses/30/lessons/340211 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 설명문제 설명어떤 물류 센터는 로봇을 이용한 자동 운송 시스템을 운영합니다. 운송 시스템이 작동하는 규칙은 다음과 같습니다.물류 센터에는 (r, c)와 같이 2차원 좌표로 나타낼 수 있는 n개의 포인트가 존재합니다. 각 포인트는 1~n까지의 서로 다른 번호를 가집니다.로봇마다 정해진 운송 경로가 존재합니다. 운송 경로는 m개의 포인트로 구성되고 로봇은 첫 포인트에서 시작해 할당된 포인트를 순서대로 방문합니다.운송 시스템에 사용되..
2025.03.13
-
[백준] 구간 합 구하기 5
문제 주소https://www.acmicpc.net/problem/11660문제 설명N×N개의 수가 N×N 크기의 표에 채워져 있다. (x1, y1)부터 (x2, y2)까지 합을 구하는 프로그램을 작성하시오. (x, y)는 x행 y열을 의미한다.예를 들어, N = 4이고, 표가 아래와 같이 채워져 있는 경우를 살펴보자.1 2 3 4234534564567여기서 (2, 2)부터 (3, 4)까지 합을 구하면 3+4+5+4+5+6 = 27이고, (4, 4)부터 (4, 4)까지 합을 구하면 7이다.표에 채워져 있는 수와 합을 구하는 연산이 주어졌을 때, 이를 처리하는 프로그램을 작성하시오.입력첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000)..
2024.06.23
-
[백준] 구간 합 구하기 4
문제 주소https://www.acmicpc.net/problem/11659문제 설명수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.입력첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다.출력총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다.제한1 ≤ N ≤ 100,0001 ≤ M ≤ 100,0001 ≤ i ≤ j ≤ N예제 입력 15 35 4 3 2 11 32 45 5예제 출력 11291일단 단순하게 짜봤는데 지금 상태에서는 누적합이라는 알고리즘이 왜 따로 분리되었는지 이해가 ..
2024.06.23
-
[백준] 이전 순열
문제 주소https://www.acmicpc.net/problem/10973문제 설명1부터 N까지의 수로 이루어진 순열이 있다. 이때, 사전순으로 바로 이전에 오는 순열을 구하는 프로그램을 작성하시오.사전 순으로 가장 앞서는 순열은 오름차순으로 이루어진 순열이고, 가장 마지막에 오는 순열은 내림차순으로 이루어진 순열이다.N = 3인 경우에 사전순으로 순열을 나열하면 다음과 같다.1, 2, 31, 3, 22, 1, 32, 3, 13, 1, 23, 2, 1입력첫째 줄에 N(1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄에 순열이 주어진다.출력첫째 줄에 입력으로 주어진 순열의 이전에 오는 순열을 출력한다. 만약, 사전순으로 가장 처음에 오는 순열인 경우에는 -1을 출력한다.예제 입력 141 2 3 4예제 출..
2024.06.21