네트워크 기초: TCP/IP 계층 모델
CS/네트워크
네트워크를 처음 공부하다 보면 계층이라는 개념이 나온다.계층 구조는 인터넷이 작동하는 핵심 원리로, 이 글에서는 네트워크의 기본 개념부터 TCP/IP 5계층 모델에 대해 다룬다. 왜 계층 구조가 필요할까?블랙박스 개념블랙박스는 기능은 알지만 작동 원리는 감춰진 시스템을 의미한다.예를 들어 `console.log()`를 사용할 때 내부에서 어떻게 화면에 출력되는지 우리는 전혀 알 필요가 없는 것처럼 말이다.특징입력이 없는 함수도 블랙박스이다 (입력이 없다는 것 자체가 입력)출력이 없는 함수도 블랙박스이다 (출력이 없다는 것 자체가 출력)블랙박스 안에는 또 다른 블랙박스들이 들어있을 수 있다.우리가 일상에서 사용하는 운영체제도 하나의 거대한 블랙박스로 볼 수있다.운영체제라는 블랙박스 안에 마우스 드라이버, ..
cat 명령어와 바이너리 파일: ASCII text vs data 파일의 차이
CS/운영체제
리눅스에서 파일을 읽기 위해 cat명령어를 사용하다 보면,어떤 파일은 정상적으로 읽히지만 어떤 파일은 터미널 화면이 깨지면서 이상한 문자들이 출력되는 경우가 있다.이런 현상은 구체적으로 왜 발생하는 걸까? 파일 타입 확인하기: file 명령어먼저 file 명령어를 통해 파일의 타입을 확인해보자.file 파일명위 이미지에서의 결과는 data로 나온다. 이 파일은 일반 텍스트 파일이 아닌 바이너리 파일이다.여러 파일 한 번에 확인하기디렉토리 내 모든 파일의 타입을 한 번에 확인하려면 와일드카드를 사용하면 된다.file ./*이미지 속 결과를 보면, 대부분은 data로 표시되지만 -file07만 ASCII text로 표시된다.이 ASCII text파일은 data으로 정상적으로 읽을 수 있다. cat이 바이너리..
공백이 포함된 파일명 여는 방법
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/..
SSH로 원격 서버에 접속하기
CS/운영체제
Bandit 워게임은 대부분 SSH 접속을 통해 원격 서버에 로그인한 뒤 문제를 해결하는 방식으로 진행된다.처음 접했을 때 접속이라는 표현이 좀 추상적으로 느껴졌는데, 핵심은 내 컴퓨터가 아닌 다른 컴퓨터를 조작하는 상태라는 것이다. SSH란?SSH(Secure Shell)는 네트워크를 통해 원격 서버에 안전하게 로그인하고 명령어를 실행할 수 있게 해주는 암호화 통신 프로토콜이다.즉, 내 터미널을 그대로 사용하지만 실제로는 서버의 CPU와 파일 시스템을 사용하게 된다. 접속의 의미SSH로 접속하면 다음 과정이 내부적으로 발생한다.호스트 주소가 IP로 변환된다 (DNS)해당 서버의 특정 포트(port)로 네트워크 연결을 시도한다SSH 프로토콜로 암호화된 통신이 시작된다사용자 인증(비밀번호 또는 키)을 수행..
이진 탐색 트리 (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)어떤 상황이 주어졌을 때 최적의 해를 찾는 문제이다."배열을 정렬하라""가장 짧은 ..
동적 프로그래밍 (Dynamic Programming)
CS/알고리즘
같은 계산을 반복하는 것은 비효율적이다. 예를 들어 피보나치 수열에서 fib(5)를 계산할 때, fib(3)을 여러 번 중복 계산한다.한 번 계산한 결과를 저장해두면 훨씬 빠를 것이다.이것이 바로 동적 프로그래밍(Dynamic Programming)의 핵심 개념이다. 동적 프로그래밍 (Dynamic Programming)동적 프로그래밍은 복잡한 문제를 작은 부분 문제로 나누어 해결하고, 그 결과를 저장하여 중복 계산을 방지하는 알고리즘 기법이다.동적 프로그래밍은 크게 두 가지 방식으로 구현할 수 있다. 메모이제이션타뷸레이션방식하향식 (Top-down)상향식 (Bottom-up)구현재귀 + 캐싱반복문 + 테이블계산필요한 값만 계산모든 값을 미리 계산메모리스택 + 캐시 공간테이블 공간만문제: 피보나치 수열피..