Server-sent Events vs. Websocket

Server-sent Events vs. Websocket 웹 애플리케이션이 점점 더 실시간적이고 동적으로 발전함에 따라, 서버와 클라이언트 간의 효율적인 통신 방식이 중요해졌다. 전통적인 HTTP 요청-응답 모델은 실시간 데이터 전송에 최적화되어 있지 않기 때문에, 이를 보완하기 위한 기술로 서버 전송 이벤트(Server-Sent Events, SSE)와 웹소켓(WebSocket)이 등장했다. 두 기술 모두 실시간 통신을 가능하게 하지만, 그 작동 원리와 적합한 사용 사례에는 중요한 차이가 있다. 서버 전송 이벤트(SSE) 개념과 작동 원리 서버 전송 이벤트(SSE)는 HTTP 연결을 통해 서버에서 클라이언트 브라우저로 데이터를 단방향으로 스트리밍하는 웹 기술이다. HTML5 표준의 일부로, EventSource API를 통해 구현된다. SSE는 기존 HTTP 프로토콜을 활용하며, 특별한 프로토콜 전환 없이 서버에서 클라이언트로의 실시간 데이터 푸시가 가능하다. ...

March 3, 2025 · 8 min · Me

RFC 6749

RFC 6749 RFC 6749는 OAuth 2.0 권한 부여 프레임워크(The OAuth 2.0 Authorization Framework)를 정의하는 인터넷 표준 문서이다. 이 문서는 2012년 10월에 인터넷 표준화 기구인 IETF(Internet Engineering Task Force)에 의해 발행되었다. 주 저자는 Dick Hardt이며, 여러 기술 전문가들의 협업으로 만들어졌다. OAuth 2.0은 이전 버전인 OAuth 1.0(RFC 5849)의 후속 버전으로, 다양한 웹 애플리케이션, 데스크톱 애플리케이션, 모바일 애플리케이션 및 IoT 장치에서 안전한 권한 위임을 가능하게 하는 프로토콜이다. 간단히 말해, OAuth 2.0은 사용자가 자신의 비밀번호를 공유하지 않고도 제3자 애플리케이션에 자신의 데이터에 대한 제한된 접근 권한을 부여할 수 있도록 해주는 프레임워크이다. ...

February 28, 2025 · 14 min · Me

Websocket API vs. Websocket

Websocket API vs. Websocket WebSocket이란? WebSocket은 단일 TCP 연결을 통해 클라이언트와 서버 간의 양방향 통신 채널을 제공하는 통신 프로토콜이다. HTTP와 달리, 연결이 한 번 수립되면 계속 유지되며, 클라이언트와 서버가 서로 독립적으로 메시지를 주고받을 수 있다. WebSocket 프로토콜은 RFC 6455에 정의되어 있으며, ‘ws://’ 또는 암호화된 연결을 위한 ‘wss://’ URI 스키마를 사용한다. WebSocket은 HTTP 핸드셰이크를 사용하여 연결을 시작한 다음, 프로토콜을 WebSocket으로 업그레이드한다. WebSocket API란? WebSocket API는 웹 애플리케이션에서 WebSocket 프로토콜을 사용할 수 있게 해주는 인터페이스이다. 이것은 W3C에서 표준화한 웹 API로, 자바스크립트를 통해 WebSocket 프로토콜을 구현할 수 있도록 한다. ...

February 28, 2025 · 3 min · Me

gRPC API vs. gRPC

gRPC API vs. gRPC gRPC와 gRPC API는 현대 마이크로서비스 아키텍처에서 중요한 역할을 하는 기술이다. gRPC 기본 개념 gRPC는 Google에서 개발한 고성능, 오픈소스 RPC(Remote Procedure Call) 프레임워크이다. 2015년에 처음 공개되었으며, HTTP/2 프로토콜 위에 구축되어 있다. ‘g’는 원래 Google을 의미했지만, 현재는 독립적인 오픈소스 프로젝트로 발전했다. gRPC는 다음과 같은 주요 특징을 가지고 있다: Protocol Buffers(protobuf)를 IDL(Interface Definition Language)로 사용 HTTP/2 기반 통신으로 높은 성능 제공 양방향 스트리밍 지원 다양한 프로그래밍 언어 지원 (C++, Java, Python, Go, Ruby, C# 등) 코드 생성 도구를 통한 클라이언트 및 서버 코드 자동 생성 gRPC API의 정의와 특징 gRPC API는 gRPC 프레임워크를 사용하여 구현된 API를 의미한다. 즉, gRPC는 기술적 프레임워크이고, gRPC API는 이 프레임워크를 사용하여 구축된 실제 응용 프로그램 인터페이스이다. ...

February 28, 2025 · 4 min · Me

GraphQL API vs. GraphQL

GraphQL API vs. GraphQL GraphQL과 GraphQL API는 현대 웹 개발에서 자주 언급되는 개념이지만, 이 둘 사이에는 명확한 차이점이 있다. GraphQL과 GraphQL API의 개념적 차이 GraphQL은 페이스북이 2012년에 개발하고 2015년에 오픈소스로 공개한 쿼리 언어와 서버 측 런타임 사양(specification)이다. 반면 GraphQL API는 이 GraphQL 사양을 구현한 실제 API 인터페이스를 의미한다. 쉽게 설명하자면, GraphQL은 프로그래밍 언어인 SQL과 같은 개념이고, GraphQL API는 이 언어를 사용하여 구축된 실제 데이터베이스 인터페이스와 같다. 핵심 특징 비교 GraphQL은 클라이언트가 정확히 필요한 데이터만 요청할 수 있는 유연한 쿼리 언어를 제공한다. 이는 REST API에서 흔히 발생하는 오버페칭(over-fetching)과 언더페칭(under-fetching) 문제를 해결한다. ...

February 27, 2025 · 2 min · Me

Pagination

Pagination API 설계에서 페이지네이션은 대량의 데이터를 효율적으로 전송하고 관리하기 위한 핵심 요소이다. 페이지네이션을 통해 서버는 데이터를 작은 “페이지” 단위로 나누어 전달하여 성능, 사용자 경험, 리소스 사용을 모두 최적화할 수 있다. 페이지네이션의 필요성과 중요성 페이지네이션이 필요한 주요 이유는 다음과 같다: 성능 최적화 대규모 데이터셋을 한 번에 전송하면 여러 문제가 발생한다: 서버 부하 증가: 대량의 레코드를 검색하고 직렬화하는 과정은 서버 리소스를 많이 소모한다. 네트워크 부하: 대용량 응답은 네트워크 대역폭을 많이 사용하며, 특히 모바일 환경에서 문제가 된다. 응답 지연: 큰 데이터셋을 처리하는 데 시간이 오래 걸려 사용자 경험이 저하된다. 메모리 사용량: 클라이언트와 서버 모두 대량의 데이터를 메모리에 로드해야 한다. 사용자 경험 향상 페이지네이션은 사용자 인터페이스와 경험을 개선한다: ...

February 27, 2025 · 15 min · Me

URI Design

URI Design URI(Uniform Resource Identifier) 디자인은 API 설계의 근본적인 요소로, 개발자 경험과 API의 사용성, 유지보수성에 직접적인 영향을 미친다. 잘 설계된 URI는 API의 직관성을 높이고, 학습 곡선을 완화하며, 리소스의 구조와 관계를 명확히 보여준다. URI의 기본 개념과 구조 URI는 인터넷에서 특정 리소스를 고유하게 식별하는 문자열이다. API 설계에서 URI는 클라이언트가 서버의 리소스와 상호 작용하는 진입점 역할을 한다. URI의 구성 요소 URI의 주요 구성 요소를 이해하는 것은 효과적인 디자인의 시작점이다: 1 2 3 4 https://api.example.com:8080/v1/customers/42/orders?status=pending#summary \___/ \______________/\__/\_________________/ \____________/ \______/ | | | | | | scheme authority port path query fragment 스킴(Scheme): URI가 사용하는 프로토콜(https, http 등) 권한(Authority): 서비스의 도메인 이름 또는 IP 주소 포트(Port): 서비스가 수신 대기하는 네트워크 포트(종종 생략됨) 경로(Path): 리소스의 위치를 계층적으로 나타내는 문자열 쿼리(Query): 리소스에 대한 추가 매개변수(필터링, 정렬 등) 프래그먼트(Fragment): 리소스 내의 특정 부분을 가리키는 식별자(일반적으로 API에서 덜 사용됨) URI vs. URL vs. URN URI 개념을 정확히 이해하기 위해서는 관련 용어의 차이점을 아는 것이 중요하다: ...

February 27, 2025 · 11 min · Me

Get-and-Patch

Get-and-Patch “Get-and-Patch"는 리소스의 부분적 업데이트를 효율적으로 처리하기 위한 REST API 디자인 패턴으로, 기존 CRUD(Create, Read, Update, Delete) 방식의 한계를 보완한다. 이 패턴은 GET과 PATCH 메서드 조합을 통해 리소스의 전체 상태를 검색하지 않고도 특정 필드만 업데이트할 수 있도록 설계되었다. 핵심 개념 두 단계 프로세스 Get: 리소스의 현재 상태 조회 (필요한 필드 확인) Patch: 변경된 필드만 서버에 전송하여 부분 업데이트 HTTP 메서드 활용 단계 HTTP 메서드 설명 Get GET 리소스의 전체/일부 상태 조회 Patch PATCH 식별된 필드만 부분적으로 업데이트 CRUD vs. Get-and-Patch 구분 CRUD (PUT) Get-and-Patch (PATCH) 업데이트 범위 전체 리소스 교체 특정 필드만 수정 네트워크 효율성 모든 필드 전송 필요 변경된 필드만 전송 멱등성 보장됨 조건부 보장 (구현 방식에 따라 다름) 동시성 제어 전체 리소스 버전 관리 필드 단위 낙관적 잠금 가능 사용 사례 단순 리소스 교체 대규모 객체의 일부 수정 작동 원리 Get 단계 클라이언트가 리소스의 현재 상태를 조회한다. ...

February 26, 2025 · 3 min · Me

Get-and-Set

Get-and-Set “Get-and-Set"은 전통적인 CRUD(Create, Read, Update, Delete) 방식을 개선한 REST API 디자인 패턴으로, 리소스의 존재 여부와 관계없이 단순화된 작업 흐름을 제공한다. 기본 개념 두 가지 핵심 연산 Get: 리소스의 현재 상태 조회 (CRUD의 Read와 동일) Set: Create/Update: 리소스 존재 여부와 무관하게 값을 설정 (Last-Write-Wins 정책) Delete: null 값을 전달하여 리소스 삭제 동작 원리 1 2 3 4 [클라이언트] [서버] Get 요청 → 리소스 상태 확인 Set 요청 → 값 설정/삭제 ← 최종 상태 반환 (옵션: 이전 값 포함) CRUD와의 차이점 기능 CRUD API Get-and-Set API 생성/수정 POST/PUT/PATCH 분리 단일 Set 연산으로 통합 삭제 DELETE 메서드 사용 Set(null)으로 처리 동시성 제어 복잡한 버전 관리 필요 Last-Write-Wins 기본 적용 에러 처리 상태 코드 404/409 등 다양 단순화된 200/400/500 사용 사례 복잡한 비즈니스 로직 단순 리소스 관리 시스템 작동 원리 상세 Set 연산의 3가지 시나리오 리소스 없음 + 값 전달: 새 리소스 생성 (201 Created) 리소스 존재 + 값 전달: 기존 리소스 덮어쓰기 (200 OK) 리소스 존재 + null 전달: 리소스 삭제 (204 No Content) Last-Write-Wins 동시성 제어 타임스탬프 기반: 최종 쓰기 요청이 우선 적용 ...

February 26, 2025 · 3 min · Me

Timestamp-Checked

Timestamp-Checked Timestamp-Checked 방식은 동시성 제어를 위한 중요한 기법 중 하나로, 주로 낙관적 동시성 제어(Optimistic Concurrency Control)의 맥락에서 사용된다. 기본 원리 타임스탬프 할당: 각 트랜잭션에 고유한 타임스탬프를 부여한다. 이는 주로 트랜잭션이 시작될 때 시스템 시간이나 논리적 카운터를 사용하여 생성된다. 읽기-검증-쓰기 단계: 트랜잭션은 다음 세 단계로 실행된다. 읽기 단계: 데이터를 읽고 로컬에서 작업을 수행한다. 검증 단계: 다른 트랜잭션과의 충돌을 검사한다. 쓰기 단계: 충돌이 없다면 변경사항을 데이터베이스에 반영한다. 충돌 감지: 트랜잭션이 커밋하려 할 때, 자신이 읽은 데이터가 다른 트랜잭션에 의해 변경되었는지 확인한다. 작동 방식 각 데이터 항목에는 두 가지 타임스탬프가 유지된다: 읽기 타임스탬프(R-timestamp): 해당 데이터를 성공적으로 읽은 트랜잭션 중 가장 큰 타임스탬프 쓰기 타임스탬프(W-timestamp): 해당 데이터를 성공적으로 수정한 트랜잭션 중 가장 큰 타임스탬프 트랜잭션이 데이터를 읽거나 쓰려고 할 때, 다음과 같은 규칙이 적용된다: 읽기 연산: 트랜잭션의 타임스탬프가 데이터의 쓰기 타임스탬프보다 작으면 연산이 거부되고 트랜잭션은 롤백된다. 쓰기 연산: 트랜잭션의 타임스탬프가 데이터의 읽기 또는 쓰기 타임스탬프보다 작으면 연산이 거부되고 트랜잭션은 롤백된다. 장점 교착 상태(Deadlock) 방지: 락을 사용하지 않기 때문에 교착 상태가 발생하지 않는다. 대기 시간 감소: 트랜잭션이 다른 트랜잭션을 기다리지 않고 바로 실행된다. 높은 동시성: 여러 트랜잭션이 동시에 실행될 수 있어 시스템의 처리량이 향상된다. 단점 롤백 가능성 증가: 충돌이 감지되면 트랜잭션이 롤백되어야 하므로, 시스템 부하가 높을 때 롤백 빈도가 증가할 수 있다. 연쇄 롤백: 하나의 트랜잭션 롤백이 다른 트랜잭션의 롤백을 유발할 수 있다. 오버헤드: 각 데이터 항목에 대해 타임스탬프를 유지하고 관리해야 하므로 추가적인 저장 공간과 처리 시간이 필요하다. Timestamp-Checked 방식은 특히 읽기 작업이 많고 쓰기 충돌이 적은 환경에서 효과적이다. 그러나 높은 동시성 환경에서는 롤백으로 인한 성능 저하를 주의해야 한다. 따라서 시스템의 특성과 요구사항을 고려하여 적절한 동시성 제어 방식을 선택해야 한다. ...

February 26, 2025 · 2 min · Me