티스토리

Dachae's DevLogs
검색하기

블로그 홈

Dachae's DevLogs

dachaes-devlogs.tistory.com/m

개발 관련 글을 정리합니다.

구독자
3
방명록 방문하기
공지 [정보처리기사] 정보처리기사 필기 요⋯ 모두보기
728x90
반응형

주요 글 목록

  • [계수 정렬] 숫자를 세는 방식의 정렬 알고리즘 계수 정렬(Counting Sort) 계수 정렬(Counting Sort)은 값을 직접 비교하지 않고, 등장 횟수를 세는 방식으로 정렬을 수행하는 비비교 정렬 알고리즘입니다. 정수나 정수로 표현 가능한 데이터를 정렬할 때 매우 빠르며, 특히 데이터 값의 범위가 작고, 중복이 많을수록 효율적입니다.정렬하고자 하는 값들의 개수를 카운트 배열에 저장한 뒤, 각 값을 정렬된 위치로 바로 배치하는 방식이기 때문에 최악의 경우에도 O(n + k)의 시간 복잡도를 가집니다. (k는 값의 최대 범위)단점은 데이터 값이 음수이거나, 범위가 너무 넓을 경우 메모리 낭비가 발생할 수 있다는 점입니다. 1. 계수 정렬이란? 계수 정렬은 다음의 방식으로 정렬합니다.입력 배열의 값들을 세어, 값마다 등장 횟수를 저장누적 합을 .. 공감수 0 댓글수 1 2025. 5. 8.
  • [기수 정렬] 숫자의 자릿수를 활용한 빠른 비비교 정렬 알고리즘 기수 정렬(Radix Sort) 기수 정렬(Radix Sort)은 데이터를 정렬할 때 숫자의 자릿수(또는 문자열의 위치)를 기준으로 정렬하는 비교하지 않는(non-comparison based) 정렬 알고리즘입니다. 버블 정렬이나 퀵 정렬처럼 값을 비교하지 않고, 숫자나 문자열의 각 자리를 기준으로 여러 번 분류하여 정렬합니다.정수나 고정 길이 문자열과 같이 구조가 명확한 데이터에서 매우 빠르게 동작할 수 있으며, 특히 비교 기반 정렬의 이론적 하한인 O(n log n)을 우회하여 O(nk)의 성능을 달성할 수 있습니다.단점으로는 비교 기반이 아니므로 모든 데이터에 적용할 수는 없으며, 자릿수를 기준으로 반복 작업이 필요하기 때문에 메모리 사용량도 상대적으로 높을 수 있습니다. 1. 기수 정렬이란? 기.. 공감수 0 댓글수 0 2025. 5. 8.
  • [스크럼] 자율과 협업 중심의 애자일 실천법 스크럼(Scrum) 스크럼(Scrum)은 애자일 개발 방법론 중 가장 널리 사용되는 프레임워크로, 복잡한 소프트웨어 개발 프로젝트를 작고 반복 가능한 작업 단위로 나누어 관리하는 방법입니다. 스크럼은 빠르게 변화하는 요구사항에 대응하면서도 팀의 자율성과 협업을 극대화하는 데 목적이 있습니다. 팀원 각자가 자율적으로 움직이며, 특정한 역할과 회의 체계를 통해 지속적인 개선과 피드백이 이루어집니다. 이 글에서는 스크럼의 핵심 개념, 역할 구조, 개발 프로세스를 포함하여 체계적으로 정리해보겠습니다. 개발 실무자뿐 아니라 취업 준비생, 자격증 수험생에게도 유익한 내용이 될 것입니다. 1. 스크럼(Scrum)의 개념스크럼은 ‘팀 중심의 애자일 프레임워크’로, 팀이 주기적으로 피드백을 받고 결과물을 개선해 나가는.. 공감수 0 댓글수 0 2025. 5. 8.
  • [SDLC] 소프트웨어 생명 주기 모델: 폭포수부터 애자일까지 소프트웨어 생명 주기 소프트웨어 개발은 단순히 코드를 작성하는 것을 넘어, 체계적인 계획과 절차를 따라야 안정적인 결과물을 만들어낼 수 있습니다. 이 과정을 체계화한 것이 바로 소프트웨어 생명 주기(SDLC, Software Development Life Cycle)입니다. SDLC는 소프트웨어를 개발, 운영, 유지보수하는 일련의 단계로 구성되며, 각 단계마다 적용할 수 있는 다양한 개발 모델이 존재합니다.이 글에서는 대표적인 생명 주기 모델인 폭포수 모델, 프로토타입 모델, 나선형 모델, 애자일 모델을 중심으로 개념과 특징을 상세히 설명하고, 어떤 상황에서 어떤 모델이 적합한지도 함께 알아보겠습니다. 소프트웨어 공학 기초를 다지는 데 큰 도움이 되는 내용이니, 개발자 지망생이나 관련 자격증 준비생에게도.. 공감수 0 댓글수 0 2025. 5. 7.
  • [힙 정렬] 힙 자료구조를 활용한 제자리 정렬 알고리즘 힙 정렬(Heap Sort) 힙 정렬(Heap Sort)은 완전 이진 트리 기반의 힙(Heap) 자료구조를 활용하는 정렬 알고리즘입니다. 정렬 과정에서 힙을 사용해 가장 큰 값(또는 가장 작은 값)을 빠르게 추출하고, 이를 반복하여 정렬을 완성합니다.힙 정렬은 시간 복잡도가 항상 O(n log n)으로 일정하며, 추가적인 메모리를 거의 사용하지 않는 제자리(in-place) 정렬입니다. 단점은 안정 정렬이 아니며, 구현이 다소 복잡하다는 점이지만, 일정한 성능과 메모리 효율이 요구되는 상황에서는 매우 유용한 선택이 될 수 있습니다. 1. 힙 정렬이란? 힙 정렬은 다음과 같은 두 단계를 반복합니다.최대 힙(Max Heap)을 구성하여 가장 큰 값을 루트로 보냅니다.가장 큰 값을 배열 뒤로 보내고, 남은 .. 공감수 1 댓글수 0 2025. 5. 7.
  • [렌더링 병목] 웹페이지가 느려지는 이유 렌더링 병목 웹페이지가 아무리 멋지게 만들어져 있어도, 스크롤이 끊기거나 애니메이션이 버벅거리는 등의 브라우저 성능 저하로 인해 사용자는 불편을 느낍니다. 이런 퍼포먼스 저하의 대부분은 렌더링 병목(Rendering Bottleneck)에서 발생합니다. 렌더링 병목이란 브라우저가 화면을 그리는 과정에서 특정 단계가 지나치게 오래 걸려 브라우저 전체 성능을 떨어뜨리는 현상을 말합니다. 이는 주로 불필요한 연산, 과도한 DOM 변경, 복잡한 스타일 계산, 비효율적인 스크립트 실행 등에서 비롯됩니다.이 글에서는 브라우저 렌더링 파이프라인의 각 단계별 병목 지점을 상세히 살펴보고, 어떤 작업이 병목을 유발하는지, 이를 줄이기 위한 실전적인 최적화 전략까지 다뤄보겠습니다. 1. 브라우저 렌더링 파이프라인 요약렌.. 공감수 0 댓글수 0 2025. 5. 7.
  • [CSS 애니메이션과 JavaScript 애니메이션] 웹 애니메이션 성능 비교 CSS 애니메이션과 JavaScript 애니메이션 애니메이션은 웹사이트나 웹앱에서 사용자 경험을 개선하는 도구입니다. 요소의 등장, 사라짐, 이동, 변형 등에 애니메이션을 주면 보다 직관적이고 세련된 UI를 만들 수 있죠. 하지만 "어떻게 애니메이션을 구현할 것인가?"라는 질문에는 CSS와 JavaScript 두 가지 주요 선택지가 있습니다.이 글에서는 CSS 애니메이션과 JavaScript 애니메이션의 차이점을 성능, 제어력, 사용성 측면에서 비교하고, 언제 어떤 방식을 선택하는 것이 좋은지를 명확히 설명합니다. 개발 중 애니메이션을 어떤 방식으로 구현할지 고민하는 분들께 실질적인 기준을 제공하는 것이 목표입니다. 1. CSS 애니메이션 - 선언형 애니메이션의 강자CSS 애니메이션은 @keyframe.. 공감수 1 댓글수 0 2025. 5. 7.
  • [Class와 Struct] 클래스와 구조체의 차이 클래스(Class)와 구조체(Struct)C++에서 Class와 Struct는 둘 다 사용자 정의 타입을 만들기 위한 도구입니다. 많은 초보자들이 C++에서 Class와 Struct를 혼용할 수 있다는 사실에 놀라지만, 실제로 이 둘은 문법적으로 거의 동일합니다. 하지만 몇 가지 중요한 차이가 존재하며, 이 차이점은 코드의 가독성, 유지보수성, 그리고 협업에 있어 중요한 영향을 줄 수 있습니다. 특히 C++에서는 구조체도 멤버 함수, 상속, 접근 제어자 등을 사용할 수 있기 때문에 단순히 "데이터 집합"으로만 구조체를 생각하는 것은 C 언어의 관점에 국한된 것입니다. 1. 클래스와 구조체의 공통점C++에서 Class와 Struct는 매우 비슷하게 동작합니다. 다음과 같은 기능들을 공통적으로 사용할 수 .. 공감수 0 댓글수 0 2025. 5. 6.
  • [In-Transit 암호화] 전송 중인 데이터 보호하기 데이터베이스 암호화 : In-Transit 방식 기업 환경에서 데이터는 단순히 저장되어 있을 뿐만 아니라, 지속적으로 이동(전송)하며 사용됩니다. 특히 클라이언트와 데이터베이스 서버 간, 혹은 마이크로서비스 간 통신에서는 네트워크를 통한 데이터 노출 위험이 존재합니다. 이때 필요한 보안 기술이 바로 In-Transit 암호화, 즉 전송 중 데이터 암호화입니다.이 글에서는 데이터베이스 통신 구간을 보호하기 위한 대표적인 In-Transit 암호화 방식인 TLS/SSL, VPN, SSH 터널링을 소개하고, 각 방식의 개념과 적용 예시, 장단점을 비교합니다. 성능과 보안의 균형을 어떻게 잡을지 고민하는 개발자와 인프라 엔지니어에게 실용적인 가이드가 될 수 있습니다. 1. 데이터베이스 암호화란?데이터베이스 암.. 공감수 1 댓글수 1 2025. 5. 6.
  • [At-Rest 암호화] 저장된 데이터 보호하기 데이터베이스 암호화 : At-Rest 방식기업이 보유한 데이터가 점점 더 민감하고 중요해지면서, 데이터베이스 수준에서의 암호화는 선택이 아닌 필수가 되었습니다. 특히 개인정보보호법, GDPR, HIPAA 등 다양한 규제에 대응하려면 저장된 데이터를 안전하게 보호할 수 있는 기술적 조치가 요구됩니다. 데이터베이스 암호화는 단순히 암호 알고리즘을 적용하는 것 이상의 고려가 필요합니다. 성능, 운영, 키 관리, 복구 시나리오 등 다양한 요소가 영향을 미치기 때문입니다.이 글에서는 Transparent Data Encryption(TDE), API 기반 애플리케이션 암호화, 플러그인 기반 암호화, 하이브리드 암호화 방식 등 주요 기법을 비교하고, 어떤 상황에서 어떤 방식을 선택해야 하는지 구체적으로 설명합니다... 공감수 1 댓글수 0 2025. 5. 6.
  • [View] UI를 다루는 구성 요소 뷰(View) 웹이나 앱 개발에서 가장 눈에 띄는 부분은 사용자와 직접 상호작용하는 화면입니다. 이 화면을 구성하는 핵심 요소가 바로 뷰(View)입니다. ‘뷰’라는 용어는 단순히 HTML, XML과 같은 시각적인 결과물만을 의미하지 않고, 데이터와 로직으로부터 분리된 사용자 인터페이스 표현 계층을 의미합니다.특히 MVC(Model-View-Controller) 패턴에서는 ‘뷰’가 담당하는 책임이 명확히 분리되어 있으며, 이 개념은 React, Angular, Vue.js 같은 최신 프레임워크에서도 여전히 중심적인 역할을 합니다.1. View란 무엇인가?View(뷰)는 소프트웨어 아키텍처에서 사용자에게 보여지는 데이터의 시각적 표현을 담당합니다. 즉, 모델의 데이터를 화면에 보여주는 역할만을 담당하며,.. 공감수 0 댓글수 0 2025. 5. 6.
  • [GOF 디자인 패턴] 좋은 소프트웨어 설계는 이렇게 시작된다. GOF 디자인 패턴(Gang of Four Design Pattern) 객체지향 설계에서 “좋은 코드”란 무엇일까요? 유지보수가 쉽고, 확장성이 뛰어나며, 중복이 적고, 결합도가 낮은 코드가 좋은 코드라고 할 수 있습니다. 이를 달성하기 위한 실질적인 지침으로 GOF 디자인 패턴이 널리 사용됩니다.GOF(Gang of Four)는 디자인 패턴 개념을 정리하고 체계화한 4명의 저자를 지칭하며, 이들이 1994년에 발표한 『Design Patterns: Elements of Reusable Object-Oriented Software』는 객체지향 프로그래밍의 고전이 되었습니다. 이 책에서 소개한 23가지 디자인 패턴은 크게 생성(Creational), 구조(Structural), 행동(Behavioral) .. 공감수 2 댓글수 0 2025. 5. 6.
  • [미들웨어] 시스템의 중간 관리자 미들웨어(Middleware) 현대 소프트웨어 시스템은 단순한 하나의 애플리케이션으로 구성되지 않고, 다양한 구성 요소들이 함께 작동하는 복잡한 구조를 갖습니다. 웹 서버, 데이터베이스, 클라이언트 애플리케이션 등 여러 컴포넌트들이 원활하게 통신하고 협업하기 위해서는 이들을 연결해주는 접착제 역할이 필요합니다. 이 역할을 수행하는 것이 바로 미들웨어(Middleware)입니다. 미들웨어는 응용 프로그램과 운영체제 또는 데이터베이스, 네트워크 간의 중간 계층에서 동작하며, 다양한 시스템 간의 통신을 원활하게 지원합니다. 1. 미들웨어란?미들웨어(Middleware)는 "소프트웨어 컴포넌트 간의 중재자 역할을 하는 소프트웨어"로 정의할 수 있습니다. 쉽게 말해, 서로 다른 시스템이나 애플리케이션이 효율적.. 공감수 0 댓글수 0 2025. 5. 6.
  • [Class의 상속] 재사용성과 확장성을 높이는 객체지향의 핵심 Class의 상속 C++은 객체지향 언어로서 클래스와 상속 개념을 기반으로 코드의 재사용성, 확장성, 유지보수성을 높일 수 있는 기능을 제공합니다. C++에서 상속을 사용하면, 기존 클래스의 멤버(변수 및 함수)를 자식 클래스가 그대로 물려받아 사용할 수 있으며, 필요 시 오버라이딩(overriding)을 통해 일부 기능을 수정하거나 확장할 수 있습니다.이 글에서는 C++에서 클래스 상속이 어떻게 사용되는지에 대한 전반적인 내용을 다룹니다. 기본 문법은 물론, 접근 제어자(public, protected, private), 가상 함수(virtual function), 다형성(polymorphism), 다중 상속(multiple inheritance)까지 C++에서 자주 쓰이는 상속 개념을 자세히 살펴보겠.. 공감수 1 댓글수 0 2025. 5. 5.
  • [병합 정렬] 나누고 정렬하고 다시 합치는 정렬 알고리즘 병합 정렬(Merge Sort) 병합 정렬(Merge Sort)은 분할 정복(Divide and Conquer) 전략을 사용하는 대표적인 정렬 알고리즘입니다. 데이터를 더 이상 나눌 수 없을 만큼 작게 쪼갠 뒤, 나눈 조각들을 정렬하면서 다시 하나로 합치는 방식으로 동작합니다.퀵 정렬과 마찬가지로 평균 시간 복잡도는 O(n log n)이지만, 병합 정렬은 최악의 경우에도 O(n log n)을 보장하며, 안정 정렬이라는 장점도 가집니다. 다만, 추가 메모리 공간이 필요하다는 단점이 있어 메모리 제약이 있는 환경에서는 고려가 필요합니다.이 글에서는 병합 정렬의 개념, 작동 방식, 다양한 언어로의 구현, 성능 분석을 포함해 병합 정렬이 어떤 상황에서 유용한지 살펴봅니다. 1. 병합 정렬이란? 병합 정렬은 데.. 공감수 1 댓글수 0 2025. 5. 5.
  • [이벤트 객체] 클릭 이벤트의 진짜 주인공은 누구인가? event.target과 event.currentTarget 이 글에서는 자바스크립트 이벤트 객체에서 자주 혼동되는 event.target과 event.currentTarget의 차이를 명확히 설명합니다. 이 두 속성은 모두 DOM 이벤트 핸들러 내부에서 사용되며, 비슷해 보이지만 서로 다른 의미를 갖고 있습니다. 특히 버블링(bubbling)과 캡처링(capturing) 같은 이벤트 전파 단계에서 두 속성이 어떻게 다르게 동작하는지를 이해하는 것은 복잡한 UI 컴포넌트를 다룰 때 큰 도움이 됩니다. 1. event.target과 event.currentTarget이란?a. event.target이벤트가 실제로 발생한 DOM 요소를 가리킵니다.유저가 실제로 클릭하거나 포커스를 둔 요소입니다.이벤트 위.. 공감수 1 댓글수 0 2025. 5. 4.
  • [DRM] 디지털 콘텐츠의 보안을 책임지는 기술 DRM(Digital Rights Management, 디지털 권리 관리) 디지털 콘텐츠가 범람하는 시대, 그 콘텐츠의 ‘소유권’과 ‘사용 권한’을 어떻게 보호할 것인가는 매우 중요한 문제입니다. 음악, 영화, 전자책, 소프트웨어 등 수많은 디지털 자산이 복사, 배포, 해킹에 노출되면서, 이를 보호하기 위한 기술이 필요해졌습니다. 그 중심에 있는 것이 바로 DRM(Digital Rights Management, 디지털 권리 관리)입니다. DRM은 디지털 콘텐츠의 불법 복제 및 무단 사용을 막기 위해 고안된 기술로, 콘텐츠에 사용 권한을 설정하고 제어하는 역할을 합니다. 1. DRM이란?DRM(Digital Rights Management)은 디지털 콘텐츠의 저작권을 보호하고, 콘텐츠 이용자의 접근 권한.. 공감수 3 댓글수 1 2025. 5. 4.
  • [숫자 코드] 숫자에 의미를 부여하는 설계 전략 숫자 코드 데이터를 다루는 거의 모든 시스템에는 숫자 코드(유효 숫자 코드)가 존재합니다. 사용자 상태, 주문 단계, 권한 등 다양한 정보를 0, 1, 2처럼 숫자로 표현하는 방식이죠. 이러한 숫자는 겉보기에 단순해 보이지만, 실제로는 시스템의 상태와 흐름을 효율적으로 제어하는 열쇠가 됩니다. 1. 숫자 코드란?숫자 코드(Numeric Code)는 시스템 내에서 특정 상태, 역할, 분류 등을 숫자로 표현한 값입니다. 일반적으로 데이터베이스나 API 응답, enum 타입, 테이블 등에서 사용되며, 다음과 같은 장점이 있습니다:데이터 저장 공간 절약문자열 비교보다 빠른 성능시스템 간 통신의 표준화유지보수 시 코드 일관성 유지 2. 숫자 코드가 쓰이는 예시사용자 권한 예시 권한 코드 권한 이름 0일반 사용.. 공감수 1 댓글수 0 2025. 5. 4.
  • [UML] 복잡한 시스템을 시각화하는 언어 UML(Unified Modeling Language) 소프트웨어 시스템이 점점 복잡해질수록, 그것을 체계적으로 설계하고 소통하기 위한 도구의 중요성도 커집니다. UML(Unified Modeling Language)은 이런 복잡한 시스템을 시각적으로 표현해주는 표준화된 모델링 언어입니다. UML은 객체지향 설계 기반의 시스템에서 구조, 행위, 관계를 그림처럼 표현할 수 있어 개발자, 설계자, 비즈니스 분석가 간의 의사소통을 원활하게 만들어줍니다. 클래스 다이어그램, 시퀀스 다이어그램, 유스케이스 다이어그램 등 다양한 다이어그램으로 구성되어 있어 다양한 측면에서 시스템을 분석하고 설계할 수 있습니다. 1. UML이란?UML은 Unified Modeling Language의 약자로, 소프트웨어 시스템의 .. 공감수 0 댓글수 0 2025. 5. 3.
  • [퀵 정렬] 피벗으로 나누고 빠르게 정복하는 정렬 알고리즘 퀵 정렬(Quick Sort) 퀵 정렬(Quick Sort)은 평균적으로 가장 빠르게 동작하는 정렬 알고리즘으로 알려져 있으며, 분할 정복(Divide and Conquer) 전략을 기반으로 합니다. 리스트에서 기준 값(피벗, pivot)을 정한 후, 피벗보다 작은 값과 큰 값을 나누어 각각을 재귀적으로 정렬하는 방식입니다.이 알고리즘은 in-place 정렬이 가능하고, 평균 시간 복잡도가 O(n log n)으로 매우 우수하기 때문에 실무에서도 널리 사용되며, 다양한 언어의 표준 라이브러리에도 활용됩니다. 다만, 피벗 선택이 좋지 않으면 최악의 경우 O(n²)까지 성능이 떨어질 수 있어 그에 대한 보완 전략도 함께 알아둘 필요가 있습니다. 1. 퀵 정렬이란? 퀵 정렬은 기준이 되는 값을 하나 정한 뒤,.. 공감수 1 댓글수 0 2025. 5. 2.
  • [Cascading] CSS에서 스타일 우선순위를 결정하는 규칙 Cascading “Cascading”이란 단어는 영어로 "폭포처럼 흐른다"는 뜻을 가지고 있으며, CSS(Cascading Style Sheets)에서 스타일이 적용되는 우선순위와 충돌 해결 방식을 설명할 때 사용됩니다. 웹 페이지의 요소는 여러 소스에서 스타일을 받을 수 있고, 이때 어떤 스타일이 실제로 적용될지를 결정하는 기준이 필요합니다. 이것이 바로 Cascading(계단식 적용) 규칙입니다. 이 규칙은 CSS의 핵심 동작 원리 중 하나이며, 스타일 충돌 상황을 자연스럽게 해결하고, 개발자가 유연하게 스타일을 제어할 수 있도록 돕습니다. 1. Cascading이란?Cascading은 CSS에서 동일한 요소에 여러 스타일 규칙이 적용될 때, 어떤 규칙이 최종적으로 적용되는지를 결정하는 규칙 체계.. 공감수 0 댓글수 0 2025. 5. 2.
  • [삽입 정렬] 카드를 정렬하듯, 데이터를 끼워 넣는 알고리즘 삽입 정렬(Insertion Sort) 삽입 정렬(Insertion Sort)은 필요한 위치에 데이터를 삽입한다는 개념으로 동작하는 정렬 알고리즘입니다. 마치 카드를 손에 들고 하나씩 정렬하며 끼워 넣는 과정과 유사합니다. 간단한 구현과 직관적인 개념 덕분에 학습용으로 자주 사용되며, 실제로도 데이터가 거의 정렬되어 있는 경우 매우 효율적입니다. 1. 삽입 정렬이란? 삽입 정렬은 배열의 각 요소를 앞쪽 정렬된 영역에 하나씩 적절한 위치에 삽입하며 전체를 정렬해 나가는 방식입니다. 앞부분은 이미 정렬되어 있다는 가정 하에, 다음 요소를 비교하며 맞는 자리를 찾아 삽입합니다.작동 원리두 번째 원소부터 시작해서 현재 원소를 앞쪽 정렬된 부분과 비교비교하면서 본인의 위치보다 큰 원소들은 한 칸씩 뒤로 이동빈 .. 공감수 1 댓글수 0 2025. 5. 2.
  • [선택 정렬] 가장 작은 값을 골라 정렬하는 알고리즘 선택 정렬(Selection Sort) 선택 정렬(Selection Sort)은 정렬 알고리즘 중에서 개념적으로 가장 간단한 방식 중 하나로, 배열에서 가장 작은(또는 큰) 값을 반복적으로 찾아서 순서대로 앞쪽으로 옮기는 방식입니다. 구현이 매우 직관적이고 코드량도 적기 때문에 알고리즘 입문자에게 자주 소개되는 알고리즘입니다. 하지만 시간 복잡도가 O(n²)으로, 데이터 양이 많아질수록 성능이 크게 떨어져 실무에서는 거의 사용되지 않습니다. 1. 선택 정렬이란? 선택 정렬은 매 반복마다 가장 작은(또는 큰) 원소를 찾아서 현재 위치에 있는 원소와 교환하는 방식입니다.동작 방식 (오름차순 기준)리스트의 첫 번째부터 시작하여 가장 작은 값을 찾음현재 위치의 값과 가장 작은 값을 교환두 번째 위치부터 반복... 공감수 0 댓글수 0 2025. 5. 2.
  • [버블 정렬] 하나씩 비교하며 정렬하는 알고리즘 버블 정렬(Bubble Sort) 버블 정렬(Bubble Sort)은 정렬 알고리즘 중 가장 단순한 방식으로, 인접한 두 값을 반복적으로 비교하고 필요에 따라 교환하여 정렬을 완성합니다. 이름처럼 큰 값이 점차 리스트 끝으로 ‘버블’처럼 떠오르는 모습에서 유래했습니다. 이 알고리즘은 이해와 구현이 매우 쉬워 알고리즘 학습의 입문 단계에서 자주 사용됩니다. 하지만 효율성 측면에서는 매우 낮기 때문에, 실무에서 사용되는 일은 거의 없습니다. 1. 버블 정렬이란? 버블 정렬은 인접한 두 요소를 비교하여 정렬 기준에 맞지 않으면 서로 교환하는 방식을 여러 번 반복하는 정렬 알고리즘입니다. 가장 큰 값이 반복문 한 번마다 맨 뒤로 이동하므로, 전체가 정렬될 때까지 과정을 반복합니다.작동 방식 (오름차순 기준)리.. 공감수 0 댓글수 0 2025. 5. 2.
  • [정렬] 꼭 알아야 할 8가지 정렬 알고리즘 비교 정리 정렬(Sorting) 정렬(Sorting)은 데이터를 일정한 순서(오름차순, 내림차순 등)로 재배치하는 알고리즘입니다. 정렬은 탐색, 최적화, 통계 처리 등 거의 모든 컴퓨터 과학 문제의 전처리 단계로 중요하게 사용됩니다. 정렬 알고리즘은 수행 방식, 안정성, 시간/공간 복잡도에 따라 다양하게 나뉘며, 내부 정렬(internal sorting)과 외부 정렬(external sorting)로도 분류할 수 있습니다. 대표적인 정렬 방식에는 버블 정렬, 선택 정렬, 삽입 정렬, 퀵 정렬, 병합 정렬, 힙 정렬 등이 있으며, 각 언어는 기본 라이브러리 또는 메서드를 통해 내부적으로 고도화된 정렬 알고리즘을 제공합니다. 1. 정렬 알고리즘이란?정렬의 목적데이터를 빠르게 검색하거나 탐색을 쉽게 하기 위해이진 탐색.. 공감수 0 댓글수 0 2025. 5. 2.
  • [Class] 객체지향 프로그래밍의 핵심 클래스(Class) C++는 절차적 프로그래밍과 객체지향 프로그래밍(OOP)을 모두 지원하는 다중 패러다임 언어입니다. 그중 클래스(class)는 객체지향 프로그래밍의 핵심 개념으로, 데이터와 관련된 동작을 하나로 묶어 코드의 재사용성과 유지보수성을 크게 향상시킵니다. 클래스를 사용하면 실제 세계의 사물이나 개념을 소프트웨어 안에 자연스럽게 모델링할 수 있으며, 캡슐화, 상속, 다형성과 같은 중요한 OOP 특성을 구현할 수 있습니다. 1. C++ 클래스란?클래스(class)는 데이터(멤버 변수)와 동작(멤버 함수)를 하나의 사용자 정의 자료형으로 묶은 것입니다. 클래스를 통해 객체(object)를 만들 수 있으며, 이 객체는 클래스에 정의된 구조를 따라 동작합니다.기본 문법class 클래스이름 {pub.. 공감수 0 댓글수 0 2025. 5. 1.
  • [MAC 주소] 네트워크 장비의 물리적 지문 MAC 주소(Media Access Control Address) 네트워크 통신은 다양한 장비들이 서로를 정확히 식별하고 연결하는 것에서 시작됩니다. 이때 각 장비를 구별하는 물리적 식별자가 바로 MAC 주소입니다. MAC 주소는 네트워크 카드마다 고유하게 부여되는 일종의 '장비 지문'으로, 데이터가 올바른 목적지에 도달하도록 돕습니다. 특히 같은 로컬 네트워크(LAN) 안에서 장치 간 통신을 가능하게 하는 핵심 역할을 맡고 있습니다. 1. MAC 주소란 무엇인가?MAC 주소(Media Access Control Address)는 네트워크 장비(네트워크 인터페이스 카드, NIC)에 부여된 고유한 식별자입니다.물리적 주소(Physical Address)라고도 부릅니다.제조 시 장치에 하드코딩되어 탑재됩.. 공감수 0 댓글수 0 2025. 4. 29.
  • [IP 주소] 인터넷 세상의 논리적 주소 IP 주소(Internet Protocol Address) 인터넷에서 수많은 장치들은 서로를 어떻게 찾을 수 있을까요?우리가 웹사이트를 방문하거나 서버에 요청을 보낼 때, 이 모든 통신은 IP 주소(Internet Protocol Address)를 기반으로 이루어집니다. IP 주소는 사람들의 집 주소처럼, 전 세계 네트워크 상에서 각 장비를 구별해주는 고유한 식별자입니다. 정확한 IP 주소가 없다면 데이터는 목적지에 도달할 수 없고, 인터넷 통신은 혼란에 빠지게 됩니다. 1. IP 주소란 무엇인가?IP 주소는 네트워크 상에서 각 장치를 구별하기 위해 부여하는 논리적 식별자입니다. 우편물에 적는 집 주소처럼, 데이터가 정확한 목적지에 도달할 수 있도록 해줍니다.논리적 주소 : 실제 하드웨어(MAC 주소).. 공감수 0 댓글수 0 2025. 4. 29.
  • [ARP 스푸핑 공격] IP와 MAC을 위조해 트래픽을 탈취하다. ARP 스푸핑 공격 ARP는 로컬 네트워크에서 IP 주소와 MAC 주소를 연결하는 데 사용되는 필수 프로토콜입니다. 하지만 신뢰 기반으로 설계된 이 프로토콜에는 본질적인 보안 취약점이 있습니다. 바로 이 점을 노리는 공격이 ARP 스푸핑(ARP Spoofing)입니다. 1. ARP 스푸핑이란?ARP 스푸핑(ARP Spoofing)은 공격자가 위조된 ARP 패킷을 네트워크에 보내 다른 장비의 ARP 캐시를 속이는 공격입니다. 쉽게 말해, "나(MAC 주소)는 저 IP야!"라고 거짓말을 하는 것입니다.이 공격은 로컬 네트워크에서 이루어지며, IP 주소와 MAC 주소의 신뢰 관계를 악용하여 트래픽을 가로채거나 조작할 수 있게 합니다.ARP 스푸핑의 위험성데이터 도청 (Sniffing) : 로그인 정보, 인증.. 공감수 0 댓글수 0 2025. 4. 29.
  • [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.. 공감수 0 댓글수 0 2025. 4. 29.
    728x90
    반응형
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.