전체 글(47)
-
동시성 제어(Concurrency Control)와 MVCC
1) 개요동시성 제어는 여러 트랜잭션이 동시에 같은 데이터에 접근해도 일관성과 성능을 함께 지키기 위한 규칙과 메커니즘을 뜻한다. 목표는 “동시에 실행했어도 결과가 논리적으로 직렬 실행과 동일”하게 만드는 것, 즉 직렬가능성(serializability) 확보라고 볼 수 있다.MVCC(Multi-Version Concurrency Control)는 같은 행의 여러 버전을 보관해 읽기와 쓰기 간 충돌을 최소화하는 대표적 방식이다. 읽기는 스냅샷을, 쓰기는 새 버전을 사용해 서로를 가급적 막지 않게 만든다.한 줄 요약: 동시성 제어는 질서, MVCC는 다중 버전으로 충돌을 줄이는 방식임. 2) 왜 필요한가동시 실행을 제어하지 않으면 다음과 같은 이상 현상이 발생한다.Dirty read: 커밋되지 않은 값을 ..
2025.11.12 -
MySQL 윈도우 함수 정리 (정의, 문법, 예제, 자주 쓰는 메서드 모음)
윈도우 함수는 GROUP BY로 집계하면 사라지는 개별 행을 살린 채 “그룹/순서/범위” 단위로 통계값을 붙여주는 기능임. 순위 매기기, 누적합/이동평균, 전행/다음행 비교 같은 분석에 최적임. MySQL 8.0+에서 지원함.1) 윈도우 함수란 무엇인가정의: OVER(...) 절을 사용해 “파티션(그룹) + 정렬 + 프레임(행 범위)”을 지정하고, 그 범위 위에서 집계/분석을 수행해 각 행 옆에 결과를 붙이는 함수군임.핵심 아이디어: 집계해도 행은 그대로 유지되며, 집계 결과가 열로 추가됨.2) 왜 쓰는가(좋은 이유)행 보존 분석: GROUP BY와 달리 원본 행을 잃지 않음 → 상세 + 요약을 한 번에 보여줄 수 있음.순위/누적/이동 계산이 쉬움: ROW_NUMBER, RANK, SUM() OVER(...
2025.10.27 -
홀펀칭 서버 & UDP 한계, 그리고 대안으로서의 WebSocket
“뒤에서 길을 뚫어(펀칭) 직접 통신하자” vs “HTTP 위에서 표준으로 양방향 통신하자”이 글은 회사에서 UDP 관련 작업을 하다가 홀펀칭 서버, UDP 그리고 자주 들었지만 막연히 사용했던 WebSocket에 대해 공부해야 겠다는 생각에 UDP 홀펀칭의 원리/장단점을 정리하고, 한계를 보완하는 WebSocket을 소개한 뒤, Spring Boot로 실전 구현을 안내하기 위해 작성한다.요약전송 계층UDP (비연결·비신뢰)TCP(HTTP 업그레이드)NAT/방화벽 통과STUN/ICE 등 기술 필요, 대부분 통과하지만 대칭 NAT 실패 가능80/443 포트, NAT/방화벽 친화적신뢰성/순서없음(애플리케이션이 직접 보장)있음(TCP 신뢰/순서)지연/오버헤드낮음(헤더 가벼움)초기 핸드셰이크/프레이밍 약간의 오..
2025.10.02 -
WITH RESERVE 사용법
WITH(Common Table Expression) 쿼리란?MySQL 8.0에서 도입된 CTE(Common Table Expression)는 쿼리 내에서 일시적으로 사용되는 이름이 있는 결과 집합으로, 쿼리의 가독성과 유지보수성을 높이는 데 유용하다.CTE는 복잡한 쿼리를 여러 단계로 분할하여 간단하고 읽기 쉽게 만들 수 있도록 돕고 일반적으로 재귀적 연산 또는 서브쿼리의 간소화를 위해 사용한다MySQL 8.0에서의 CTE는 크게 두 가지 유형으로 구분된다비재귀 CTE (Non-Recursive CTE)재귀 CTE (Recursive CTE)1. 비재귀 CTE (Non-Recursive CTE)비재귀 CTE는 일반적인 서브쿼리와 비슷한 역할을 한다, 복잡한 쿼리를 간단히 작성할 수 있게 해준다.주로 데..
2025.09.22 -
EXPLAIN 사용법 찍먹 해보기
MySql의 옵티마이저가 항상 최적의 쿼리 최적화를 하는 것은 아니기 때문에 EXPLAIN을 사용해 실행 계획을 확인하는 것은 중요하다. 부끄럽게도 나는 DB를 잘 사용하고 다루는 것에 많이 부족하다.최근 Real Mysql 8.0이라는 좋은 책을 읽었지만 내용도 많고 나에게는 어려운 부분이 많지만 그 중에서도 특히 EXAPLIN 활용에 대한 부분은 요약해서 기록하는게 필요 할 것 같다는 생각에 포스트로 작성하게 되었다.EXAPLIN 이란?SQL 데이터베이스에서 EXPLAIN은 쿼리의 실행 계획(execution plan)을 보여주는 명령어로, 개발자와 DBA가 쿼리의 성능을 분석하고 최적화하는 데 사용된다. 이 명령어는 쿼리를 실제로 실행하지 않고, 데이터베이스가 어떻게 쿼리를 처리할지 계획을 보여준다..
2025.03.26 -
Intellij GUI로 불필요한 Git Commit 취소하기
1. Intellij GUI를 사용하여 커밋 취소하기Version Control 탭 열기Intellij 하단의 "Version Control" 탭을 클릭 한다.Commit 탭에서 커밋 내역을 확인할 수 있다최근 커밋 선택"Log" 탭으로 이동 한다.가장 최근 커밋을 오른쪽 클릭Reset Current Branch to Here 선택우클릭 메뉴에서 **"Reset Current Branch to Here"**를 선택Reset Type 선택Mixed를 선택하면, 커밋은 삭제되지만, 변경된 파일은 Staged 상태로 유지Soft를 선택하면, 커밋은 삭제되고, 변경된 파일이 Working Directory에 남음Hard를 선택하면, 커밋과 함께 변경사항도 완전히 삭제확인원하는 Reset Type을 선택한 후 확..
2025.03.15