목록분류 전체보기 (289)
개발자는 기록이 답이다

프로젝트에서 비동기 쿠폰 발행시 유저에게 발급 완료 알림을 주는 기능을 구현했습니다. 실시간 알림 기능은 여러가지 방식으로 구현이 가능한데 그 중에서 제가 왜 SSE를 선택했는지 얘기해보고자 합니다. 비동기식으로 MQ를 활용해서 쿠폰 발급 기능을 구현하려고 하다보니, 쿠폰 발급이 즉시 이루어지지 않았습니다. 따라서 유저가 쿠폰을 발급받았는지 알림을 받으면 사용자 경험이 개선될 것이라 판단했습니다. 실시간 알림 방식에는 5가지 방법이 있습니다. polling Long polling Socket SSE FCM 1. Polling 가장 기본적인 데이터 처리 방식으로, 클라이언트가 특정 주기로 http request를 서버로 계속 날려서 이벤트 내용을 전달받습니다. 특징 가장 쉬운 방법이지만, 클라이언트가 계속..

UtilityClass는 lombok v1.16.2에서 실험적인 기능으로 도입되었다. @UtilityClass를 사용하면, 컴파일 시점에 생성자 private 으로 만들어 주고, 모든 메서드를 static으로 만들어 준다. package com.devkuma.tutorial.lombok; import lombok.experimental.UtilityClass; @UtilityClass public class UtilityClassTutorial { public int plus(int a, int b) { return a + b; } } 위 코드는 @UtilityClass로 인해 아래와 같이 변경된다. package com.devkuma.tutorial.lombok; public final class Ut..

InnoDB는 MySQL에서 사용할 수 있는 스토리지 엔진 중 거의 유일하게 레코드 기반의 잠금을 제공한다. 그 때문에 높은 동시성 처리가 가능하고 안정적이며 성능이 뛰어나다. 1. 프라이머리 키(PK)에 의한 클러스터링 엔진 InnoDB MyISAM 클러스터링 키 지원 지원 미지원 물리적 주소 사용 프라이머리 키 값 레코드의 주소 값 InnoDB 스토리지 엔진 모든 테이블은 기본적으로 프라이머리 키를 기준으로 클러스터링되어 저장된다. 즉, 프라이머리 키 값의 순서대로 디스크에 저장된다는 뜻이다. 모든 세컨더리 인덱스는 레코드의 주소 대신 프라이머리 키의 값을 논리적인 주소로 사용한다. 프라이머리 키가 클러스터링 인덱스이기 때문에 프라이머리 키를 이용한 레인지 스캔은 상당히 빨리 처리 될 수 있다. 결과..

1. 쿼리파서 사용자 요청으로 들오온 쿼리 문장을 토큰(MySQL이 인식할 수 있는 최소 단위의 어휘나 기호)으로 분리해 트리 형태의 구조로 만들어내는 작업. 쿼리 문장의 기본 문법 오류는 이 과정에서 발견되고 사용자에게 오류 메세지를 전달한다. 2. 전처리기 파서과정에서 만들어진 파서 트리를 기반으로 쿼리 문장에서 구조적인 문제점이 있는지 확인한다. 각 토큰을 테이블 이름이나 칼럼 이름, 또는 내장 함수와 같은 개체를 매핑해 해당 객체의 존재 여부와 객체의 접근권한 등을 확인하는 작업을 수행한다 실제 존재하지 않거나 권한 상 사용할 수 없는 개체의 토큰은 이 단계에서 걸러진다. 3. 옵티마이저 사용자의 요청으로 드러온 쿼리 문장을 저렴한 비용으로 가장 빠르게 처리할지 결정하는 역할 DBMS의 두뇌에 해..