Hollywood Principle

Hollywood Principle Hollywood Principle 은 객체지향 설계 및 프레임워크 설계에서 널리 쓰이는 원칙으로, “Don’t call us, we’ll call you” 라는 문구로 대표된다. 이 원칙은 저수준 (구현) 모듈이 고수준 (프레임워크, 추상화) 모듈을 직접 호출하는 것이 아니라, 고수준 모듈이 저수준 모듈을 필요할 때 호출하도록 구조를 설계한다. 이를 통해 의존성 부패 (Dependency Rot) 를 방지하고, 시스템의 유연성, 확장성, 테스트 용이성을 높인다. 대표적으로 Inversion of Control, Dependency Injection, Observer, Template Method, Strategy 패턴 등에서 적용된다. ...

February 4, 2025 · 22 min · Me

Short Polling

Short Polling Short polling은 클라이언트와 서버 간의 실시간에 가까운 통신을 구현하기 위한 기본적인 기술이다. Short polling은 실시간 업데이트가 필요하지만 진정한 실시간성이 중요하지 않은 애플리케이션에서 구현이 간단하고 호환성이 좋은 솔루션이다. 그러나 사용자가 많아지거나 지연 시간이 중요한 애플리케이션에서는 Long Polling, SSE, WebSockets 같은 더 효율적인 기술의 사용을 고려해야 한다. Short Polling의 개념 Short polling은 클라이언트가 주기적으로 서버에 HTTP 요청을 보내 새로운 데이터가 있는지 확인하는 방식이다. 클라이언트는 정해진 시간 간격으로 서버에 요청을 보내고, 서버는 그 순간 가지고 있는, 클라이언트가 아직 받지 않은 데이터를 응답한다. ...

February 1, 2025 · 3 min · Me

Long Polling

Long Polling Long polling은 전통적인 short polling의 한계를 극복하기 위해 발전된 웹 통신 기법으로, 실시간에 가까운 데이터 전송을 가능하게 한다. 이 기술은 특히 웹소켓(WebSocket)이 등장하기 전에 실시간 웹 애플리케이션 구현에 널리 사용되었다. Long polling은 WebSockets의 대중화 이전에 실시간 웹 애플리케이션의 핵심 기술이었으며, 오늘날에도 특정 상황에서 유용한 접근 방식이다. 특히 WebSockets 지원이 제한된 환경이나, 단순한 실시간 요구사항을 가진 애플리케이션에서 여전히 가치 있는 솔루션이다. 최신 웹 애플리케이션에서는 WebSockets가 선호되는 경향이 있지만, Long polling은 폴백(fallback) 메커니즘으로 구현되어 WebSockets를 지원하지 않는 환경에서도 실시간에 가까운 경험을 제공할 수 있다. ...

February 1, 2025 · 6 min · Me

Divide and Conquer vs. Brute Force

Divide and Conquer vs. Brute Force 알고리즘은 프로그래밍의 핵심이며, 문제 해결 방식에 따라 효율성과 성능이 크게 달라진다. 두 알고리즘 모두 장단점이 있으며, 상황에 따라 적절한 선택이 필요하다. 먼저 브루트 포스로 문제를 해결한 다음, 필요에 따라 분할 정복과 같은 더 효율적인 알고리즘으로 발전시키는 것이 좋다. 알고리즘의 선택은 문제의 성격, 데이터의 크기, 요구되는 효율성, 그리고 개발자의 친숙도에 따라 달라질 수 있다. Divide and Conquer(분할 정복) 알고리즘 기본 개념 분할 정복은 복잡한 문제를 더 작고 관리하기 쉬운 하위 문제들로 나누어 해결하는 방법이다. 이 알고리즘은 세 가지 주요 단계로 구성된다: ...

January 24, 2025 · 4 min · Me

Divide and Conquer vs. Branch and Bound

Divide and Conquer vs. Branch and Bound “Divide and Conquer(분할 정복)“과 “Branch and Bound(분기 한정)“은 복잡한 문제를 해결하는 다른 접근법을 제공하며, 각각의 장단점과 적합한 활용 사례가 있다. “Divide and Conquer"와 “Branch and Bound"는 복잡한 문제를 해결하기 위한 두 가지 중요한 알고리즘 패러다임이다. 분할 정복은 문제를 작은 하위 문제로 나누어 해결하는 일반적인 방법인 반면, 분기 한정은 최적화 문제에서 효율적으로 최적해를 찾기 위한 전문화된 방법이다. 분할 정복은 정렬, 검색 등의 기본 알고리즘에 널리 사용되며, 분기 한정은 TSP, 배낭 문제 등의 복잡한 최적화 문제에 효과적이다. 두 알고리즘 모두 컴퓨터 과학에서 중요한 도구이므로, 문제의 특성에 따라 적절한 알고리즘을 선택하는 것이 중요하다. ...

January 24, 2025 · 9 min · Me

Typescript vs. Javascript

Typescript vs. Javascript JavaScript와 TypeScript는 둘 다 웹 및 기타 환경에서 널리 사용되는 프로그래밍 언어이지만, 설계와 사용 목적에 있어 몇 가지 중요한 차이가 있다. JavaScript는 인터프리터(또는 JIT 컴파일러)에 의해 실행되는 동적 타입의 스크립트 언어로, 유연성과 간편함을 제공하며 브라우저와 Node.js 등에서 기본 언어로 사용된다. TypeScript는 Microsoft에서 개발한 JavaScript의 상위 집합(superset)으로, 정적 타입 시스템과 클래스, 인터페이스, 제네릭 등 강력한 객체지향 프로그래밍(OOP) 기능을 추가하여 대규모 애플리케이션이나 엔터프라이즈 환경에서 코드의 안정성과 유지보수성을 높이는 데 목적이 있다. JavaScript JavaScript는 1995년 Brendan Eich에 의해 만들어진 웹 브라우저용 스크립트 언어이다. 원래는 웹 페이지에 상호작용을 추가하기 위해 설계되었지만, 현재는 브라우저 환경 외에도 서버 사이드(Node.js), 모바일 앱 개발(React Native), 데스크톱 애플리케이션(Electron) 등 다양한 환경에서 사용된다. ...

January 19, 2025 · 4 min · Me

무방향 그래프(Undirected Graph)

무방향 그래프(Undirected Graph) 무방향 그래프(Undirected Graph) 는 각 간선(Edge)에 방향성이 없는 그래프이다. 즉, 정점 A와 정점 B가 간선으로 연결되어 있으면, A에서 B로 가는 것과 B에서 A로 가는 것이 동일하다. 무방향 그래프 특징 간선이 양방향(↔)으로 연결됨 정점 간 이동에 방향성이 없음 정점의 차수(Degree)는 해당 정점과 연결된 간선의 개수 DFS(깊이 우선 탐색), BFS(너비 우선 탐색) 등의 알고리즘이 적용 가능 연결 그래프(Connected Graph)와 비연결 그래프(Disconnected Graph) 개념 적용 가능 무방향 그래프의 표현 방법 1 2 3 A — B | | C — D A - B (A와 B는 서로 연결됨) A - C (A와 C는 서로 연결됨) B - D (B와 D는 서로 연결됨) C - D (C와 D는 서로 연결됨) 무방향 그래프의 인접 행렬(Adjacency Matrix) 표현 A B C D A 0 1 1 0 B 1 0 0 1 C 1 0 0 1 D 0 1 1 0 설명 ...

January 18, 2025 · 4 min · Me

방향 그래프(Directed Graph)

방향 그래프(Directed Graph) 방향 그래프(Directed Graph, Digraph) 는 각 간선(Edge)에 방향성이 부여된 그래프이다. 즉, 간선이 단방향이므로 A → B 는 이동할 수 있지만 B → A 로는 이동할 수 없다. 방향 그래프는 일방향 관계가 있는 다양한 시스템을 모델링할 수 있다. 웹, 사회 연결망, 컴퓨터 시스템, 생물학적 네트워크 등 다양한 분야에서 방향 그래프를 활용한 알고리즘과 모델이 개발되고 있다. 방향 그래프 특징 간선이 한 방향(→)으로만 연결됨 단방향 관계를 표현할 때 사용 (예: 팔로우 관계, 웹 페이지 링크) 진입 차수(In-degree)와 진출 차수(Out-degree) 개념이 존재 진입 차수(In-degree): 해당 정점으로 들어오는 간선의 개수 진출 차수(Out-degree): 해당 정점에서 나가는 간선의 개수 방향 그래프의 표현 방법 방향 그래프 예시 ...

January 18, 2025 · 4 min · Me

Deterministic vs. Nondeterministic computation

Deterministic vs. Nondeterministic Computation 결정론적 계산과 비결정론적 계산은 계산 이론의 두 가지 근본적인 접근 방식을 나타낸다. 결정론적 계산은 현대 컴퓨터의 기반이 되는 예측 가능하고 명확한 모델을 제공하는 반면, 비결정론적 계산은 이론적으로 더 강력한 계산 모델의 가능성을 탐구한다. 이론적으로는 결정론적 튜링 기계와 비결정론적 튜링 기계가 동일한 문제들을 해결할 수 있지만, 효율성 측면에서는 큰 차이가 있을 수 있다. P = NP 문제는 이러한 효율성 차이가 본질적인 것인지, 아니면 단지 현재 알고리즘의 한계인지를 묻는 근본적인 질문이다. ...

December 27, 2024 · 10 min · Me

P vs NP problem

P vs. NP Problem P vs NP 문제는 컴퓨터 과학, 특히 계산 복잡도 이론에서 가장 중요한 미해결 문제 중 하나이다. 이 문제는 단순히 이론적인 호기심을 넘어, 암호학, 최적화, 인공지능 등 다양한 분야에 깊은 영향을 미치는 근본적인 질문이다. P vs NP 문제는 단순히 이론적인 호기심을 넘어 컴퓨터 과학의 근본적인 문제이며, 암호학, 최적화, 인공지능 등 다양한 분야에 깊은 영향을 미친다. 이 문제가 해결되면(어느 쪽으로든) 컴퓨터 과학에 혁명적인 변화를 가져올 것이다. P ≠ NP로 증명된다면, 이는 많은 중요한 문제들이 본질적으로 효율적인 알고리즘이 존재하지 않음을 의미하며, 따라서 근사 알고리즘, 휴리스틱, 특수 케이스 등의 중요성이 더욱 커질 것이다. ...

December 27, 2024 · 5 min · Me