분류 전체보기
-
그리디(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. 용량 추정 및 확장성 고려시스템 설계를 시작하기 전에 예상 트래픽과 데이터 양을 추정하는 것은 매우 중요합니다. 시스템이 현재 요구사항뿐만 아니라 미래의 성장도 감당할 수 있어야 하기 때문입니다.사용자 수: 예상 일일 사용자 수와 동시 접속자를 고려합니다.트래픽: 초당 읽기/쓰기 요청..
-
localhost란?Computer Science/Network 2024. 9. 14. 16:00
localhost, 127.0.0.1, 그리고 0.0.0.0은 네트워킹과 관련된 주소들이며, 각기 다른 의미와 용도를 가지고 있습니다. 이들은 주로 서버 설정이나 네트워크 프로그래밍에서 사용되며, 각각의 의미와 차이를 이해하는 것이 중요합니다. 아래에서 이 주소들이 무엇을 의미하는지, 그리고 이를 이해하기 위한 관련 개념들을 설명하겠습니다.1. localhostlocalhost는 컴퓨터 자신의 IP 주소를 나타내는 특별한 도메인 이름입니다. 주로 테스트 목적으로 사용되며, 이 도메인 이름은 컴퓨터의 네트워크 인터페이스 중 자신을 참조할 때 사용됩니다.IP 주소: localhost는 일반적으로 127.0.0.1이라는 IP 주소로 해석됩니다.용도: localhost를 사용하면 네트워크를 통해 외부로 나가지 ..
-
서브넷(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..
-
데이터 저장 용량의 단위Computer Science/OS 2024. 8. 4. 15:01
데이터 저장 용량의 단위는 바이트를 기본 단위로 하여 위계적으로 증가합니다. 여기서 각 단위가 하나씩 증가할 때마다 일반적으로 1,024배씩 증가합니다.데이터 저장 용량 단위바이트(Byte, B)가장 작은 기본 단위로, 1바이트는 보통 8비트로 구성됩니다.킬로바이트(Kilobyte, KB)1 KB = 1,024 B메가바이트(Megabyte, MB)1 MB = 1,024 KB = 1,048,576 B기가바이트(Gigabyte, GB)1 GB = 1,024 MB = 1,073,741,824 B테라바이트(Terabyte, TB)1 TB = 1,024 GB = 1,099,511,627,776 B페타바이트(Petabyte, PB)1 PB = 1,024 TB = 1,048,576 GB = 1,125,899,906,..