Back-End
-
사용자 기반을 이해하는 핵심 지표: 사용자 활동 관련 용어 정리Back-End/Performance & Optimization 2024. 11. 3. 18:30
서비스나 앱의 성공 여부를 평가하는 데 있어 사용자 수는 단연 중요한 기준입니다. 하지만 단순한 사용자 수보다는 이들이 얼마나 자주, 활발하게 사용하고 있는지를 나타내는 지표가 더욱 유용할 수 있습니다. 여기서 등장하는 것이 MAU (Monthly Active Users)와 관련된 지표들입니다. MAU는 한 달 동안 서비스를 얼마나 많은 사용자가 이용했는지 보여주며, 이 외에도 DAU, 유지율 등 다양한 사용자 활동 지표가 함께 활용됩니다. 이번 글에서는 MAU와 관련된 주요 용어들을 하나씩 정리해보겠습니다.1. MAU (Monthly Active Users): 한 달간의 활성 사용자 수MAU는 월간 활성 사용자 수를 나타내며, 서비스의 인기도와 사용자 기반을 평가하는 데 필수적인 지표입니다. 한 달 동..
-
웹 서비스 성능을 이해하는 필수 지표: 트래픽 관련 용어 정리Back-End/Performance & Optimization 2024. 11. 3. 18:28
웹 서비스의 성공은 단순히 기능의 제공에 그치지 않고, 많은 사용자에게 안정적이고 빠른 서비스를 제공하는 능력에 달려 있습니다. 이 과정에서 '트래픽 지표'는 중요한 역할을 합니다. 웹 성능 지표로 자주 언급되는 TPS (Transactions Per Second) 외에도 QPS, RPS, Latency 등 다양한 트래픽 용어들이 있는데요, 각각이 어떤 의미를 가지며 어떻게 활용되는지 하나씩 살펴보겠습니다.1. TPS (Transactions Per Second): 트랜잭션 처리 능력TPS는 서비스가 초당 몇 개의 트랜잭션을 처리할 수 있는지를 나타내는 지표로, 시스템 성능을 평가하는 중요한 기준입니다. 예를 들어, 결제 시스템이나 금융 서비스는 실시간 트랜잭션을 안정적으로 처리해야 하므로 TPS가 매우..
-
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..
-
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 위에 구축되어..
-
서브넷(subnet)이란?Back-End/Docker & k8s 2024. 8. 29. 09:36
서브넷(Subnet)은 네트워크를 더 작은 네트워크 단위로 나누는 방법을 의미합니다. 이는 IP 주소를 효율적으로 관리하고, 네트워크 트래픽을 효과적으로 라우팅하기 위해 사용됩니다. 서브넷은 "서브네트워크(Subnetwork)"의 줄임말로, 대규모 네트워크를 여러 작은 네트워크로 구분하여 관리할 때 유용합니다.서브넷의 주요 개념IP 주소:모든 네트워크 장치(컴퓨터, 서버, 라우터 등)는 네트워크에서 고유한 IP 주소를 가져야 합니다. IP 주소는 일반적으로 IPv4 기준으로 32비트 길이의 숫자로, 네 부분(옥텟)으로 나뉘며, 각 부분은 0에서 255 사이의 값을 가집니다.예: 192.168.1.1네트워크와 호스트 부분:IP 주소는 네트워크 부분(network portion)과 호스트 부분(host po..
-
golang: 루프 변수의 스코프 이슈(Fixing For Loops in Go 1.22)Back-End/Golang 2024. 8. 5. 12:46
이 글은 https://go.dev/blog/loopvar-preview 주제를 다룹니다. 문제 설명루프 변수의 스코프 문제Go에서 for 루프는 반복문 내에서 루프 변수를 사용합니다. 하지만 기존의 Go 버전에서는 루프 변수의 스코프가 루프 전체에 걸쳐 있기 때문에, 개발자가 의도하지 않게 루프 변수가 변경되는 상황이 발생할 수 있습니다. 이 문제는 특히 **고루틴(goroutine)**이나 **클로저(closure)**를 사용할 때 더욱 두드러지며, 예측하지 못한 동작을 초래할 수 있습니다.예시 코드 및 문제점2. 고루틴 사용 예시func main() { done := make(chan bool) values := []string{"a", "b", "c"} for _, v := ran..
-
golang: 제네릭(Generic)이란?Back-End/Golang 2024. 8. 3. 13:14
제네릭(Generic)은 Go 언어에서 매우 강력한 도구로, 다양한 데이터 타입을 처리하고 코드를 간결하고 유연하게 만드는 데 유용합니다. 이를 통해 코드의 확장성, 안정성, 재사용성을 높일 수 있으며, 다양한 상황에서 효율적으로 사용할 수 있습니다. 제네릭을 잘 활용하면 더 나은 설계를 하고 변화하는 요구사항에 유연하게 대응할 수 있는 코드를 작성할 수 있습니다. 1. 타입 확장성제네릭을 사용하면 다양한 데이터 타입을 하나의 함수나 구조체로 처리할 수 있습니다. 이는 특정 타입에 제한되지 않고, 여러 타입에 대해 동일한 로직을 사용할 수 있게 합니다.예시: 숫자 계산 함수package mainimport "fmt"// 제네릭 타입 정의type Number interface { ~int | ~float6..