네트워크 기초: TCP/IP 계층 모델
CS/네트워크
네트워크를 처음 공부하다 보면 계층이라는 개념이 나온다.계층 구조는 인터넷이 작동하는 핵심 원리로, 이 글에서는 네트워크의 기본 개념부터 TCP/IP 5계층 모델에 대해 다룬다. 왜 계층 구조가 필요할까?블랙박스 개념블랙박스는 기능은 알지만 작동 원리는 감춰진 시스템을 의미한다.예를 들어 `console.log()`를 사용할 때 내부에서 어떻게 화면에 출력되는지 우리는 전혀 알 필요가 없는 것처럼 말이다.특징입력이 없는 함수도 블랙박스이다 (입력이 없다는 것 자체가 입력)출력이 없는 함수도 블랙박스이다 (출력이 없다는 것 자체가 출력)블랙박스 안에는 또 다른 블랙박스들이 들어있을 수 있다.우리가 일상에서 사용하는 운영체제도 하나의 거대한 블랙박스로 볼 수있다.운영체제라는 블랙박스 안에 마우스 드라이버, ..
공백이 포함된 파일명 여는 방법
CS/운영체제
리눅스에서 파일명을 확인했는데 공백이 포함되어 있다면, 파일을 읽으려 할 때 예상과 다르게 동작하는 경우가 있다.이는 셸이 공백을 해석하는 방식 때문이다. 공백이 포함된 파일명이 인식되지 않는 이유리눅스 셸은 공백을 인자를 구분하는 기준으로 사용한다.예를 들어 다음 명령어를 실행하면cat --spaces in this filename--셸은 이를 하나의 파일명이 아니라 아래와 같이 여러 개의 인자로 분리한다.--spacesinthisfilename-- 공백이 포함된 파일명 여는 방법1. 백슬래시로 공백 이스케이프 하기cat --spaces\ in\ this\ filename--\는 바로 뒤 문자를 특수 의미가 아닌 일반 문자로 처리하도록 만든다.공백이 인자 구분자가 아니라 파일명의 일부가 된다.2. 따옴..
-로 시작하는 파일명 여는 방법
CS/운영체제
리눅스에서 파일을 열려고 하는데 다음과 같은 오류를 만날 때가 있다.정상적으로 파일을 읽을 것으로 예상했지만, 읽기는 커녕 아무런 반응도 일으키지 않고 있다. 왜 이런 일이 발생할까?리눅스 CLI에서는 관례적으로 - 또는 --으로 시작하는 값은 명령어의 옵션으로 처리된다.# 예시ls -lrm -rf따라서 -test.txt라는 파일이 있다고 할때,cat -test.txt는 -test.txt라는 파일이 아니라 존재하지 않는 옵션을 전달한 것으로 인식된다. 해결 방안1. -- 사용하기cat -- --- 이후에 오는 값은 옵션이 아닌 순수한 인자로 처리하라는 의미이다.2. 경로 명시하기cat ./-./이 붙는 순간 쉘은 이를 현재 디렉토리의 파일 경로로 인식한다.3. 절대경로 사용하기cat /home/user/..
이진 탐색 트리 (Binary Search Tree, BST)
CS/자료구조
이진 탐색 트리가 필요한 이유이진 탐색 알고리즘의 한계이진 탐색은 O(log n)의 빠른 탐색 성능을 제공하지만 치명적인 단점이 있다배열이 정렬되어 있어야 함배열은 데이터 삽입/삭제가 비효율적 (O(n))해시 테이블은 어떨까?해시 테이블도 좋은 대안이지만 나름의 단점이 있다장점단점삽입/삭제/검색 모두 빠름 (평균 O(1))성능이 해시 함수 품질에 의존 더 많은 메모리 필요 데이터가 정렬되지 않음이진 탐색 트리의 등장이진 탐색 트리는 이진 탐색의 빠른 탐색 성능과 효율적인 삽입/삭제를 동시에 제공한다. 18 / \ 15 31 / / \ 10 27 33 / \ / \ 6 12 24 35 / \ / \ ..
이진 탐색 (Binary Search)
CS/알고리즘
이진 탐색이란?정렬된 배열에서 특정 값을 찾을 때, 매번 탐색 범위를 반으로 줄여가며 효율적으로 찾는 알고리즘이다.배열: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]찾는 값: 71단계: 중간값 5와 비교 → 7 > 5, 오른쪽 범위로2단계: 중간값 8과 비교 → 7 선형 탐색이 O(n)인 반면, 이진 탐색은 O(log n)의 시간복잡도를 가진다. 동작 원리배열의 중간 값을 확인찾는 값과 중간 값을 비교같으면 → 탐색 성공크면 → 오른쪽 절반에서 탐색작으면 → 왼쪽 절반에서 탐색범위가 없어질 때까지 반복 장단점장점빠른 탐색 속도: O(log n)대용량 데이터에서도 효율적단점배열이 정렬되어 있어야 함삽입/삭제 후 재정렬 필요정렬되지 않은 데이터에는 사용 불가 구현재귀 방식function bina..
트리와 이진 트리
CS/자료구조
트리 (Tree)란?트리는 하나의 노드에서 시작해 나무가 가지를 뻗듯이 뻗어나가는 비선형 자료구조다.계층 구조를 표현하기에 적합하며, 파일 시스템, 조직도, DOM 구조 등에서 널리 사용된다. A ← 루트 노드 / \ B C ← A의 자식 노드 /|\ \ D E F G ← 터미널 노드(리프 노드)트리의 구성 요소용어설명노드(Node)데이터를 담는 가장 작은 단위간선(Edge)노드와 노드를 연결하는 선루트 노드(Root)트리의 최상위 노드. 부모가 없다부모 노드(Parent)간선으로 연결된 두 노드 중 상위 노드자식 노드(Child)간선으로 연결된 두 노드 중 하위 노드터미널 노드(Terminal)자식이 없는 노드..
P-NP
CS/알고리즘
컴퓨터 과학에서 어떤 문제가 쉬운지 어려운지, 더 나아가 해결 가능한지 불가능한지를 판단하는 척도가 있다. 바로 P-NP 문제이다. P-NPP-NP는 컴퓨터 과학에서 어떤 문제가 쉬운 문제인지 어려운 문제인지, 더 나아가 해결이 가능한지 불가능한지를 판단하는 척도가 되는 개념이다.결정 문제와 최적화 문제먼저, 문제의 유형을 이해해야 한다.결정 문제 (Decision Problemn)어떤 문제가 주어졌을 때 yes 또는 no로 대답할 수 있는 문제를 말한다."이 배열이 정렬되어 있는가?" → Yes/No"이 그래프에서 A에서 B로 가는 경로가 존재하는가?" → Yes/No 최적화 문제 (Optimization Problem)어떤 상황이 주어졌을 때 최적의 해를 찾는 문제이다."배열을 정렬하라""가장 짧은 ..
정렬 (Sort)
CS/알고리즘
책장에 있는 책들을 키 순서대로 정리한다고 생각해보자. 작은 책부터 큰 책 순서로 나열하는 방법은 여러 가지가 있다.어떤 방법은 간단하지만 느리고, 어떤 방법은 복잡하지만 빠르다. 이것이 바로 정렬 알고리즘이다.정렬 (Sort)정렬은 데이터를 특정 순서대로 배열하는 알고리즘이다.오름차순(작은 것부터 큰 것), 내림차순(큰 것부터 작은 것) 등 다양한 기준으로 정렬할 수 있다.정렬 알고리즘 비교 시간복잡도난이도특징버블 정렬 O(n²)쉬움인접한 원소를 교환선택 정렬 O(n²)쉬움최솟값을 찾아 교환삽입 정렬 O(n²)쉬움적절한 위치에 삽입병합 정렬 O(n log n)어려움분할 정복, 안정 정렬퀵 정렬 O(n log n) ~ O(n²)어려움분할 정복, 실정네서 빠름 버블 정렬 (Bubble Sort)인접한 두 ..
셋 (Set)
CS/자료구조
배열 [1, 2, 3, 2, 4, 1, 5]에서 중복을 제거하고 싶다고 생각해보자.일일이 확인하며 중복을 찾는 것보다, 중복을 자동으로 허용하지 않는 자료구조가 있다면 훨씬 편리할 것이다.이것이 바로 셋(Set)의 핵심 개념이다. SetSet은 데이터의 중복을 허용하지 않는 자료구조이다. 내부적으로는 일반적으로 해시 테이블을 기반으로 구현되며, 각 요소는 key만 존재하고 value가 없는 형태로 저장된다.이 때문에 **해시 셋(HashSet)**이라고도 부르며, 요소 자체가 key의 역할을 수행한다.Set vs Hash Table Hash TableSet저장 형태key-value 쌍key만 (value 없음)중복 허용key 중복 불가요소 중복 불가주 용도데이터 매핑중복 제거, 존재 여부 확인예시{ 1:..
해시 테이블 (Hash Table)
CS/자료구조
전화번호부에서 이름으로 전화번호를 찾는다고 생각해보자. 전화번호부가 정렬되지 않았다면 처음부터 끝까지 찾아야 하지만, 이름을 특정 규칙으로 변환해서 바로 위치를 찾을 수 있다면 훨씬 빠를 것이다. 이것이 바로 해시 테이블(Hash Table)의 핵심 개념이다. 해시 테이블해시 테이블은 해시 함수와 테이블(배열)이 합쳐진 자료구조이다.키(Key)를 해시 함수로 변환하여 인덱스를 얻고, 그 위치에 값(Value)을 저장한다. 이를 통해 데이터의 저장과 검색을 매우 빠르게 수행할 수 있다.해시 테이블의 핵심 개념 설명키 (Key)데이터를 식별하는 고유한 값 (예: 1, 21)값 (Value)실제로 저장할 데이터 (예: "이운재", "박지성")해시 함수키를 인덱스로 변환하는 함수 (예: key % 10)버킷 ..