스레드 풀의 크기를 적절히 설정해야 하는 이유 스레드를 생성하는 것은 비용이 드는 작업이다. 플랫폼마다 오버헤드는 다르지만, 스레드가 생성될 때 요청이 처리되는 지연시간(latency)과 OS에 의한 추가적인 처리 과정에 드는 시간 등 자원이 소모된다. 이러한 스레드 생성 비용을 줄이기 위해 스레드 풀이 필요하다. 스레드 풀에서 미리 생성해둔 스레드를 재사용함으로써 자원 낭비를 막을 수 있기 때문이다. 그렇다면 스레드 풀에 무조건 많은 스레드를 생성해두면 좋을까? 아래에서 자세히 알아보겠지만, 스레드를 많이 생성해둔다고 그 스레드를 다 사용할 수 있는 것은 아니다. 쓸데없이 스레드를 많이 생성한다면 생성하는 데에 드는 자원과 비용이 낭비된다. 그렇다고 스레드를 부족하게 만들어둔다면 CPU 사용률이 낮아지..
As-a-service IaaS(Infrastucture-as-a-service), PaaS(Platform-as-a-service), SaaS(Software-as-a-service)의 차이점은 뭘까? 우선 "As-a-service" 가 무슨 뜻인지 알아야 한다. "As-a-service"는 보통 제 3자로부터 제공받는 클라우드 컴퓨팅 서비스를 뜻한다. 클라우드 컴퓨팅 서비스를 이용하면 사용자는 더 적은 온-프레미스 인프라를 관리하게 된다. 온-프레미스 인프라는 사용자에게 많은 책임을 전가한다. 만약 모든 하드웨어와 소프트웨어가 온-프레미스라면, 사용자는 모든 것을 유지보수 및 관리해야 한다. 하지만 제 3자로부터 클라우드 컴퓨팅 서비스를 제공받는다면 많은 부분의 관리를 제 3자에게 맡기고 더 중요한 ..
OLTP(Online Transaction Processing)란? OLTP란 트랜잭션 지향 애플리케이션을 손쉽게 관리할 수 있도록 도와주는 정보 시스템의 한 계열로서, 일반적으로 데이터 기입 및 트랜잭션 처리를 위해 존재한다. -위키백과- OLTP는 동시에 발생하는 다수의 트랜잭션을 실행하는 데이터 처리 유형이다. OLTP는 쿼리를 실행하고, 데이터 무결성을 유지하는 것을 목표로 한다. 예를 들어 은행의 ATM 기계는 OLTP 과정을 거친다. ATM 기계로 돈을 통장에 입금한다고 하자. 가장 먼저 카드를 삽입하면 ATM이 카드 정보를 인식한다. 카드를 인식했으면 돈을 기계에 넣는다. ATM은 돈을 세면서 잘못된 돈은 없는지 확인한다. 확인이 끝나면 돈을 보관하고 통장에 돈을 입금한다. 이러한 과정 중 ..
프림 알고리즘(Prim`s Algorithm)이란? 프림 알고리즘은 크루스칼 알고리즘과 더불어 최소 신장 트리를 찾는 대표적인 알고리즘 중 하나이다. 크루스칼 알고리즘과 최소 신장 트리에 대해 잘 모른다면 이전 게시물을 보고 오자. 참고) [알고리즘] 크루스칼 알고리즘(Kruskal Algorithm)이란? 크루스칼 알고리즘 C++ 구현, 최소 신장 트리(Mi 최소 신장 트리(Minimum Spanning Tree)란? 크루스칼 알고리즘에 대해 알아보기 위해선 우선 최소 신장 트리에 대해 알아야 한다. 우선, 신장 트리(Spanning Tree)란 무방향(Undirected) 그래프의 최소 연결 부 code-lab1.tistory.com 프림 알고리즘 과정 프림 알고리즘의 과정은 아래와 같이 간단한 편이..
최소 신장 트리(Minimum Spanning Tree)란? 크루스칼 알고리즘에 대해 알아보기 위해선 우선 최소 신장 트리에 대해 알아야 한다. 우선, 신장 트리(Spanning Tree)란 무방향(Undirected) 그래프의 최소 연결 부분 그래프이다. 좀 더 쉽게 설명하자면 N개의 정점을 가지는 그래프 중 최소 간선의 수인 N-1개의 간선으로 연결된 그래프를 뜻한다. N개의 정점이 N-1개의 간선으로 연결되어 있으면 이것은 필연적으로 트리 형태를 이루게 되기 때문에 신장 트리라고 불린다. [그림 1]을 보면 5개의 정점을 가진 그래프를 4개의 간선만을 사용해 연결하면 신장 트리가 되는 것을 볼 수 있다. 신장 트리는 하나의 그래프에서 여러 개가 나올 수 있다. 최소 신장 트리는 이러한 신장 트리들 ..
깃 브랜치(Git Branch)란 무엇인가 개발을 하다 보면 코드를 여러 방향으로 개발할 일이 생긴다. 예를 들어 A라는 코드를 B로 바꿔보기도 하고, C로 바꿔보기도 하며 가장 효율적인 코드를 찾아나갈 수도 있다. 이렇게 독립적으로 개발하는 것이 브랜치의 기본 개념이다. 브랜치는 말 그대로 가지이다. 하나의 나무에서 여러 갈래로 가지가 뻗어나가는 것처럼, 하나의 코드에서 여러 개의 코드로 갈라지며 다양한 개발 흐름을 만들어 낼 수 있다. 혼자 개발할 때 뿐만 아니라, 여러 사람이 협업하여 개발할 때 브랜치는 더욱 빛을 발한다. 어떤 개발자는 A라는 코드에 B기능을 추가하고, 또 다른 개발자는 동시에 C라는 기능을 추가할 수 있다. 커밋과 브랜치 깃은 데이터를 변경사항으로 기록하지 않고 일련의 스냅샷(s..