CS

    휴리스틱 알고리즘 (Heuristic Algorithm)

    우리가 문제 해결 시 흔히 사용하는 동적 계획법(DP) 또는 분할 정복과 같은 완전 탐색에 기초한 디자인 패러다임은 사실 실생활에서 쓰기엔 매우 한정적이다. 예를 들어, 인공지능 체스 프로그램을 알고리즘으로 짠다고 할 때 우리가 가장 먼저 떠올릴 수 있는 것은브루트 포스(brute force) 방식이다. 즉, 가능한 모든 말의 움직임을 다 해보는 것이다. 하지만 이 방식은 어림도 없는게 움직일 수 있는 말과 이동 가능한 칸이 너무 많기 때문에 만약 이 방식으로 프로그램을 개발했다고 하면, 죽을 때까지 게임이 끝나지 않을 것이다. (경우의 수가 10^120 가지라고 한다.)그렇다고 해서 분할 정복 기법을 사용하자니 적절한 분할 방법이 생각나질 않고 동적 계획법을 사용하자니 메모리가 턱없이 모자르다. 결국 ..

    SDN (Software Defined Network) 이란?

    SDN이란?SDN(Software Defined Network)이란 소프트웨어를 통해 네트워크 리소스를 가상화하고 추상화하는 네트워크 인프라에 대한 접근 방식을 의미한다. 조금 더 쉽게 설명하자면, 소프트웨어 애플리케이션과 API를 이용하여 네트워크를 프로그래밍하고, 중앙에서 전체 네트워크를 제어하고 관리하는 것이다.작동 방식SDN에서 가장 핵심은 네트워크 장비의 Control Plane(제어부)와 Data Plane(전송부)의 분리이다.Control Plane은 네트워크 장비를 제어하는 뇌에 해당하고, Data Plane은 데이터를 전송하는 역할을 하는 것이다. 기존의 라우터(Router)라는 네트워크 장비에는 제어부와 전송부가 같이 존재한다. 제어부에서 최적의 경로를 계산하고 전송부가 데이터를 전송하..

    알고리즘과 휴리스틱의 차이

    테스트 케이스의 효율성소프트웨어의 높은 품질을 위해 테스트를 진행할 때, 테스트 케이스를 작성하여 이에 따라 테스트를 실행하고, 실패율로 품질을 측정하는 방식을 선택하는 회사들이 많다. 하지만 현재까지 제품의 모든 경우의 수가 고려되고 전부 테스트 케이스로 옮겨지는 것은 사실상 현실적으로 불가능하며, 이러한 부분은 따라서 수치로 계산되지 못한다. 그렇다면, 이러한 테스트 결과 수치가 소프트웨어의 품질을 증명한다고 할 수 있을까?   테스트 케이스는 시간이 지나며 제품의 기능이 발전하고 늘어날 수록, 같이 늘어난다. 그만큼 테스트 수행 시간도 늘어나기 때문에, 결국 부분적 회귀 테스트를 테스트 전략을 많이 선택한다. 이러다 보면, 오랫동안 건드려지지 않는 위험요소가 적은 부분도 있을 테고, 그 부분의 테스..

    [UML] 모델링 특징, 구성 요소 및 도구

    특징UML은 객체지향 설게를 위한 표준 언어로, 소프트웨어 시스틈의 산출물을 가시화, 명세화, 구축, 문서화 하는데 사용된다.가시화 : 소프트웨어의 개념 모델을 시각적인 그래픽 형태로 표기하고, 표기법에 사용하는 심볼에 명확한 정의를 부여하는 것이다. 이것을 통해 개발자들은 원할한 소통을 할 수 있다.명세화 : 정확하고, 명백하며, 완전한 모델을 만드는 것을 뜻한다. UML은 소프트웨어 개발을 위한 분석, 설계, 구현 각 단계에서 필요한 모델을 정확하고 완전하게 명세하는 역할을 한다.구축 : 다양한 프로그래밍 언어로 표현하는 것이다. 또한 이미 구축되어 있는 소스코드를 UML로 역변환하여 분석하는 역공학 (Reverse Engineering)도 있다.문서화 : 요구 사항을 표현하고 시스템을 테스트하는 언..

    단위 테스트 (컴포넌트 테스트) / 드라이버 (Driver), 스텁 (Stub), 오라클 (Oracle)

    단위 테스트(컴포넌트 테스트)_드라이버(Driver), 스텁(Stub), 오라클(Oracle), 통합 테스트- 테스트 드라이버(Driver) : 테스트 대상 모듈을 호출하는 더미 프로그램- 테스트 스텁(Stub) : 테스트 대상 모듈에 의해 호출되는 프로그램테스트 관련 용어- 테스트 베이시스(Test Basis) : 테스트케이스 생성시 기초 자료 (기능, 요구사항, 제약사항명시)- 테스트 케이스(Test Case) : 특별한 목표 또는 상황을 테스트 하기 위한 입력값, 사전조건, 예상 결과, 사후조건 들의 집합- 테스트 수트(Test Suite) : 테스트 대상 컴포넌트나 시스템에 사용되는 여러 테스트 케이스 집합으로 TestCase간 사전/사후조건 연관 관계 포함- 테스트 스크립트(Test Script..

    정규화 수행과정 #도부이결다조

    - 1차 정규화: 원자값 아닌 도메인 분해(도)- 2차 정규화: 부분 함수 종속 제거(부)- 3차 정규화: 이행 함수 종속 제거(이)- 보이스-코드 정규화: 결정자가 후보키가 아닌 것 제거(결)- 4차 정규화: 다치 종속 제거(다)- 5차 정규화: 조인 종속 제거(조)1차 정규화- 하나의 컬럼에 원자값을 갖도록 조정2차 정규화- 부분 함수 종속 제거- 기본키의 일부가 다른 컬럼과 종속3차 정규화- 이행 함수 종속- 물론 학번->학부->등록금을 거치지 않고도, 등록금은 학부에 종속된다(학번에을 알면 해당 학생의 등록금을 무조건 알 수 있기 때문이다.) 하지만 의미적으로 등록금은 학부에 종속적으로 결정되는 것이 맞다. 따라서 이를 분리해 주어야 하는 것이다.보이스-코드 정규화- 결정자가 후보키가 아닌것 제거..

    힙 (Heap) / 이진 힙 (Binary Heap)

    정의힙 (heap)은 이진 힙 (binary heap)이라고도 하며, 최댓 값 및 최솟값을 찾아내는 연산을 빠르게 하기 위해 고안된 완전 이진트리(complete binary tree)를 기본으로 한 자료구조다. 힙은 다음과 같은 속성을 가지고 있다.완전 이진트리(Complete Binary Tree) 이다.부모노드의 키값과 자식노드의 키값 사이에는 대소관계가 성립한다.키값 대소관계는 오로지 부모자식 간에만 성립되며 형제사이에는 대소관계가 정해지지 않음.힙의 종류1. 최대 힙 (Max Heap)부모 키값이 자식노드 키값보다 큰 힙Key(parent) ≥ Key(child)가장 큰 값이 루트노드에 있음2. 최소 힙 (Min Heap)부모 키값이 자식노드 키값보다 작은 힙Key(parent) ≤ Key(ch..

    우선 순위 큐 - Priority Queue

    속성1. 모든 항목에는 우선 순위가 있다2. 우선 순위가 높은 요소는 우선 순위가 낮은 요소보다 먼저 queue에서 제외된다.3. 두 요소의 우선 순위가 같으면 queue의 순서에 따라 제공된다. 4 → 8 → 2 순으로 데이터가 들어간다고 했을 때 큐와 우선순위 큐의 처리 순서는 다음과 같다.(여기서 높은 값이 높은 우선순위를 갖는다고 가정.)input : 4 → 8 → 2큐 : 4 → 8 → 2우선순위 큐 : 8 → 4 → 2기본 동작enqueue()- queue에 새 요소를 삽입.dequeue() - queue에서 최대 우선 순위 요소를 삭제하고 그 값을 반환.peek() - queue에서 최대 우선순위 요소를 반환.구현  힙 방식이 최악에 경우라도 O(logN)을 보장하기 때문에 일반적으로 힙을 ..

    [네트워크] 호스트 (host), 클라이언트 (Client), 서버 (Server)

    클라이언트클라이언트는 서버에서 사용할 수 있는 서비스에 엑세스하는 컴퓨터 하드웨어 장치 또는 소프트웨어다. 서버는 종종 실제 별도의 컴퓨터에 위치한다.서버서버는 다른 컴퓨터의 요구 사항을 충족하기 위해 서비스를 실행하는 물리적인 전용 컴퓨터다. 실행 중인 서비스에 따라 파일 서버, 데이터베이스 서버, 홈 미디어 서버, 인쇄 서버 또는 웹 서버일 수 있다.호스트호스트는 네트워크를 통해 데이터 또는 서비스를 제공하는 다른 컴퓨터에 연결된 컴퓨터다. 이론적으로 네트워크에 연결된 모든 컴퓨터는 네트워크의 다른 피어에 호스트 역할을 한다. 본질적으로 호스트는 네트워크에 있는 둘 이상의 컴퓨터의 논리적 관계를 반영한다. 컴퓨터가 다른 컴퓨터의 호스트일 수 있다. 마찬가지로 라우터는 다른 라우터의 호스트일 수 있다...

    [네트워크] 접근 통제 정책 (MAC, DAC, RBAC)

    - 접근 통제 정책어떤 상황에서 행위를 허용하거나 거부할 것인지에 대한 내용을 나타낸다. 접근 통제 정책은 크게 세가지가 있다. - MAC (Mandatory Access Control) : 강제적 접근 통제주체, 객체 등급기반 접근권한 부여자원의 보안 레벨과 사용자의 보안 취급 인가를 비교하여 접근 제어를 한다.어떤 주체가 어떤 객체에 접근하려 할 때 양자의 보안 레벨(보안등급)을 비교하여 높은 보안을 요하는 정보가 낮은 레벨의 주체에게 노출되지 않도록 접근을 제한하는 방법 이다.  - DAC (Discretionary Access Control) : 임의적 접근 통제접근 주체 신분기반 접근권한 부여접근 주체가 속해 있는 그룹의 신원에 근거하여 객체에 대한 접근을 제한하는 방법 이다.자원의 소유자가 접..