728x90

분류 전체보기 173

[삽입 정렬] 카드를 정렬하듯, 데이터를 끼워 넣는 알고리즘

삽입 정렬(Insertion Sort) 삽입 정렬(Insertion Sort)은 필요한 위치에 데이터를 삽입한다는 개념으로 동작하는 정렬 알고리즘입니다. 마치 카드를 손에 들고 하나씩 정렬하며 끼워 넣는 과정과 유사합니다. 간단한 구현과 직관적인 개념 덕분에 학습용으로 자주 사용되며, 실제로도 데이터가 거의 정렬되어 있는 경우 매우 효율적입니다. 1. 삽입 정렬이란? 삽입 정렬은 배열의 각 요소를 앞쪽 정렬된 영역에 하나씩 적절한 위치에 삽입하며 전체를 정렬해 나가는 방식입니다. 앞부분은 이미 정렬되어 있다는 가정 하에, 다음 요소를 비교하며 맞는 자리를 찾아 삽입합니다.작동 원리두 번째 원소부터 시작해서 현재 원소를 앞쪽 정렬된 부분과 비교비교하면서 본인의 위치보다 큰 원소들은 한 칸씩 뒤로 이동빈 ..

[선택 정렬] 가장 작은 값을 골라 정렬하는 알고리즘

선택 정렬(Selection Sort) 선택 정렬(Selection Sort)은 정렬 알고리즘 중에서 개념적으로 가장 간단한 방식 중 하나로, 배열에서 가장 작은(또는 큰) 값을 반복적으로 찾아서 순서대로 앞쪽으로 옮기는 방식입니다. 구현이 매우 직관적이고 코드량도 적기 때문에 알고리즘 입문자에게 자주 소개되는 알고리즘입니다. 하지만 시간 복잡도가 O(n²)으로, 데이터 양이 많아질수록 성능이 크게 떨어져 실무에서는 거의 사용되지 않습니다. 1. 선택 정렬이란? 선택 정렬은 매 반복마다 가장 작은(또는 큰) 원소를 찾아서 현재 위치에 있는 원소와 교환하는 방식입니다.동작 방식 (오름차순 기준)리스트의 첫 번째부터 시작하여 가장 작은 값을 찾음현재 위치의 값과 가장 작은 값을 교환두 번째 위치부터 반복...

[버블 정렬] 하나씩 비교하며 정렬하는 알고리즘

버블 정렬(Bubble Sort) 버블 정렬(Bubble Sort)은 정렬 알고리즘 중 가장 단순한 방식으로, 인접한 두 값을 반복적으로 비교하고 필요에 따라 교환하여 정렬을 완성합니다. 이름처럼 큰 값이 점차 리스트 끝으로 ‘버블’처럼 떠오르는 모습에서 유래했습니다. 이 알고리즘은 이해와 구현이 매우 쉬워 알고리즘 학습의 입문 단계에서 자주 사용됩니다. 하지만 효율성 측면에서는 매우 낮기 때문에, 실무에서 사용되는 일은 거의 없습니다. 1. 버블 정렬이란? 버블 정렬은 인접한 두 요소를 비교하여 정렬 기준에 맞지 않으면 서로 교환하는 방식을 여러 번 반복하는 정렬 알고리즘입니다. 가장 큰 값이 반복문 한 번마다 맨 뒤로 이동하므로, 전체가 정렬될 때까지 과정을 반복합니다.작동 방식 (오름차순 기준)리..

[정렬] 꼭 알아야 할 8가지 정렬 알고리즘 비교 정리

정렬(Sorting) 정렬(Sorting)은 데이터를 일정한 순서(오름차순, 내림차순 등)로 재배치하는 알고리즘입니다. 정렬은 탐색, 최적화, 통계 처리 등 거의 모든 컴퓨터 과학 문제의 전처리 단계로 중요하게 사용됩니다. 정렬 알고리즘은 수행 방식, 안정성, 시간/공간 복잡도에 따라 다양하게 나뉘며, 내부 정렬(internal sorting)과 외부 정렬(external sorting)로도 분류할 수 있습니다. 대표적인 정렬 방식에는 버블 정렬, 선택 정렬, 삽입 정렬, 퀵 정렬, 병합 정렬, 힙 정렬 등이 있으며, 각 언어는 기본 라이브러리 또는 메서드를 통해 내부적으로 고도화된 정렬 알고리즘을 제공합니다. 1. 정렬 알고리즘이란?정렬의 목적데이터를 빠르게 검색하거나 탐색을 쉽게 하기 위해이진 탐색..

[Class] 객체지향 프로그래밍의 핵심

클래스(Class) C++는 절차적 프로그래밍과 객체지향 프로그래밍(OOP)을 모두 지원하는 다중 패러다임 언어입니다. 그중 클래스(class)는 객체지향 프로그래밍의 핵심 개념으로, 데이터와 관련된 동작을 하나로 묶어 코드의 재사용성과 유지보수성을 크게 향상시킵니다. 클래스를 사용하면 실제 세계의 사물이나 개념을 소프트웨어 안에 자연스럽게 모델링할 수 있으며, 캡슐화, 상속, 다형성과 같은 중요한 OOP 특성을 구현할 수 있습니다. 1. C++ 클래스란?클래스(class)는 데이터(멤버 변수)와 동작(멤버 함수)를 하나의 사용자 정의 자료형으로 묶은 것입니다. 클래스를 통해 객체(object)를 만들 수 있으며, 이 객체는 클래스에 정의된 구조를 따라 동작합니다.기본 문법class 클래스이름 {pub..

언어/C++ 2025.05.01

[MAC 주소] 네트워크 장비의 물리적 지문

MAC 주소(Media Access Control Address) 네트워크 통신은 다양한 장비들이 서로를 정확히 식별하고 연결하는 것에서 시작됩니다. 이때 각 장비를 구별하는 물리적 식별자가 바로 MAC 주소입니다. MAC 주소는 네트워크 카드마다 고유하게 부여되는 일종의 '장비 지문'으로, 데이터가 올바른 목적지에 도달하도록 돕습니다. 특히 같은 로컬 네트워크(LAN) 안에서 장치 간 통신을 가능하게 하는 핵심 역할을 맡고 있습니다. 1. MAC 주소란 무엇인가?MAC 주소(Media Access Control Address)는 네트워크 장비(네트워크 인터페이스 카드, NIC)에 부여된 고유한 식별자입니다.물리적 주소(Physical Address)라고도 부릅니다.제조 시 장치에 하드코딩되어 탑재됩..

[IP 주소] 인터넷 세상의 논리적 주소

IP 주소(Internet Protocol Address) 인터넷에서 수많은 장치들은 서로를 어떻게 찾을 수 있을까요?우리가 웹사이트를 방문하거나 서버에 요청을 보낼 때, 이 모든 통신은 IP 주소(Internet Protocol Address)를 기반으로 이루어집니다. IP 주소는 사람들의 집 주소처럼, 전 세계 네트워크 상에서 각 장비를 구별해주는 고유한 식별자입니다. 정확한 IP 주소가 없다면 데이터는 목적지에 도달할 수 없고, 인터넷 통신은 혼란에 빠지게 됩니다. 1. IP 주소란 무엇인가?IP 주소는 네트워크 상에서 각 장치를 구별하기 위해 부여하는 논리적 식별자입니다. 우편물에 적는 집 주소처럼, 데이터가 정확한 목적지에 도달할 수 있도록 해줍니다.논리적 주소 : 실제 하드웨어(MAC 주소)..

[ARP 스푸핑 공격] IP와 MAC을 위조해 트래픽을 탈취하다.

ARP 스푸핑 공격 ARP는 로컬 네트워크에서 IP 주소와 MAC 주소를 연결하는 데 사용되는 필수 프로토콜입니다. 하지만 신뢰 기반으로 설계된 이 프로토콜에는 본질적인 보안 취약점이 있습니다. 바로 이 점을 노리는 공격이 ARP 스푸핑(ARP Spoofing)입니다. 1. ARP 스푸핑이란?ARP 스푸핑(ARP Spoofing)은 공격자가 위조된 ARP 패킷을 네트워크에 보내 다른 장비의 ARP 캐시를 속이는 공격입니다. 쉽게 말해, "나(MAC 주소)는 저 IP야!"라고 거짓말을 하는 것입니다.이 공격은 로컬 네트워크에서 이루어지며, IP 주소와 MAC 주소의 신뢰 관계를 악용하여 트래픽을 가로채거나 조작할 수 있게 합니다.ARP 스푸핑의 위험성데이터 도청 (Sniffing) : 로그인 정보, 인증..

[GARP] 질문 없는 ARP, 나를 먼저 알리는 네트워크 자기소개서

GARP(Gratuitous ARP) 일반적인 ARP는 “이 IP를 가진 장비의 MAC 주소가 뭐지?”라는 질문을 던지고 그에 대한 응답을 받는 과정입니다. 그런데, 가끔은 질문 없이도 스스로 나서서 "이 IP는 내가 쓰고 있고, MAC 주소는 이거야!"라고 말해야 할 때가 있습니다. 이때 사용되는 것이 바로 GARP(Gratuitous ARP)입니다. 1. GARP란 무엇인가?GARP(Gratuitous ARP)는 질문 없이 스스로 브로드캐스트하는 ARP Request입니다. 일반적인 ARP는 목적지 IP를 타겟으로 삼지만, GARP는 자기 자신의 IP 주소를 대상으로 ARP Request를 보냅니다.즉, “이 IP 주소는 나다!”라고 네트워크 전체에 알려주는 방식입니다.의미 정리Gratuitous..

[ARP와 RARP] IP와 MAC 주소를 연결하는 숨은 조력자들

ARP와 RARP 네트워크 통신은 물 흐르듯 자연스럽게 일어나지만, 그 이면에는 여러 중요한 프로토콜이 조용히 제 역할을 다하고 있습니다. 그중에서도 ARP와 RARP는 네트워크 레벨에서 매우 기본적이면서도 중요한 역할을 맡고 있습니다.이 글에서는 ARP와 RARP의 개념, 동작 방식, 주요 차이점까지 쉽게 이해할 수 있도록 자세히 설명합니다. 1. ARP(Address Resolution Protocol)란? ARP(Address Resolution Protocol)는 IP 주소를 통해 MAC 주소를 알아내는 프로토콜입니다.즉, IP 주소 ➔ MAC 주소 매핑을 수행합니다.네트워크 상에서 데이터를 보내려면 상대방의 MAC 주소를 반드시 알아야 합니다.그런데 우리가 아는 것은 IP 주소뿐이죠. 이 때 ..

[요구사항 명세 기법] 프로젝트 성공을 좌우하는 명확한 요구사항 작성법

요구사항 명세 기법 소프트웨어 개발 프로젝트의 성공은 명확하고 구체적인 요구사항 명세에 달려 있다고 해도 과언이 아닙니다. 요구사항 명세는 개발자가 무엇을 만들어야 하는지, 사용자가 어떤 기능을 기대하는지를 공식 문서로 정리하는 과정입니다.이 글에서는 요구사항 명세 기법의 개념과 주요 방법들을 자세히 설명하고, 실제 적용에 도움이 될 수 있는 팁과 예제도 함께 소개합니다. 1. 요구사항 명세란?요구사항 명세(requirements specification)란 시스템이 수행해야 할 기능, 품질 요건, 제약 조건 등을 문서화한 것입니다. 이를 통해 개발자, 디자이너, 테스트 엔지니어, 그리고 고객 간의 기대치 차이를 줄이고, 프로젝트 진행 중 발생할 수 있는 리스크를 최소화합니다.요구사항 명세는 크게 두 ..

[Queue] 줄 서서 처리하는 선입선출(FIFO) 자료구조

큐(Queue) 프로그래밍에서 데이터를 순차적으로 저장하고 처리해야 하는 상황은 매우 흔합니다. 이때 유용하게 사용되는 자료구조가 바로 큐(Queue) 입니다. 큐는 먼저 들어간 데이터가 먼저 나오는(FIFO, First-In-First-Out) 특성을 가지며, 실제 생활 속 줄 서기와 매우 유사한 구조를 가지고 있습니다. 이러한 특성 덕분에 프로세스 관리, 작업 스케줄링, 너비 우선 탐색(BFS) 등 다양한 분야에서 큐는 필수적으로 활용됩니다. 1. 큐(Queue)의 개념 큐는 놀이공원의 줄 서기와 같습니다. 먼저 줄을 선 사람이 먼저 놀이기구를 타게 되죠!큐는 데이터를 먼저 들어온 순서대로 처리하는 선형 자료구조입니다. FIFO (First-In-First-Out) 구조로, 먼저 추가한 데이터가 먼..

[Stack] 쌓고 꺼내는 후입선출(LIFO) 자료구조

스택(Stack) 프로그래밍에서 자료를 효율적으로 관리하고 처리하기 위해 다양한 자료구조가 사용됩니다. 그 중에서도 스택(Stack)은 가장 기본적인 자료구조 중 하나입니다. 스택은 데이터를 "쌓았다가 꺼내는" 방식으로 동작하는데, 마지막에 넣은 데이터가 가장 먼저 나오는(LIFO, Last-In-First-Out) 특성을 가지고 있습니다. 이 간단한 원리는 다양한 알고리즘 문제, 특히 괄호 검사, 문자열 처리, 수식 계산, 깊이 우선 탐색(DFS) 등에서 매우 중요한 역할을 합니다. 1. 스택(Stack)의 개념 스택은 마치 접시를 쌓는 것과 같습니다. 마지막에 올린 접시를 먼저 꺼내야 안전하죠!스택은 한 쪽 끝에서만 데이터를 추가하거나 삭제할 수 있는 선형 자료구조입니다. 가장 나중에 들어간 데이터..

[LLM] 대규모 언어 모델이 세상을 바꾸는 방법

LLM(Large Language Model) LLM(Large Language Model) 은 대량의 텍스트 데이터를 학습해 인간처럼 자연스럽게 언어를 이해하고 생성할 수 있는 인공지능 모델입니다. "Large"라는 이름답게, 학습 데이터 규모와 모델 내부 파라미터 수가 엄청나게 크다는 특징이 있습니다.쉽게 말해, LLM은 인터넷 수많은 글을 학습해서 문맥을 이해하고, 대답하고, 글을 쓸 수 있는 텍스트 생성기입니다. ChatGPT, Claude, Gemini 같은 최신 AI 서비스들도 모두 LLM을 기반으로 동작합니다. 1. LLM 개념LLM은 입력된 문맥을 분석하여 가장 자연스러운 다음 단어를 예측하는 방식으로 동작합니다. 이 과정을 반복해 문장, 답변, 요약, 번역 같은 다양한 언어 작업을 수..

[OOP] 객체 지향 프로그래밍이란 무엇인가?

객체 지향 프로그래밍(OOP) 객체 지향 프로그래밍(Object-Oriented Programming, OOP) 은 소프트웨어를 '객체(Object)' 단위로 구성하여 개발하는 방법론입니다. 각 객체는 데이터를 포함하고 있으며, 데이터를 처리하는 함수(메서드)와 함께 캡슐화되어 있습니다.OOP의 핵심 아이디어는 "현실 세계를 소프트웨어에 모델링한다"는 것입니다. 즉, 사람, 자동차, 주문서처럼 우리가 인식할 수 있는 개체들을 프로그램 내 객체로 만들어, 서로 상호작용하도록 설계합니다. 1. 객체 지향의 개념객체 지향은 복잡한 문제를 작은 단위(객체)로 나누어 이해하고 해결하기 쉽게 만들어줍니다.클래스 : 객체를 만들기 위한 설계도입니다. 속성(변수)과 동작(메서드)을 정의합니다.객체 : 클래스를 기반..

728x90