[CS | 실시간 시스템] 병목이 발생하는 이유
·
CS
실시간 시스템에서 병목이 발생하는 이유실시간 시스템을 처음 설계할 때 가장 많이 착각하는 부분 중 하나는“성능을 충분히 높이면 병목은 없앨 수 있다”는 생각입니다.저 역시 SpeakNote 프로젝트를 시작할 당시에는, 처리 속도를 빠르게 만들면 실시간성은 자연스럽게 따라올 것이라고 생각했습니다.하지만 실제로 실시간 음성 스트리밍, STT, AI 요약, 그리고 PDF 주석 렌더링까지 연결해보니 병목은 ‘없앨 수 있는 문제’가 아니라, 반드시 관리해야 하는 대상라는 점을 체감하게 되었습니다.이 글에서는 SpeakNote 프로젝트를 진행하며 느꼈던 경험을 바탕으로, 왜 실시간 시스템에서는 병목이 필연적으로 발생하는지, 그리고 이를 어떻게 바라봐야 하는지 정리해보려고 합니다.1. 실시간 시스템은 항상 “흐름”으..
[CS - 네트워크] OSI 7계층
·
CS
“OSI 7계층이 왜 필요한지, TCP/IP랑 뭐가 다른지설명 없이도 흐름으로 말할 수 있는 상태 만들기” 1. 네트워크가 뭔지 알아보자! 네트워크는 왜 필요한가?왜 그냥 한 덩어리로 만들지 않고 계층으로 나눴을까? 네트워크란서로 다른 컴퓨터가 데이터를 주고받는 구조 컴퓨터들이 통신 기술을 이용해서 그물망처럼 연결된 통신 이용 형태를 의미한다. 계층을 나누는 이유 계층화는 문제 분리와 책임 분리를 위한 설계한 단계에 문제가 생겨도 다른 단계는 그대로 유지할 수 있다 네트워크를 한 문장으로 말하면, 서로 다른 컴퓨터들이 데이터를 주고받을 수 있도록 만든 구조다.여기서 중요한 건 ‘데이터’ 자체가 아니라, 그 데이터를 어떻게 안전하고 효율적으로 주고받느냐를 정한 규칙과 구조다.예를 들어 내가 내 노..
[CS - 컴퓨터구조] 컴퓨터가 이해하는 정보
·
CS
부동 소수점 - IEEE754IEEE 754는 실수를 표현하기 위한 국제 표준이며,32비트(single)와 64비트(double) 형식이 대표적 부동 소수점 식 [ S ][ EEEEEEEE ][ FFFFFFFFFFFFFFFFFFFFFFF ] 1 8 23값 = (-1)^S × 1.F × 2^(E - 127)​ 여기서 E-127인 이유는 바이어스 값이 더해져 저장되기 떄문이다. 컴퓨터가 지수를 저장할 때 하는 것. 바이어스 (bias) 는 2^(k-1)-1 이고, 이때 K는 지수를 표현하기 위해 쓰이는 전체 비트 수이다. IEEE 754 32비트인 경우, 지수에 8비트를 할당하므로 127이 된다. 바이어스를 더하는 이유바이어스(bias)는 지수를 “부호 없는 정수..
[CS - 네트워크] API 호출로 보는 네트워크
·
CS
시나리오: Next.js(브라우저) → Spring Boot API 호출프론트: https://app.example.com (브라우저)백엔드: https://api.example.com (Spring Boot + (앞단에) Nginx/ALB 같은 프록시 있을 수도 있음)호출: 로그인 후 유저정보 조회GET https://api.example.com/api/user1) “한 번의 API 호출”이 실제로 지나가는 전체 흐름 (Spring Boot 기준)브라우저에서 fetch/axios 호출프론트 코드에서 fetch("https://api.example.com/api/user") 실행.여기서부터 네트워크 시작.DNS: 도메인 → IP로 변환 (7계층 서비스)브라우저는 api.example.com의 IP 주소가..
[CS - 컴퓨터구조 ] 컴퓨터 구조 공부, 첫 걸음!
·
CS
컴퓨터 구조 학습을 들어가기 전에, 어떤걸 배우는지 파악해보려 한다. 컴퓨터 구조는 크게 컴퓨터가 이해하는 정보인 데이터와 명령어에 대한 학습과핵심 부품인 CPU, 메모리와 캐시 메모리 , 보조 기억 장치, 입출력 장치로 나뉜다. 컴퓨터가 이해하는 정보는 데이터와 명령어이고, 데이터는 0,1 의 숫자로 표현하거나 문자로 표현될 수 있다. 이때 데이터는 명령어에 대한 종속적인 정보, 명령의 대상 , 명령어의 재료이다! 이때 명령을 실행하는 주체는 CPU 이고, CPU 의 종류에 따라 실행 가능한 세부적인 명령어의 종류와 처리가 달라질 수 있다. 1. 명령어의 종류2. 명령어 사이클 에 대해서 공부 할 수 있다. 컴퓨터의 핵심 부품인 CPU , 메모리와 캐시 메모리 , 보조 기억 장치 , 입출력 장..
[DATA STRUCTURES - Graph] Prim Algorithm — “정점 중심” Greedy MST
·
CS
Prim 알고리즘은 정점 중심이다.Kruskal 은 간선 중심으로, 가중치로 정렬을 했을 때Prim 은 선택한 정점의 집합에서 , 아직 선택되지 않은 정점으로 나가는 간선 중에 가중치가 가장 작은 간선을 선택한다. Kruskal 과 다르게 Cycle 검사가 필요 없다. 새로운 후보 간선들 중, 가중치 작은 간선을 선택할 때해당 후보들은 다 "선택되지 않은 정점으로 나가는 간선" 들이기 때문이다! select v such that (u, v) is the smallest edge where u ∈ V_new, v ∉ V_new;현재 트리에 포함된 정점 집합인 V_new 에서 밖으로 나가는 정점들을 본다! v는 V_new에 있으면 안된다. 새 정점 v를 트리에 편입시키는 최소 간선을 고르는 것임..
[DATA STRUCTURES - Graph] Kruskal’s Algorithm (크루스칼) — “간선 중심” Greedy MST
·
CS
Kruskal 이란 , 가중치 그래프에서 MST (최소 스패닝 트리) 를 찾는 방법이다. MST 조건- 모든 정점을 포함하되- 사이클이 존재하면 안됨- 간선의 수가 V-1 이여야 하며총 가중치가 최소가 되어야 함! (단순 ST 와의 차이점.) 여기서 Kruskal은 가중치가 작은 간선부터 하나씩 고르고, 사이클이 생기면 버리는 것이다. Greedy 알고리즘으로 분류되는 이유는 " 매 단계에서 가장 작은 간선을 고르는 지역 최적" 을 선택하기 때문인데,그래도 누적이 돼서 전역 최적이 된다. KruskalMST(V,E): sort E by weight make-set(v) for all v in V T = ∅ for each edge (u,v) in E: if find(u) != fi..
[CS] 네트워크(Network) 정리
·
CS
🌐 네트워크(Network) 정리네트워크(Network)란 전송 매체를 통해 서로 연결된 장치들이 데이터를 교환하는 시스템의 모음이다.각 장치는 동일한 프로토콜(Protocol) 을 사용해 데이터를 주고받는다.L2 스위치로 연결된 소규모 네트워크(LAN)들이 모여 더 큰 네트워크를 구성할 수 있다.서로 다른 네트워크를 연결하기 위해 라우터(Router, L3 장비) 같은 중개 장비가 필요하다.왜 프로토콜이 필요한가?컴퓨터 내부에서만 처리되는 경우에는 데이터 전달 방식이나 해석 방식에 대한 약속이 필요 없다.하지만 현실의 통신 대상은 대부분 물리적으로 분리된 다른 장치이고, 각 장치는 서로 다른 하드웨어/OS/소프트웨어를 사용할 수 있다.그래서 두 장치가 정확히 데이터를 주고받고 해석하려면“우리는 이렇게..