본문 바로가기

728x90

전체 글

[Postgresql] 튜플 버전 /* PostgreSQL에서 튜플은 어떻게 살아남는가 - INSERT부터 INDEX까지 */PostgreSQL은 데이터를 단순히 저장하지 않는다. 저장, 삭제, 수정할 때마다 "히스토리"를 남긴다. 이 덕분에 동시성 제어, MVCC, 롤백 모두 가능한데, 그 이면에는 튜플의 버전 관리가 있다. 이 글에서는 튜플이 어떻게 INSERT되고, DELETE되었다가 ROLLBACK되고, 다시 UPDATE되는지 그리고 인덱스가 이 과정을 어떻게 바라보는지를 살펴 보겠다. /* INSERT */트랜잭션 ID가 11140063일 때, 테이블에 튜플 하나를 insert하면 해당 트랜잭션 ID가 xmin으로 기록된다. 이때 xmax는 0이며, 아직 committed도 aborted도 되지 않은 상태다. commit;sel.. 더보기
[RabbitMQ] 비동기 메시징 큐 적용 /* 적용 배경 설명 */배경사용자가 진단을 완료하고, 결과를 기다리는 환경이었습니다. 결과는 pdf로 제공이 되며, pdf 안에는 사용자의 진단 데이터와 데이터를 바탕으로 한 AI의 리뷰가 포함되어 있었습니다. AI의 응답을 기다리기 까지 평균 15초에서 20초가 소요되었습니다.과제 및 행동전체적인 문제: 사용자는 결과를 기다리기 위해서 20초를 가만히 기다려야 했습니다. 물론 프론트에서 “결과를 생성하는 중입니다” 라는 문구와 로딩 중의 gif를 보여주긴 했지만, 중간에 탈주를 할 수도 있고 사용자가 이 웹에 대한 흥미를 쉽게 떨어트릴 수 있는 요소라고 생각을 해서 다른 해결방안을 생각해야 했습니다.해결1 (비동기 메시징 큐 적용): 그래서 생각했던 방향은 비동기 메시징 큐를 이용하는 것입니다. 확실.. 더보기
[SSE] Server Sent Event Stream /* SSE */웹 서비스에서 실시간으로 정보를 전달하고 싶을 때 우리는 흔히 WebSocket이나 polling을 떠올립니다. 하지만 단방향 통신만 필요할 경우, 더 간단하고 효율적인 방식이 있습니다. 바로 SSE(Server-Sent Events) 입니다. SSE는 서버에서 클라이언트로 단방향으로 데이터를 지속적으로 전송할 수 있게 해주는 기술입니다.HTTP 기반이기 때문에 별도의 프로토콜이나 핸드쉐이크가 필요 없습니다.브라우저에서 기본적으로 지원합니다 (EventSource API).실시간 로그, 알림, 상태 업데이트 등에 유용합니다./* SSE 구현 */@Componentclass SseEmitterManager { private val emitters: MutableMap = Concurr.. 더보기
[JWT] JWT란 무엇인가 /* JWT */ JWT는 헤더.내용.서명으로 .(dot)을 구분자로 하여, JWT 토큰 1개를 이룹니다.JSON 객체를 사용하여 정보를 전달합니다. 그리고, 필요한 모든 정보를 한 객체에 담아서 전달하기 때문에 JWT 한 가지로 인증을 마칠 수 있습니다.JSON 을 JWT로 인코딩 작업을 통해 토큰을 만듭니다./* Header */인코딩 : Base64{ "alg": "HS256", "typ": "JWT"}헤더에서는 해시 알고리즘과 토큰의 타입을 정의할 수 있습니다.HS256은 HMAC SHA 256을 의미합니다.해시 알고리즘 중 한 가지입니다.타입의 값 JWT는 이 토큰을 JWT로 지정합니다./* Payload (Data) */{ "sub": "1234567890", "name": "John .. 더보기
[Postgresql] MVCC (다중 버전 동시성 제어) https://techblog.woowahan.com/9478/ PostgreSQL Vacuum에 대한 거의 모든 것 | 우아한형제들 기술블로그PostgreSQL을 사용하신다면 반드시 알아야 하는 개념! Vacuum에 대해 같이 알아봅시다techblog.woowahan.com더욱 정확한 설명은 여기에 나와 있습니다. Postgresql MVCCMySQL MVCCMVCC 구현 방식Undo log 없이 자체적으로 Tuple 버전을 유지 (heap에 여러 버전 존재)Undo log 기반으로 이전 버전을 별도로 관리 (rollback segment)버전 저장 위치테이블 자체(데이터 페이지)에 이전 버전이 함께 저장됨Undo log에 과거 버전 저장삭제/갱신 처리DELETE는 tuple을 **삭제 표시.. 더보기
[알고리즘] 마법의 엘리베이터 https://school.programmers.co.kr/learn/courses/30/lessons/148653 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr/* 문제 설명 요약 */엘리베이터는 아래와 같은 방식으로 움직입니다:현재 층 수 storey에서 0층으로 내려가기버튼은 자릿수마다 +1 또는 -1씩 가능하며, 한 번 누를 때마다 해당 자릿수만큼 변함버튼을 누르는 횟수를 최소화해야 함❌ 초기 코드와 한계처음에는 아래처럼 각 자릿수마다 올림(comp2)과 내림(comp1)을 비교하는 방식으로 접근했습니다.int comp1 = storey % b;int comp2 = b - comp1;int mi.. 더보기
[알고리즘] 프로그래머스 삼각 달팽이 https://school.programmers.co.kr/learn/courses/30/lessons/68645 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr🔸 접근 방법2차원 배열을 만들어서 삼각형처럼 사용할 수 있도록 구성합니다. (전체 크기는 n x n)현재 위치를 나타내는 좌표 x, y를 두고, 방향에 따라 이동하며 값을 채웁니다.방향은 아래 → 오른쪽 → 왼쪽 위 대각선으로 반복됩니다.배열이 채워진 후에는, 삼각형 형태로 채운 값들을 1차원 배열로 추출해서 반환합니다.import java.util.*;class Solution { public int[] solution(int n) {.. 더보기
[Postgresql] 아키텍처 /* Postgresql 아키텍처 */PostgreSQL 서버는 크게 세 가지 종류의 프로세스로 구성됩니다: Postmaster, Backend, Background 프로세스입니다. Postmaster 프로세스인스턴스가 기동 될 때 가장 먼저 시작되며 여러 Background 프로세스와 Backend 프로세스를 생성한다. Postmaster 프로세스는 클라이언트가 접속을 시도하면 별도의 Backend 프로세스가 생성되고, 클라이언트 연결이 끊기거나 강제로 종료될 때까지 유지된다.Backend 프로세스Postmaster 프로세스에 의해 생성된 Backend 프로세스는 클라이언트와 1:1 관계를 유지하면서 클라이언트가 요청한 쿼리를 수행하고 결과를 전송한다. Backend 프로세스 개수는 기본값이 100이며.. 더보기

728x90