본문 바로가기

분류 전체보기94

[백준/C++] #5021 왕위 계승 (위상 정렬) 문제 이 문제는 가족 관계를 방향 그래프(DAG)로 나타내어, 각 개인이 왕의 혈통을 얼마나 이어받았는지 계산하는 문제이다.부모가 두명으로 이루어져있다는 점에서 좀 난항을 겪었다가, 자식에 대한 부모 정보를 따로 저장하는 map을 만들어 문제를 해결했다. 풀이자식이 부모의 부모가 되는 경우가 없다는 조건이 명시 되어 있으므로 사이클이 없는 방향 그래프(DAG)임을 알 수 있다. 따라서 위상 정렬을 이용하여 부모의 혈통이 먼저 계산된 후 자식에게 전파되도록 구현할 수 있다.!!혈통 계산 방식은 부모로부터 반씩 혈통을 받는 방식이다. 왕의 혈통을 1.0으로 설정한 후, 각 자식의 혈통을 부모들의 혈통의 절반씩 더한 값으로 계산하면 된다. 위상정렬은 사이클이 없는 방향 그래프(DAG, Directed Acyc.. 2025. 1. 30.
[Python] MySQL 대규모 데이터 삽입 로직 고도화: 비동기, Bulk Insert, 멀티스레드 적용기 프로젝트에서 나스닥에 상장되어있는 약 만개의 종목들에 대해 날짜별로 종가, 시가, 고가, 저가의 최소 40년치의 데이터를 필요로 했다. 대강 계산해봐도 약 10000 * 365 * 40 = 146,000,000 개의 데이터를 삽입해야했고, 매일매일 만개의 레코드씩을 추가로 삽입해야 했다. 그래서 이김에 대규모 데이터 삽입 로직을 좀 열심히 만들어봤다.  먼저 내가 겪었던 로직 고도화 단계는 다음과 같다.*()안에 적힌 값은 한달 단위 데이터들을 넣을때 소요되는 시간이다. 1. 단일 쓰레드, Batch 미사용 (97m)2. INSERT IGNORE 사용하여 중복 데이터 무시 (80~100m)3. 단일 쓰레드 방식 + 비동기처리 통한 동시 작업과 executemany 통한 네트워크 오버헤드 감소 (48~93.. 2025. 1. 25.
[Spring Data Jpa] 3가지 방법으로 N+1 문제 해결해보기 (Fetch Join, Batch Fetching, EntityGraph) JPA N+1 문제란? JPA의 N+1문제는 연관관계가 설정된 엔티티를 조회할 경우에, 조회된 데이터 개수(N)만큼 연관관계의 조회 쿼리가 "추가로" 발생하는 현상이다.  즉, 조회시 쿼리 1개를 생각하고 설계를 했는데, 예상치 못한 쓸모가 없는 N개의 조회 쿼리가 더 발생하는 문제이다. 이렇게 비효율적인 쿼리가 실행되게 되면, 트랜잭션 응답 속도가 느려지고, 데이터베이스 부하가 커지며, 시스템 성능이 급격히 저하 될 수 있어 해결해야 한다.  가장 대표적인 예로는 게시판과 댓글 엔티티가 있고, 1대 n으로 매핑되어 있을때, 게시글을 조회한 후 게시글마다 댓글을 조회하기 위해 추가 쿼리가 발생하는 경우이다. 댓글이 10개 달린 게시글 하나를 조회할 때 총 11개의 쿼리(게시글 조회 1개 + 각 게시글 댓.. 2025. 1. 16.
[Network] CH1. 웹 브라우저가 메시지를 만든다 성공과 실패를 결정하는 1%의 네트워크 원리를 읽고 정리한 내용입니다.  목차HTTP 리퀘스트 메시지를 작성한다.웹 서버의 IP 주소를 DNS 서버에 조회한다.전 세계의 DNS 서버가 연대한다.프로토콜 스택에 메시지 송신을 의뢰한다. 1️⃣ HTTP 리퀘스트 메시지를 작성한다.사용자가 브라우저에 URL을 입력하면 브라우저가 URL을 해독한다.브라우저: 웹 서버에 액세스, 파일을 다운로드/업로드, 메일의 클라이언트 등 기능을 가지고 있다.즉, 몇개의 클라이언트 기능을 겸비한 복합적인 클라이언트 소프트웨어이다.→ 어느 것을 사용하여 데이터에 액세스하면 좋은지 판단해야 한다. URL의 맨 앞에는 항상 액세스 대상에 따른 프로토콜을 명시해줘야 한다.프로토콜이란 데이터 출처에 액세스 하는 방법을 의미한다.액세스 .. 2025. 1. 6.