
SSR은 서버에서 HTML을 렌더링하여 클라이언트에 전달하는 방식이다.즉, 브라우저가 페이지를 요청하면 서버에서 HTML을 완성해 보내주기 때문에 초기 로딩 속도가 빠르고, SEO(검색 엔진 최적화)에 유리하다. SSR의 동작 과정 사용자가 웹사이트를 요청서버에서 데이

사람이 작성한 코드는 기본적으로 컴퓨터가 읽을 수 없다. 컴퓨터는 0과 1로 이루어진 기계어(바이너리 코드)만 이해할 수 있다.하지만 사람이 기계어를 작성하기 어렵기 때문에, 사람이 읽을 수 있는 언어(C, Java , Python 등)를 사용한다.사람이 읽기 쉬운 언

우리가 hello 프로그램을 실행한다고 가정해보자.이 프로그램이 실행되기까지는 여러 단계를 거친다.하드디스크 → 메인 메모리 → 디스플레이(화면) 출력이처럼 프로그램이 실행되기 전까지 여러 저장장치 간의 데이터 복사가 일어나며, 이 과정이 바로 실행 속도를 늦추는 오버

운영체제는 컴퓨터 하드웨어 위에서 동작하는 중간 관리자이다.예를 들어, hello 프로그램을 실행하면 이 프로그램이 직접 키보드, 디스플레이, 하드디스크 같은 하드웨어를 직접 제어하지 않는다.→ 운영체제(OS)가 하드웨어와 프로그램 사이에서 중간다리 역할을 하기 때문이

그리고 우리가 말하는 "네트워크 통신"이란, 결국 한 시스템에서 다른 시스템으로 데이터를 전달하는 과정을 말한다.컴퓨터끼리 데이터를 주고받을 수 있는 이유는,서로 연결된 통로(길)가 있기 때문이다. 이걸 바로 네트워크(Network) 라고 부른다.즉, 네트워크는 단

배열은 같은 자료형의 데이터를 메모리상에 연속적으로 저장하는 자료구조이다. 각 데이터는 인덱스를 통해 접근한다.💡이렇게 생긴 구조가 배열이다.서랍장에 각각 번호가 붙어 있고, 인덱스를 통해 원하는 서랍에서 물건(데이터)을 꺼내는 것과 유사하다.arr\[0] = 10,

“쌓는다” 라는 개념의 자료구조이다.위 그림처럼 상자를 1,2,3,4 차례로 넣고 뺄때 4,3,2,1 순으로 나오듯,가장 나중에 들어간 데이터가 가장 먼저 나온다.이를 LIFO 구조 (Last In, First Out)라 한다.열린 괄호 push닫힌 괄호 pop→ 스택

우선순위 큐란? 일반적인 큐는 먼저 들어온 순서대로 처리 (FIFO) 하지만, 우선순위 큐는 "우선순위가 높은 데이터"를 먼저 꺼내는 큐이다. > 그냥 줄 서는 게 아니라, "급한 사람 먼저 처리" 하는 느낌이다. > 예를 들어, 비상환자 → 일반환자 순서로 진료하

우선순위 큐는 "동작 방식"에 가까운 개념→ 우선순위 높은 것 먼저 꺼내자힙은 "이걸 구현하는 실제 자료구조"우선순위 큐를 효율적으로 만들기 위해 → "힙"이라는 자료구조를 이용하는 것이다.완전 이진트리의 일종으로 우전순위 큐를 위하여 만들어진 자료구조이다.부모와 자식

연결 리스트는 데이터를 "노드(node)"로 저장하고, 각 노드가 다음 노드의 주소를 가리키는 자료구조이다.💡 배열과 달리 연속된 공간에 저장하지 않고, 노드끼리 연결된다.연결리스트는 배열처럼 일렬로 붙어있지 않고, 마치 떨어진 그룹처럼 있다.각 칸은 다음 주소를 가

해시 테이블은 (key, value) 쌍으로 데이터를 저장하는 자료구조이다.key를 해시 함수로 변환해서→ 배열 인덱스에 직접 접근해서 값을 빠르게 찾는 구조!💡 "key로 빠르게 value를 찾는 사전(dictionary) 같은 구조"배열에서 인덱스로 값을 바로 불

복잡도란 ? 쉽게 말해서, 코드가 얼마나 빠르고 얼마나 많은 자원을 쓰는지 측정하는 척도이다. > * 자원 = 컴퓨터가 사용하는 “리소스” * 주로 시간과 메모리 두가지를 의미한다. 실행 시간이 얼마나 오래 걸리는지, 메모리를 얼마나 차지하는지에 대한 것 ! 복잡

버블 정렬은 이웃한 두 원소의 대소 관계를 비교하여 필요에 따라 교환을 반복하는 알고리즘으로, 단순 교환 정렬이라고도 한다.마치 물속에서 거품이 천천히 위로 떠오르듯이, 가장 큰 값이 한 단계씩 맨 뒤로 이동하는 모습에서 ‘버블(Bubble)’이라는 이름이 붙었다고 한

선택 정렬은 가장 작은(또는 가장 큰) 값을 선택하여 맨 앞부터 차례대로 위치를 확정하는 정렬 알고리즘이다. 배열 내에서 가장 작은 값을 찾아서 첫 번째 자리로 이동, 그 다음으로 작은 값을 찾아 두 번째 자리로 이동하는 식으로 동작한다.선택 정렬의 핵심 동작은 다음과

현실 세계는 관계의 연속이다. 사람과 사람, 도시와 도시, 웹페이지와 웹페이지 사이처럼 수많은 객체들이 복잡하게 연결되어 있다. 이런 관계를 표현하기에 가장 적합한 자료구조가 바로 "그래프(Graph)”이다.그래프는 정점(Vertex, Node)과 간선(Edge)의 집

앞에서 gcc를 설명할 때, 컴파일러와 링커의 역할에 대해 언급한 적이 있다.컴파일러는 .c 파일을 각각 .o라는 목적파일(object file)로 바꾼다.링커는 이렇게 만들어진 .o 파일들을 모아 하나의 실행파일로 연결해준다.그 이유는 바로 독립적인 컴파일이 가능해지

대부분 컴파일 시스템은 사용자를 대신해서 언어 전처리기, 컴파일러, 어셈블러, 링커를 필요에 따라 호출하는 컴파일러 드라이버를 제공한다. ? 이게 무슨 말이냐면 앞서 C 프로그램이 컴파일되는 4단계를 배운 적 있을 거다. (※ 안 봤다면... 다시 보고 오시길) 이

CPU는 컴퓨터의 모든 것을 직접적으로 가동하는 뇌이다. CPU는 명령어들을 실행하는데,명령어들이 늘 차례대로 존재하는 것은 아니다. 따라서, CPU 내에 있는 PC가 이 명령어들의 주소를 저장한다. 하지만 기본적으로 CPU는 명렁어를 "점진적인" 순서로 실행한다고 가

나의 말: 지난 이야기 ➡️ [CSAPP 8장 준비 | 예외적인 제어 흐름(ECF)이란? – 시스템 흐름이 깨지는 순간들] (https://velog.io/@yoominlee00/%E3%85%87) 지난 글에서 예외상황이 무엇인지, 이를 어떻게 처리하는지 살펴보았다

페이지를 이해했다면, 이제 세그먼트(Segment) 개념도 자연스럽게 받아들일 수 있다. >참고자료 🌼 CSAPP 9장 | 가상 주소 → 물리 주소 변환 [손필기] PPN, PTE, VPO | 가상주소 → 물리주소 변환 세그먼트(Segment)란 **프로그램

앞서, 힙(Heap) 에 대해서 알아보았다. >참고자료 🌸 CSAPP 9장 | 세그먼트와 힙: malloc이 메모리를 관리하는 방법 프로그램이 malloc()을 호출해서 힙에서 메모리를 할당받고, free() 를 호출해서 메모리를 다시 반납한다. 그렇다면 이번에는

컴퓨터는 어떻게 데이터를 주고받을까? 컴퓨터들이 네트워크로 통신할 때는 서로 데이터를 주고받는 것이 핵심이다. 단순한 요청 하나, "이 웹페이지 좀 보여줘" 같은 것도 사실은 데이터 요청/응답의 일종이다. 그런데 컴퓨터 세계에서는 늘 규칙이 존재한다. 네트워크 통신

11장에서 echo 서버를 구현하던 중에,이 부분에서 나처럼 “clientaddr은 값도 없는데 왜 실행되지?”하고 잠깐 멈칫한 분들이 분명 있을 거라고 생각한다.전체 코드를 보면,clientaddr는 선언만 해주고 값을 넣어준 적이 없다.일반적인 함수라면,정의되지 않

tiny 웹서버를 구현하다보면 등장하는 Mmap() .정적 컨텐츠를 제공해주는 serve_static() 함수 내부에 있다.처음엔 '메모리랑 뭔가 관련 있겠지?' 하고 넘겼는데,이 함수, 생각보다 꽤 똑똑하고 중요한 일을 하고 있었다.이 글에서는 mmap()이 도대체