전공공부 72

[알고리즘] KMP 알고리즘

KMP(Knuth-Morris-Pratt) 알고리즘은 두 문자열 s1과 s2가 주어지고, s1가 s2보다 길 때, s1 안에 s2가 포함되어 있는지를 탐색하는 알고리즘입니다. 1. 필요성 가장 기초적으로 브루트 포스를 이용해 s1에 s2가 포함되는 지를 확인하기 위해서는 아래와 같은 단계를 거쳐야 합니다. 2중 반복문을 통해 한 칸씩 옆으로 이동하며 비교를 해야 하기 때문에 시간 복잡도는 O(s1.length * s2.length)가 나오게 됩니다. 이를 개선하기 위해 등장한 알고리즘이 바로 KMP 알고리즘입니다. 위의 사진에서 첫 비교 부분만 분리해서 가져와 보겠습니다. 이미 앞에 세 자리는 같다는 것을 확인했고, 네 번째 자리에서 불일치가 발생했습니다. 그렇다면 '앞에서 이미 연산을 한 세 자리 정보..

[소프트웨어 설계] UML

UML(Unified Modeling Language)는 시스템 개발 과정에서 시스템 개발자와 고객 또는 개발자 상호 간의 의사소통이 원활하게 이루어지도록 표준화한 대표적인 객체지향 모델링 언어입니다. UML은 사물(Things), 관계(Relationships), 다이어그램(Diagram)으로 이루어집니다. 1. 사물 사물은 모델을 구성하는 가장 중요한 기본 요소입니다. 다이어그램에서 관계가 형성될 수 있는 대상들을 말합니다. 사물은 아래의 4가지로 분류할 수 있습니다. 1. 구조 사물 - 시스템의 개념적, 물리적 요소를 표현 (Class, Use Case, Component...) 2. 행동 사물 - 시간과 공간에 따른 요소들의 행위를 표현 (Interaction, State Machine...) 3..

[데이터베이스] 데이터베이스 설계

데이터베이스 설계란 데이터베이스를 생성하는 일련의 과정으로 볼 수 있습니다. 데이터베이스 설계는 다음과 같은 순서로 진행됩니다. 요구사항 분석 -> 개념적 설계 -> 논리적 설계 -> 물리적 설계 -> 구현 각 단계에 대해 자세히 공부해보도록 하겠습니다. 1. 요구사항 분석 요구사항 분석은 말 그대로 사용자의 요구사항을 수집하고 분석하는 과정입니다. 성공적인 데이터베이스 설계를 위해서는 반드시 정확한 사용자의 요구사항을 도출해내어야 하며, 전체 시스템 개발 과정 중에 가장 어려운 단계로 볼 수도 있습니다. 사용자에 따른 수행 업무와 필요한 데이터의 종류, 용도, 처리 형태, 흐름, 제약 조건 등을 수집해야 하며, 수집한 자료를 바탕으로 요구사항 명세서를 작성합니다. 2. 개념적 설계 개념적 설계란 현실 ..

[데이터베이스] 데이터베이스 개요, DBMS

1. 데이터베이스란? 데이터베이스는 특정 업무를 수행하는 데 필요한 상호 관련된 데이터들의 모임입니다. 이 정의를 풀어서 설명하면 다음과 같습니다. 1. 통합된 데이터 (Integrated Data): 데이터베이스는 자료의 중복을 배제한 데이터의 모임입니다. 그러나 실제로는 중복을 완전히 배제하지는 않고, 필요에 따라 효율성을 높이기 위해 통제된 중복(Controlled Redundancy)은 허용합니다. 2. 저장된 데이터 (Stored Data): 데이터베이스는 컴퓨터가 접근할 수 있는 매체에 저장된 자료입니다. 3. 운영 데이터 (Operational Data): 데이터베이스의 데이터들은 조직의 업무를 수행하는 데 있어서 반드시 필요한 데이터들입니다. 4. 공용 데이터 (Shared Data): 데..

[소프트웨어 설계] XP 기법

스크럼 기법과 더불어 애자일 모형의 대표적인 개발 기법인 XP(eXtreme Programming) 기법은 고객의 참여와 개발 과정의 반복을 극대화하여 개발 생산성을 향상하는 방법입니다. 1. XP 기법이란? XP 기법은 짧고 반복적인 개발 주기, 단순한 설계, 그리고 고객의 적극적인 참여를 통해 소프트웨어를 빠르게 개발하는 것을 목적으로 합니다. XP의 5가지 핵심 가치로는 의사소통(Communication), 단순성(Simplicity), 용기(Courage), 존중(Respect), 피드백(Feedback)이 있습니다. XP 기법에서 몇 개의 요구사항이 적용되어 부분적으로 기능이 완료된 제품을 제공하는 것을 릴리즈(Release)라고 합니다. XP 기법에서는 이 릴리즈를 최대한 많이 반복하여, 고객..

[소프트웨어 설계] 스크럼 기법

스크럼 기법은 애자일 모형에 기초를 둔 소프트웨어 개발 모형입니다. 이번 글에서는 이 스크럼 기법에 대해 알아보도록 하겠습니다. 1. 스크럼(Scrum) 기법이란? 스크럼이란 럭비에서 양 팀이 서로 대치해있을 때의 팀의 대형을 뜻하는 단어입니다. 즉 팀의 중요성을 강조하는 단어로, 스크럼 기법 역시 팀이 중심이 되어 개발의 효율성을 높이는데 중점을 두는 기법입니다. 스크럼 기법을 위해서는 하나의 스크럼 팀을 구성하여 개발에 들어갑니다. 스크럼 팀의 구성원으로는 제품 책임자, 스크럼 마스터, 개발팀이 있습니다. 우선 제품 책임자(PO, Product Owner)는 의견을 종합하여 제품에 대한 요구사항을 작성하는 사람입니다. 주로 개발될 결과물에 대한 이해도가 높고, 의사결정에 책임을 질 수 있는 사람이 제..

[소프트웨어 설계] 소프트웨어 생명 주기 모형

소프트웨어 생명 주기(Software Life Cycle)는 소프트웨어를 개발하기 위한 정의, 운용, 유지 보수 등의 과정들을 단계별로 나눈 것입니다. 그리고 그 방식에 따라 여러 가지 모형(model)들이 존재합니다. 개발을 시작할 때 그 특성에 따라 생명 주기의 모형을 선택할 수 있습니다. 이번 글에서는 어떤 모형들이 있는지를 알아보도록 하겠습니다. 1. 폭포수 모형 (Waterfall Model) 가장 많이 사용되는 모형인 폭포수 모형부터 알아보겠습니다. 폭포수 모형은 폭포에서 물이 한번 떨어지면 다시 올라갈 수 없듯이, 한번 지나간 단계는 다시 살피지 않는다는 뜻을 지닌 모형입니다. 즉, 한 단계를 완벽하게 완성하고 마무리 한 뒤에 다음 단계로 넘어가며, 넘어간 뒤에는 다시 돌아오지 않습니다. 그..

[알고리즘] 다이나믹 프로그래밍

다이나믹 프로그래밍(Dynamic Programming)은, 핵심부터 설명하자면, 한 번 수행한 연산을 저장시켜두어, 다음에 해당 연산을 또 해야 할 때 기존의 연산 결과를 이용함으로써, 연산의 중복 수행을 막는 알고리즘입니다. 수행한 연산의 결과를 메모리에 저장시켜 둠으로써, 메모리를 조금 더 사용하긴 하지만 그로 인해 연산 속도를 비약적으로 증가시킬 수 있습니다. 다이나믹 프로그래밍 사용의 가장 대표적인 예시가 바로 피보나치 수열 문제입니다. 피보나치 수열이란, 이전 두 항의 합을 현재의 합으로 사용하는 특징을 가지는 수열입니다. 아래의 예시가 바로 피보나치 수열입니다. 우선 수학적으로 접근하여 재귀함수로 피보나치 함수를 구현하면, 간단하게 구현이 가능합니다. 1 2 3 4 5 6 7 8 9 10 1..

[알고리즘] 그리디 알고리즘

그리디 알고리즘(Greedy Algorithms)은 이름 그대로 번역하면 '탐욕법'이라고 해석됩니다. 이 이름 그대로, 어떤 문제에 대해서 탐욕적으로 문제를 푸는 방법이 바로 이 그리디 알고리즘입니다. 탐욕적이라는 말을 조금 더 듣기 좋게 풀어보자면, '현재 상황에서 최선의 선택을 하는 방법'이라고 할 수 있습니다. 즉, 매 순간 여러 선택지 중 가장 좋아 보이는 선택지를 고르고, 이 선택이 추후에 미칠 영향은 고려하지 않습니다. 추후에 미칠 영향을 고려하지 않는다는 말은, 결과적으로는 최적의 해가 아닐 수도 있다는 것을 뜻합니다. 그래서 항상 어떤 문제와 마주치면, 이 문제를 그리디를 이용해 풀어도 되는 것인지에 대해 생각을 해 보아야 합니다. 하지만 만일 그리디로 접근해도 되는 문제라면, 그리디를 사..

[컴퓨터망] Routing (4) - ICMP, SNMP

1. ICMP 네트워크 계층과 라우팅에 대해 지금껏 공부하면서 알아본 내용은 어떻게 패킷을 출발지로부터 목적지까지 안전하게 운반을 하는가에 대한 내용이었습니다. 그리고 패킷이 실제로 안전하게 운반이 된다면 통신이 제대로 성공한 것이므로 문제가 생기지 않습니다. 하지만 어떠한 문제로 인해 목적지에 패킷을 전달하는 것에 실패한다면 문제가 발생합니다. 인터넷 프로토콜(IP)에는 이러한 에러에 대한 처리 방법이 존재하지 않기 때문입니다. 그래서 IP의 이런 문제점을 보강하기 위해 IP와 함께 사용되는 것이 바로 ICMP(Internet Control Message Protocol)입니다. TTL이 0이 되었거나 목적지에 도착했는데 명시된 포트 번호가 존재하지 않거나, 또 해당하는 호스트가 없거나 하는 다양한 경..