스크립트 바이러스(Script Virus) 개념 스크립트 바이러스는 사용자가 악성 코드가 포함 된 백그라운드에서 실행되는 광고, 파일 또는 코드가 있는 페이지를 방문한 후 스크립트가 실행이 되는 바이러스이다. 바이러스 코드를 스크립트 언어(ASP, Java Script, Visual Basic Script, PHP 등)으로 작성하여 스크립트를 코드가 심어진 페이지에서 실행을 하며, 정상파일을 변경하고 프로그래밍된 인터넷 주소로 접속을 시도해 다른 악성코드들을 다운로드 및 실행하게 만들며 암호 유출용 악성코드의 전파와 실행을 보조하기도 한다. 스크립트 바이러스 감염 증상 사용자의 의도와 무관하게 브라우저의 홈페이지가 변경Windows 레지스트리 변경 (대다수의 사용자는 레지스트리에 대해서 모르기에 잡기가 ..
블락비 박경이 마치 술김에 실수로 써내려갈 법한 가수들의 실명을 거론한 "사재기 연예인들"이라며 올린 트위터 글은 연예계에 대형 폭탄을 투하시켰다. 해당 글을 보면 마지막에 "^^" 웃는 이모티콘을 추가하였는데 이를 토대로 보면 박경은 실수가 아니라 "비꼬는 글"이라는 즉, 고의성이 다분한 연예계의 의사(義士)가 되어 버렸다. 혹자는 열사(烈士)라고 하지만, 박경은 열사보다 의사라는 표현이 좀 더 정확하다 생각한다. 왜냐... 비록 인터넷 공간이지만 충분히 데미지를 줄 수 있는 저격을 하였으니까!! 2019년 한해에는 정말 연예계에 숱한 사건들과 화제의 인물들이 많았다. 장성규로 시작한 화제의 인물은 펭수, 유산슬로 이어지며 정말 한해 동안 많은 "스타"들이 새로 등장했으며, 설리, 구하라라는 톱스타의 ..
맨하탄 거리(Manhattan Distance) 혹은 맨해튼 거리는 유클리드 거리(Euclidean Distance)와 함께 매우 기초적인 좌표간의 거리를 구하는 방식이다. 이름에서 뉘앙스가 풍기겠지만, 이 맨하탄은 미국 뉴욕시 행정 구역인 그 맨하탄이 맞다. 맨하탄은 인류 최초의 현대 대도시로 불리며, 맨하탄의 상징적인 이미지는 빌딩숲의 이미지이다. 그러다보니 지금은 매우 흔한 모습이지만, 주먹구구식 그리고 계획적이지 않던 기존의 도시와 달리 매우 체계적이고 계획적이다보니 건물들이 사각형으로 촘촘히 체계적으로 이루어진 잘 정돈된 모습으로 알고리즘 이름을 부여받게 되었다. 맨하탄 거리는 L1 Distance라고도 불린다. L2 Distance가 유클리드 거리인데 그만큼 유클리드보다 공식이 더 쉽기 때문이..
유클리디안 거리(Euclidean Distance) 혹은 유클리드 거리는 매우 심플하고, 베이직한 값들간의 거리를 구하는 알고리즘이다. 이틀 토대로 값들간의 유사도를 구할 수 있어서 유클리디안 거리로 유사도를 측정하는 방식을 유클리디안 유사도(Euclidean Similarity)라고도 하여, 같은 의미로도 인식 될 수 있다. 유클리디안 거리는 우리가 학창 시절(필자는 중학생 시절) 배웠던 피타고라스 정리와 같은 개념이라 생각하면 된다. 피타고라스의 정리는 이미 만들어진 삼각형을 이용한 공식이라 한다면, 유클리디안 거리는 삼각형을 만들어서 계산을 한다는 개념이라 인식하면 된다. 다만 추가적으로 차이점은 유클리디안 거리는 여러차원의 거리를 계산할 수 있다. 그래서 여러차원일 때의 공식을 보면 마치 엄청난 ..
지식의 피라미드(DIWK Pyramid), DIKW 피라미드, DIKW 계층도(hierarchy), 데이터 피라미드 등은 다 같은 의미로 지식의 변화과정을 잘 나타내주는 모형 혹은 모델이다. 지식은 데이터(Data) -> 정보(Information) -> 지식(Knowledge) -> 지혜(Wisdom) 과정으로 진화를 할 수 있게 되며 각각의 의미는 다음과 같다. 데이터(Data) 데이터는 단순한 사실을 말한다. 예를 들어, A라는 사람의 나이는 35세이다. 서울의 버스 기본요금은 1200원이다 같은 주관적인 것이 배제된 사실을 뜻한다. '서울의 버스 기본요금'은 데이터가 아니라 정보의 영역이다라고 말하는 사람이 있을 수 있겠지만, 이러한 RAW성 데이터를 조합하여, 다음 단계로 갈 수 있으며, 어떠한..
회사에서 상주시키고 있는 개인 딥러닝 노트북으로 T-Rex 마이너 프로그램을 써서 꾸준히 레이븐코인의 채굴을 진행하고 있는데, 문제는 학습을 하는 동안 활주로 소리가 날 정도로 소리가 너무 컸었다. 그래서 한동안 GPU 채굴을 하지 않는 마이너 프로그램으로 다른 암호화폐를 채굴 진행하였는데(모네로나 이더리움 클래식이나...) 확실히 레이븐코인에 비해서 현저히 채굴이 떨어졌다. 레이븐코인(Ravencoin), 채굴(Mining)하기 그래서, 방법이 없을까 고민하다 T-REX github에 들어가니 속도를 조절하는 방법이 적혀 있었다(바보같이 모르고...) 집에서 채굴할때는 소리가 나지 않아서 몰랐는데 확실히 놋붓으로 하면 소리 때문에 제대로 진행이 안되니 회사에서 소리 때문에 채굴을 못하는 분들은 아래처럼..
필자의 주특기(?)중 하나가 추천 알고리즘을 만드는 것이기 때문에 추천 시스템에 대해서 간략히 적어보도록 하겠다. 사실 최근에 유튜브에서 유행하는 댓글 중에 이런 말이 있다. "유튜브의 알고리즘이 나를 여기로 이끌었다." 나를 왜 이 영상을 보게 만들었는지 모르겠지만 봐보니 재미있다 이런 내용들이 많은 이 드립에 사람들은 유튜브에 경의(敬意)를 표하게 된다. 그러나 사실 크게 어려운 개념이 아니라서, 이번 포스팅에 바로 이 추천 시스템 혹은 추천 엔진(Recommender Engine)에 대해서 설명하고 어떤 알고리즘들이 있는지를 확인해보도록 하겠다. 관심이 있을만한 컨텐츠를 추천하는 추천 시스템추천 시스템(Recommender System)의 개념- 컨텐츠의 내용에 기반하거나, 사람들의 행동들을 모은 ..
퍼셉트론(Perceptron)을 만든 로센블래트와 고등학교 동창이던 마빈 민스키 박사의 설전을 통해서 퍼셉트론이 대부분 해결할 수 없다는 것이 알려진 직 후, 인공지능의 1차 겨울이 오고 말았다. 퍼셉트론은 AND, OR, NAND와 같은 선형 문제는 풀 수 있었지만, XOR같은 비선형 문제를 풀 수 없었기 때문이다. 이로 인해 발생한 인공지능의 불신과 함께 인공지능에 투자하는 것이 급격히 줄어들게 되며, 조용히 사라지는 듯 보였지만 최초의 신경망이라고 불리는 퍼셉트론 방식과 다른 방식인 전문가 시스템(Expert System)을 통해서 인공지능은 다시 부활하게 된다. 전문가 시스템은 사실 룰(Rule) 기반 방식을 채택하고 있으며, 수많은 IF ~ ELSE(조건문)으로 만들어진 외관상으로 보이는건 인공..
회선 교환(Circuit Switching)과 패킷 교환(Packet Switching)은 데이터를 전달하는 방식이며, 혹자는 패킷 교환이 회선 교환보다 무조건 좋다라고 말을 하는데(몇몇 블로그에서는...) 사실 소비자(혹은 사용자) 입장과 제공업체 입장의 차이가 다를 수 밖에 없는 방식이며, 서비스에 따라 교환하는 방식을 선택할 수 있는 차이가 있다. 회선 교환(Circuit Switching) 우선 회선 교환은 다이렉트로 교환을 해주는 방식이며 대표적인 예로 전화망을 생각하면 된다. 내가 누군가와 통화를 한다면, 그 사람과 나는 1:1로 연결을 하게 되며 이 연결에 어떤 누구도 침범을 할 수 없게 된다. 이와같이 여러개의 게이트웨이(Gateway, GW)와 라우터(Router) 중에 정해진 루트대로 ..
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)를 얻는 것이다. 시스템의 인수결정을 위한 확인 과정, 인수테스트인수..