버블 정렬(혹은 거품 정렬)이란 - 데이터 집합을 순회하면서 집합 내의 이웃 요소들끼리의 교환을 통해 정렬하는 방식 - 두개의 인접한 원소를 검사하여 정렬을 하는 방식으로 시간 복잡도가 O(n$^2$)로 상당히 느리지만, 코드가 단순하기 때문에 자주 사용하는 방식이다. 버블정렬 코드, Java 예제 1 class BubbleSort { void bubbleSort(int array[]) { int size = array.length; // Run loops two times: one for walking throught the array // and the other for comparison for (int i = 0; i < size - 1; i++) { // swapped keeps track of..
DB 서버 부하 분산, 샤드의 개념 - 부하 분산을 위해 Application/DB Level에서 다수의 데이터베이스에 데이터를 분산 저장하는 기법 - 데이터베이스 분야에서 성능, 확장성 및 I/O 대역폭을 개선하는데 사용하는 분산처리 기법 샤드 혹은 샤딩기법은 데이터를 분리하기 용이한 기준을 잡고 데이터를 분산저장하거나 Row의 행수 등을 기준으로 분산저장을 한다. 최근 데이터의 폭발적인 증가는 빅데이터(Bigdata)라는 신조어를 만들게 되었고, 수많은 빅데이터를 처리하기 위해서는 데이터를 모두 동일하게 복제하는 방식이 아닌 수평적인 서버들에 분산 저장하여 처리를 하는 방식으로 가게 되었다. 물론 샤드의 문제를 방지하기 위해서 리플리카(replica)의 방식을 섞어서 실제로는 둘 중 하나의 방식이 아..
IP 주소의 융통적인 할당 및 관리, CIDR 가. CIDR (Classless Inter-Domain Routing)의 정의 - 도메인간의 라우팅에 사용되는 인터넷 주소를 IP 주소 클래스 체계를 쓰는 것보다 더욱 융통성 있도록 할당하고, 지정하는 방식 - 클래스 없는 도메인 간 라우팅 기법으로 1993년 도입되기 시작한, IP 주소할당 기법 (네트워크 클래스를 대체) - 여러 네트워크 영역으로 나눌 때 기존방식에 비해 유연성을 더해주는 IP 주소 할당 기법 나. CIDR의 특징 활용 가능한 인터넷 주소의 숫자가 크게 증가 인터넷 백본 네트웍 상에서 실질적으로 모든 게이트웨이 호스트에 의해 사용되는 라우팅 시스템 IP Address/Mask의 형식, 예) 192.30.250.00/18 ("192.30...
암달의 법칙(Amdahl's law)은 미국의 컴퓨터 공학자이자 기업가였던 진 암달(Gene Amdahl)이 만든 법칙으로 암달의 저주(Amdahl's curse), 암달의 인수(Amdahl's argument)라고도 불린다. 진 암달(Gene Amdahl, 1922년 11월 16일 ~ 2015년 11월 10일)은 위스콘신 대학교 매디슨에서 이론물리학 석박사를 취득했고, 52년에 IBM으로 입사해 704 메인프레임, 시스템 360 메인프레임 등의 개발을 총괄하기도 했다. 암달의 법칙은 1965년 옮긴 어드밴스드컴퓨팅시스템랩에서 만든 것으로 컴퓨터 성능 최적화의 한계점을 측정하기 위해 만든 법칙이다. Gene Amdahl 암달의 법칙의 병렬 프로세스 성능 관점 암달의 법칙은 현재도 많이 쓰이며, 일반적으로..
Divide & Conquer를 이용한 하향식, 구조적 방법론의 개요 구조적 방법론(Structured Development Methodology) 개념 - 전체 시스템을 기능에 따라 분할하여 개발하고, 이를 통합하는 분할과 정복(Divide & Conquer) 방식의 방법론, 프로세스 중심의 하향식 방법론(Top-Down) - 정형화된 분석 절차에 따라 사용자 요구사항을 파악하여 문서화하는 체계적인 방법으로 비즈니스 프로세스 자동화를 목표로 하고 있으며, 프로세스 중심의 개발 방법 특징데이터 흐름 지향으로 프로세스 위주의 분석과 설계 방식모듈의 분할과 정복에 의한 하향식(Top-Down) 설계 방식다른 프로세스로 순차적 진행하는 폭포수 모델이 기본소프트웨어의 개발이 목표인 프로세스와 산출물의 구성연속(..
B2Bi(Business to Bussiness) 개념 - 기업내 이기종 어플리케이션 결합을 EAI(Enterprise Application Integration)이라 한다면, 기업간 어플리케이션 결합을 B2Bi라 한다 - 기업과 기업, 기업과 e마켓플레이스, e마켓플레이스와 e마켓플레이스 등 기업간 전자상거래에서 발생하는 비즈니스 프로세스를 효과적으로 지원하기 위해 전산시스템과 문서포맷, 애플리케이션을 통합·연동하는 솔루션 예를들어 두 기업간에 경매나 역경매, 구매처리와 같은 업무가 이뤄지려면 두 회사가 서로 이해할 수 있는 공통의 포맷이 필요하다. 기업의 수에 관계없이 업무를 매끈하게 연결해주는 것이 B2Bi의 개념으로, 이를 소프트웨어(SW)적으로 구현한 것이 B2Bi 솔루션이다. - 전자신문 - ..
EAI(Enterprise Application Integration)의 개요 EAI의 개념 EAI(Enterprise Application Integration)은 약어의 의미 그대로 전사 어플리케이션 통합을 위한 솔루션이다. 처음부터 모든 어플리케이션을 연결하기 위해서 설계되어지고 만들어졌다면 EAI가 필요하지 않겠지만, 그렇지 않은 기업들은 산재되어 각자 만들어진 수많은 어플리케이션이 있을 것인데 이것을 통합하기 위해서 솔루션이 필요했으며, 그 솔루션의 명칭을 EAI라고 한다. 표준화되거나 솔루션 기반의 통합을 사용하지 않고 직접 모든 어플리케이션을 연결할 경우 이와같이 스파게티 현상이 발생한다 참고로 가트너 그룹에서는 EAI를 아래와 같이 정의한다.- 엔터프라이즈 미들웨어를 인프라로 하여 다양한 ..
순환관계, 자기참조관계의 개념가. 순환관계(Recursive Relationship)의 정의- 하나의 엔터티(Entity)가 다른 엔터티가 아닌 자기 자신과 관계를 맺는 타입으로 순환관계 혹은 자기참조관계라 불린다.- 동일 Entity 타입 내에서 자기가 자기의 인스턴스를 참조하는 구조, 대표적으로 조직을 표현할 때 자주 사용 동일한 Entity타입의 Entity들이 상호간에 계층적으로 데이터가 구성되는 관계 나. 자기 엔터티타입을 참조하는 구성방법에 따른 유형복합형(다중Entity) : 동일한 PK를 가진 테이블을 별도로 분리통합형(단일Entity) : Entity타입 내에서 자기자신을 참조 다. 복합형(다중Entity)로 구성 시 자기참조관계의 단점 - 추가적인 관계 발생이나 변경 시 새로운 엔터티 ..
디지털 인질극, 랜섬웨어(Ransomware)의 개념 랜섬웨어는 몸값이라는 Ransom이라는 단어와 소프트웨어의 ware가 합쳐진 합성어로 "시스템을 잠그거나 데이터를 암호화하고 이를 인질로 돈 등을 요구하는 악성 프로그램"이다. 랜섬웨어는 최근에 등장한 것 같지만, 사실 최초의 등장은 1989년 조셉 팝(Joseph Popp)이 작성한 AIDS가 시작이다. 이토록 오래전에 등장했지만 그동안 랜섬웨어의 등장은 다른 악성코드처럼 활발하지 못했다. 왜냐하면 돈을 주고받는 행위는 결국 오프라인으로 만나거나, 계좌를 이체해야 하는 등. 잡히기 매우 쉽기 때문에 해커가 다른 방식으로 이득을 취하는 경우가 많았기 때문이다. 하지만, 비트코인(Bitcoin)이 등장하며 암호화폐는 해커들(정확히 말해서는 크래커들)사이..
TDD(Test-Driven Development)는 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나로 애자일 방법론중 하나이다. 일반적으로 개발을 먼저 수행하고, 테스트 단계를 거치는 방식을 관점을 뒤집은 것으로 테스트를 수행할 방법(ex: Test Case)을 먼저 만들고, 이 요건을 충족할 코드를 뒤에 짜는 것이다. TDD는 이런 방식을 채용하였기 때문에, 더 고품질의 프로그램이 실현 가능해진다. 그리고 이어지는 리팩토링 단계는 테스트의 문제 뿐만 아니라, 코드의 단단함까지 더해질 수 있다. 결과적으로 TDD를 수행하게 되면 TC를 충족하는 코드와 군더더기 없는 코드(simple code 혹은 clean code)가 생산된다는 말이 된다. 일반적으로 개발을 진행하였을 때, 들어가..
설치 테스트는 프로그램이 제대로 설치되며 동작하는지 확인하고, 레지스트리의 변경 사항과 제거(Uninstallation)이 제대로 수행되는지까지 확인하는 테스트다. 윈도우(Windows) 운영체제에 설치하지 않는 리눅스계열의 프로그램이라면, 특정 폴더안에서 설치가 되는지 확인하고 sh(쉘파일) 등으로 쉽게 삭제할 수 있겠지만, 윈도우에 설치하는 프로그램이라면 설치, 삭제 시 영향도까지 확인하는 작업이 필요하다. 참고로, 설치 테스트에 관련된 정보는 STEN 혹은 개발자도 알아야 할 소프트웨어 테스팅 실무 도서에 포함이 되어 있지 않는데 아무래도 인수 테스트 단계에서 설치 테스트 관련 내용을 포함하는 것이 아닐까 싶다 사용자 환경의 End-User 최종 테스트, 설치 테스트 설치 테스트(Installati..
인수 테스트(Acceptance Testing)은 정보 시스템의 검사 중 하나로서, 해당 시스템이 실제 운영 환경에서 사용될 준비가 되었는지 최종적으로 확인하는 테스팅 단계이다. 개발자가 중심이 되어 수행하는 단위 테스트와 개발자 테스터가 같이 수행하는 통합 테스트 그리고 전문적인 테스터가 주축이 되어 수행하는 시스템 테스트와 달리 인수 테스트의 주축이 되는 테스터는 고객이나 실제 사용하는 사용자가 참여하며, 다른 이해관계자(Stakeholder)도 참여할 수는 있다. 앞에서 수행하는 테스트들은 결함을 찾고, 요구사항의 조건에 충족하는지를 보는 것이 목적이라면 인수 테스트의 목적은 이제 사용을 해도 되는 것인지 확신(Confidence)를 얻는 것이다. 시스템의 인수결정을 위한 확인 과정, 인수테스트인수..