전체 글
-
웹 서비스 성능을 이해하는 필수 지표: 트래픽 관련 용어 정리Back-End/Performance & Optimization 2024. 11. 3. 18:28
웹 서비스의 성공은 단순히 기능의 제공에 그치지 않고, 많은 사용자에게 안정적이고 빠른 서비스를 제공하는 능력에 달려 있습니다. 이 과정에서 '트래픽 지표'는 중요한 역할을 합니다. 웹 성능 지표로 자주 언급되는 TPS (Transactions Per Second) 외에도 QPS, RPS, Latency 등 다양한 트래픽 용어들이 있는데요, 각각이 어떤 의미를 가지며 어떻게 활용되는지 하나씩 살펴보겠습니다.1. TPS (Transactions Per Second): 트랜잭션 처리 능력TPS는 서비스가 초당 몇 개의 트랜잭션을 처리할 수 있는지를 나타내는 지표로, 시스템 성능을 평가하는 중요한 기준입니다. 예를 들어, 결제 시스템이나 금융 서비스는 실시간 트랜잭션을 안정적으로 처리해야 하므로 TPS가 매우..
-
자료구조: 큐(Queue)Algorithm & Data Structure/DataStructure 2024. 11. 2. 14:51
1. 개요 (Introduction)Queue는 데이터를 일렬로 저장하고 처리하는 선형 자료구조로, FIFO(First-In-First-Out) 원칙을 따릅니다. 이는 가장 먼저 추가된 요소가 가장 먼저 제거되는 방식으로, 사람 줄을 서서 차례로 처리하는 것과 유사합니다. Queue는 CPU 스케줄링, 프린터 작업 처리, 네트워크 패킷 처리 등 다양한 분야에서 활용됩니다.2. Queue의 활용 예시 (Use Cases of Queue)Queue는 특정 순서를 유지해야 하는 문제에서 유용하게 사용됩니다.작업 스케줄링: 운영체제의 작업 스케줄링에서 프로세스를 처리할 때 Queue가 사용됩니다. 먼저 들어온 작업이 먼저 처리되므로 처리 순서를 제어할 수 있습니다.프린터 작업 관리: 프린터에 여러 작업이 대기 ..
-
자료구조: 스택(Stack)Algorithm & Data Structure/DataStructure 2024. 11. 2. 14:42
1. 개요 (Introduction)Stack은 데이터가 순서대로 쌓이고 제거되는 자료구조로, LIFO(Last-In-First-Out) 원칙을 따릅니다. 이는 가장 마지막에 추가된 요소가 가장 먼저 제거되는 특성으로, 마치 접시를 쌓아 올리고 하나씩 꺼내는 방식과 유사합니다. Stack은 주로 메모리 관리, 수식 계산, 웹 브라우저의 뒤로 가기 기능 등 여러 분야에서 활용됩니다. 2. Stack의 활용 예시 (Use Cases of Stack)Stack은 일상적인 문제 해결과 알고리즘에서 자주 사용되는 자료구조입니다.함수 호출 관리: 프로그래밍 언어의 런타임 시스템은 Stack을 사용하여 함수 호출을 관리합니다. 함수가 호출될 때마다 Stack에 새로운 프레임이 쌓이며, 함수가 끝나면 Stack에서 제..
-
golang: 배열, 슬라이스, 맵Back-End/Golang 2024. 10. 27. 10:13
1. 배열 (Arrays)정적 크기: 배열은 생성 시 크기가 고정되며, 한 번 설정하면 변경할 수 없습니다.동일 타입 요소: 모든 요소는 같은 타입이어야 합니다.메모리 연속성: 배열은 메모리에 연속적으로 저장되므로 특정 인덱스에 빠르게 접근할 수 있습니다.var arr [5]int // 길이가 5인 int 배열, 모든 요소는 0으로 초기화arr[0] = 1 // 배열의 첫 번째 요소에 값 할당arr2 := [3]string{"Go", "is", "fun"} // 리터럴을 사용해 초기화 가능for i, v := range arr2 { fmt.Printf("index: %d, value: %s\n", i, v)} 실전 예시pa..
-
그리디(Greedy) 알고리즘Algorithm & Data Structure/Algorithm 2024. 10. 26. 16:06
그리디(탐욕) 알고리즘은 매 순간 최적의 선택을 함으로써 전체 최적해에 도달하려는 알고리즘입니다. 즉, 문제 해결 과정에서 지금 당장 가장 좋아 보이는 선택을 계속해서 하는 방식입니다. 이러한 선택들은 각 단계에서 부분적인 최적해를 구성하고, 최종적으로 전체 최적해를 구성하는 데 도움을 줍니다.그리디 알고리즘의 특징국소 최적 선택(Local Optimal Choice): 그리디 알고리즘은 각 단계에서의 최적해를 구하려고 합니다. 이는 전체 문제의 최적해를 보장하기보다는 각 단계의 최적해를 보장하는 접근 방식입니다.문제 분할: 큰 문제를 여러 단계의 작은 문제로 나눕니다. 매 단계에서 현재 상황에서 최적의 선택을 하고, 그 선택을 기반으로 다음 단계로 넘어갑니다.한 번의 선택: 한 번 내린 선택은 이후의 ..
-
golang: 그레이스풀 셧다운(Graceful Shutdown)Back-End/Golang 2024. 10. 25. 14:40
그레이스풀 셧다운의 개념 그레이스풀 셧다운은 서버가 종료 요청을 받았을 때, 즉시 모든 연결을 끊지 않고 현재 처리 중인 요청들을 완료한 후 안전하게 종료하는 방식입니다. 이렇게 하면 클라이언트 요청이 비정상적으로 끊기는 것을 방지할 수 있고, 데이터 손실이나 요청 실패를 줄일 수 있습니다. 일반적으로, 서버가 종료할 때 남은 작업을 완료하기 위한 시간 제한(타임아웃)을 설정하여 요청이 무기한 지속되는 것을 방지합니다.Golang에서 그레이스풀 셧다운 Golang의 경우, net/http 패키지를 통해 웹 서버를 간단하게 실행하고 그레이스풀 셧다운을 구현할 수 있습니다. Golang의 비동기 특성과 context 패키지는 이러한 셧다운을 쉽게 처리할 수 있게 해줍니다.Golang 그레이스풀 셧다운 예시p..
-
golang: Gin vs ChiBack-End/Golang 2024. 10. 17. 21:58
제가 Golang으로 웹 애플리케이션을 개발할 때 대표적으로 선택한 두 가지 프레임워크는 Gin과 Chi입니다. 이 글에서는 두 프레임워크를 다양한 측면에서 비교하여 각 프레임워크의 장단점을 심도 있게 살펴보고, 어떤 상황에서 어떤 프레임워크가 더 적합한지 알아보겠습니다.1. 성능Gin과 Chi 모두 경량 프레임워크로 높은 성능을 제공합니다. 하지만 일부 최적화 방법과 설계 철학이 다릅니다.Gin의 성능Gin은 컴파일된 정규 표현식과 트리 라우팅을 통해 요청을 빠르게 처리합니다.JSON 직렬화/역직렬화 작업에 최적화된 기능을 포함하여 빠른 성능을 발휘합니다.요청 처리 속도는 초당 수천 개의 요청을 처리할 수 있을 정도로 뛰어납니다.Chi의 성능Chi는 Go 표준 라이브러리의 net/http 위에 구축되어..
-
시스템 디자인(System design)이란?Computer Science 2024. 9. 14. 18:11
백엔드 시스템 디자인은 웹 및 모바일 애플리케이션의 성능, 확장성, 안정성에 중요한 영향을 미칩니다. 이 글에서는 백엔드 시스템 설계의 주요 단계와 핵심 개념을 소개하고, 이를 실무에서 어떻게 적용할 수 있는지 설명합니다. 본격적인 시스템 디자인1. 요구 사항 명확화시스템 디자인을 시작하기 전에 기능적 요구 사항과 비기능적 요구 사항을 명확히 하는 것이 필수적입니다. 이를 통해 설계 방향을 올바르게 설정할 수 있습니다.2. 용량 추정 및 확장성 고려시스템 설계를 시작하기 전에 예상 트래픽과 데이터 양을 추정하는 것은 매우 중요합니다. 시스템이 현재 요구사항뿐만 아니라 미래의 성장도 감당할 수 있어야 하기 때문입니다.사용자 수: 예상 일일 사용자 수와 동시 접속자를 고려합니다.트래픽: 초당 읽기/쓰기 요청..