GraphQL이란? REST와 무엇이 다른가

GraphQL의 정의 GraphQL은 페이스북(現 메타)이 개발한 API를 위한 쿼리 언어이자 런타임입니다. 클라이언트가 필요한 데이터의 모양을 직접 정의해서 요청하면, 서버는 그 요청에 정확히 맞는 데이터만 응답으로 돌려줍니다. REST가 정해진 엔드포인트(예: ‘/users/1’, ‘/users/1/posts’)를 통해 고정된 형태의 데이터를 주고받는 방식이라면, GraphQL은 단 하나의 엔드포인트(보통 ‘/graphql’)에서 클라이언트가 원하는 필드만 골라서 요청하는 방식입니다. 비유하자면 REST는 정해진 메뉴판대로만 주문할 수 있는 … 더 읽기

SLA, SLO, SLI의 차이: 서비스 신뢰도는 어떻게 정의할까

SLI, SLO, SLA란 무엇인가 서비스 신뢰도를 이야기할 때 가장 많이 헷갈리는 세 가지 개념이 SLI, SLO, SLA입니다. 이 셋은 서로 독립된 개념이 아니라, 하나의 지표에서 시작해 목표를 세우고 계약으로 확장되는 계층 구조를 가집니다. SLI(Service Level Indicator)는 실제로 측정하는 지표 그 자체입니다. 예를 들어 ‘요청 성공률’, ‘응답 지연 시간(p99 latency)’, ‘가용성(uptime)’ 같은 것들이 SLI에 해당합니다. 즉 … 더 읽기

Replication Lag이란? 복제 지연이 서비스에 미치는 영향

Replication Lag이란 무엇인가 데이터베이스를 안정적으로 운영하려면 보통 하나의 원본(Master/Primary) 서버와 이를 복제한 여러 개의 사본(Replica) 서버를 함께 사용합니다. Master에 데이터가 쓰이면 그 변경 내용이 Replica로 전달되어 동일하게 반영되는데, 이 과정에는 물리적인 시간이 소요됩니다. 이때 Master의 데이터와 Replica의 데이터 사이에 발생하는 시간 차이를 Replication Lag(복제 지연)이라고 부릅니다. 쉽게 비유하면, 라이브 방송과 이를 몇 초 뒤에 송출하는 … 더 읽기

Strangler Fig 패턴이란? 레거시 시스템을 점진적으로 교체하는 방법

Strangler Fig 패턴의 정의 Strangler Fig(교살자 무화과) 패턴은 열대 지역에 자생하는 무화과 나무의 생태에서 이름을 따온 소프트웨어 아키텍처 패턴입니다. 이 나무는 다른 나무를 감싸며 서서히 자라 결국 숙주 나무를 완전히 대체합니다. 소프트웨어에서도 마찬가지로, 낡은 레거시 시스템을 한 번에 전면 교체하지 않고 새로운 기능이나 모듈을 하나씩 덧붙여 나가면서 점진적으로 레거시 코드를 대체하는 방식을 의미합니다. 마틴 파울러가 … 더 읽기

Service Mesh란? MSA 통신을 관리하는 인프라 레이어

Service Mesh란 무엇인가 마이크로서비스 아키텍처(MSA)를 도입하면 서비스 수가 늘어나면서 서비스 간 통신도 기하급수적으로 복잡해집니다. 재시도, 타임아웃, 인증, 로드밸런싱, 장애 감지 같은 로직을 서비스마다 직접 구현하면 코드 중복은 물론 일관성 유지도 어려워집니다. Service Mesh는 이런 서비스 간 통신 로직을 애플리케이션 코드에서 분리해, 별도의 인프라 레이어에서 처리하는 아키텍처 패턴입니다. 즉 비즈니스 로직은 애플리케이션에 두고, ‘어떻게 안전하고 안정적으로 … 더 읽기

Sidecar 패턴이란? 마이크로서비스의 보조 컨테이너

Sidecar 패턴의 정의 Sidecar 패턴은 애플리케이션 컨테이너 옆에 보조 컨테이너를 함께 배치해서, 로깅이나 모니터링, 네트워크 통신처럼 애플리케이션 본연의 기능과 상관없는 부가 기능을 분리해서 처리하는 설계 방식입니다. 이름 그대로 오토바이 옆에 붙어 있는 사이드카를 떠올리면 됩니다. 오토바이(메인 애플리케이션)는 원래의 역할인 주행에만 집중하고, 사이드카는 짐이나 승객을 태우는 부가 역할을 맡습니다. 둘은 같이 붙어서 움직이지만 각자 독립적인 존재입니다. … 더 읽기

커서 기반 페이지네이션 vs 오프셋 기반, 무엇이 다를까

오프셋 기반 페이지네이션이란? 우리가 흔히 게시판에서 보는 ‘1페이지, 2페이지’ 방식이 바로 오프셋 기반 페이지네이션입니다. SQL로 표현하면 LIMIT 10 OFFSET 20처럼, 몇 번째 데이터부터 몇 개를 가져올지 숫자로 지정하는 방식이죠. 이 방식은 구현이 직관적이고, ‘몇 페이지로 이동’같은 UI를 만들기 쉽다는 장점이 있습니다. 하지만 데이터가 많아질수록 치명적인 단점이 드러납니다. 예를 들어 OFFSET 1000000처럼 뒤쪽 페이지를 조회하면, DB는 … 더 읽기

Soft Delete란? 진짜로 지우지 않고 삭제하는 방법

Soft Delete란? Soft Delete(소프트 삭제)는 데이터를 실제로 데이터베이스에서 제거하지 않고, ‘삭제된 것처럼’ 표시만 해두는 방식입니다. 반대로 데이터를 완전히 지워버리는 방식은 Hard Delete(하드 삭제)라고 부릅니다. 예를 들어 이메일 서비스에서 메일을 삭제하면 즉시 사라지는 게 아니라 ‘휴지통’으로 이동하는 것을 떠올리면 이해하기 쉽습니다. 실제로는 데이터가 어딘가에 남아있고, 사용자 눈에만 보이지 않을 뿐입니다. 동작 원리와 예시 Soft Delete는 보통 … 더 읽기

Vertical Scaling vs Horizontal Scaling, 무엇이 다를까

정의: 서버를 키우는 두 가지 방법 서비스에 사용자가 늘어나면 서버가 감당해야 할 트래픽도 늘어난다. 이때 확장(Scaling)하는 방법은 크게 두 가지다. 하나는 Vertical Scaling(수직 확장)으로, 기존 서버의 CPU나 RAM 같은 자원을 더 강력한 사양으로 업그레이드하는 방식이다. 예를 들어 4코어 8GB 서버를 16코어 64GB로 바꾸는 식이다. 다른 하나는 Horizontal Scaling(수평 확장)으로, 서버 한 대의 성능을 올리는 대신 … 더 읽기

Materialized View란? 미리 계산해두는 조회 성능 최적화

Materialized View의 정의 일반적으로 데이터베이스에서 사용하는 View는 SQL 쿼리를 저장해두고, 조회할 때마다 그 쿼리를 다시 실행해서 결과를 보여주는 방식입니다. 반면 Materialized View는 쿼리의 실행 결과 자체를 물리적으로 저장해두는 뷰입니다. 즉, 매번 계산하지 않고 미리 계산된 값을 디스크나 캐시에 저장해뒀다가 조회 시 바로 꺼내주는 방식입니다. 비유하자면, 일반 View는 매번 손님이 주문할 때마다 처음부터 요리하는 식당이고, Materialized … 더 읽기