목록소프트웨어 공학 (19)
오늘부터 공부한다
스택과 큐는 자료구조에서 가장 먼저 배우는, 가장 기본적인 자료구조이다. 알고리즘에서 많이 쓰인다는 자료구조들이 점차 배열로 해결가능해지자 자료구조를 이해하지 않고 코딩을하는 사람이 늘기 시작했다. 하지만 자료구조의 개념을 인지하고 활용하면 분명 코드와 개발에 도움이 될것이라 생각하기에 이 글을 작성해본다. 스택, 큐 대부분의 사람들 모두가 스택과 큐의 차이점을 말하라고 하면, 스택은 후입선출(LIFO), 큐는 선입선출(FIFO)라고 말한다. 후입선출은 가장 늦게 넣은 데이터가 가장 빨리 나가는 것. 선입선출은 가장 빨리 넣은 데이터가 가장 빨리 나간다는 뜻이다. 아마 이보다 더 쉽게 설명할 수 있는 글은 없는 것 같다. 하지만 작성자는 여기서 조금 더 설명해 보겠다. 1. 스택 스택은 객체들의 집합소로..
압축은 데이터 크기를 줄여서 저장공간을 더욱더 잘 활용하기 위한 기술이다. 파일을 압축할 때에는 압축 알고리즘을 사용하여 압축을 하게 되는데, 압축된 파일을 손상 없이 원래대로 되돌릴 수 있다면 이를 비손실 압축(Lossless Data Compression)이라 하고, 원래대로 복원할 수 없다면 손실 압축(Loss Data Compression)이라 한다. 쉽게 생각하자면 .zip, .7z와 같이 파일을 바꾸더라도 내용이 변하지 않는 것을 무손실 압축이라고 하고 .avi, .jpg, .gif와 같이 바꿀 수 있는 멀티미디어들을 손실 압축이라고 한다. 1. 무손실 압축 무손실 압축은 앞서 설명한 압축 프로그램 (알집, 7zip, 반디집)같은 프로그램으로 압축하는 프로그램을 뜻한다. 압축을 하더라도 원본 ..
글쓴이는 자바스크립트로 코딩을 하던 도중, 논리적으로는 옳지만 배열에 중복되는 값이 꾸준히 들어가는 에러를 마주했다. 꾸준한 삽질을 통해 얕은 복사와 깊은 복사에 대해 알게되었다. 왜 이걸 이제 알았을까? 나는 지금이라도 까먹지 않도록 얕은 복사와 깊은 복사에 대해 공부하고 기록하기로 했다. 객체의 복사는 얕은 복사(swallow copy)와 깊은 복사 (deep copy)로 나뉜다. 1. 얕은 복사란? 얕은 복사는 배열을 복사하지만 복사한 객체가 바뀌면서 참조되고 있는 배열 또한 변하는 것이다. 1 2 3 4 5 6 7 var array = [1,2,3,4]; var shallowCopy = array; shallowCopy [0] = 5; console.log(shallowCopy); // 결과값: ..
빅데이터는 우리가 자주 듣는 용어다. 이름 그대로 수많은 데이터들의 집합이라는 뜻이다. 빅데이터의 특징은 크기(Volume), 다양성(Variety), 속도(Velocity)로 요약할 수 있다. 데이터의 물리적인 크기를 말하는 - Volume 데이터의 형태 유뮤와 연산 가능 여부에 따라 나눠지는 데이터의 다양성 - Variety 그리고 이들을 빠르게 분석하고 처리하는 속도인 - Velocity로 나뉜다. 실시간으로 생성되는 데이터의 크기와 특징이 다양한 만큼, 이를 활용하는 속도 또한 빼놓을 수 없는 요소가 되었다. 최근에는 정확성(Veracity), 가변성(variavility), 가치(Value), 시각화(Visualization)등의 속성이 추가되어 불리기도 한다. 빅데이터는 우리가 사용하는 스마트..
결합도와 응집도는 모듈의 독립성을 판단하는 두 가지 지표이다. 결합도(또는 의존도)는 어떤 모듈이 다른 모듈에 의존 정도를 말한다. 응집도는 모듈 내부의 기능적인 집중 정도라고 할 수 있다. 이상적인 모듈화는 결합도는 낮을 수록, 응집도는 높을 수록 "유지보수성이 높다"라고 할 수 있다. 결합도가 높은 클래스의 문제점 연관된 다른 클래스가 변경되면 더불어 변경이 필요하다 수정하려는 클래스를 이해하기 위해 연관된 클래스를 함께 이해해야한다. 다른 프로그램에서의 클래스를 재사용하기 힘들다. 응집도가 낮은 클래스의 문제점 이해하기 어려움 재사용하기 힘듦 유지보수가 어려움 다른 클래스의 변화에 민감함 결합도(Coupling) 위에서 설명했듯이 소프트웨어 공학에서의 결합도는 모듈과 모듈간의 상호 의존을 말한다. ..
시큐어 코딩이란, 말 그대로 보안 코딩이다. 더 자세하게 설명하자면, 개발 단계에서 해킹과 같은 공격을 유발할 수 있는 취약점을 사전에 제거하고, 외부로부터의 공격에 안전하게 소프트웨어를 개발하는 방법이다. 시큐어 코딩은 수정이 손쉽고, 비용 효율성이 낮기 때문에 개발 초기 단계에서 시행한다. ※ 소프트웨어 업체는 SQL injection, XSS(Cross Site Scripting) 등 47개의 보안 취약점을 제거해야 함 시큐어 코딩을 위한 보안 방법론 1. 분석 단계 요구사항 중 보안 항목을 식별 보안 설계 검토 및 보안 설계서 작성 보안 통제 수립 2. 설계 단계 위험원 도출을 위한 위협 모델링 보안 설계 검토 및 보안 설계서 작성 보안 통제 수립 3. 구현 표준 코딩 정의서 및 소프트웨어 개발 ..
QA(Quality Assurance)는 품질 보증을 뜻힌다. 어떤 실체(품목, Entity)에 대해 품질 요구 사항을 충족한다는 신뢰를 주기 위하여 품질시스템에서 실시되는 계획적이고 체계적인 활동을 의미한다. QC(Quality Control)은 품질 관리를 뜻한다. QC(품질 관리)는 기업 경영상 제일 유리하다고 생각되는 품질을 보장하고 이것을 가장 경제적 제품으로서 생산하는 방법으로 품질에 대한 요구사항을 충족시키기 위해 사용되는 운영상의 기법/활동을 의미한다. 즉, 품질 보증은 고객의 관점에 비중을 많이 두는 활동이며, 해당 제품에 대한 포괄적인 책임을 지는 역할이다. 품질 관리(QC)는 제품에 많은 비중을 둔다고 볼 수 있는데, 제품의 목적에 준한 기능을 검증하는 역할을 수행한다. 품질 보증은 ..
디자인 패턴이란? 소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 발생했을 때 재사용할 수 있는 해결책이다. 디자인 패턴의 장점 1) 개발자(설계자) 간의 원활한 의사소통 : 여러 디자인 패턴의 특성을 잘 알고 있어 문제해결 시 어떤 디자인 패턴을 사용하면 좋을지 해결책을 논의할 수 있다. 2) 소프트웨어 구조 파악 용이 : 디자인 패턴의 특성을 잘 알고 있기에 어떤 디자인 패턴이 설계할 때 사용되었는지 알면 소프트웨어 전체구조를 쉽게 파악 가능하다 3) 재사용을 통한 개발 시간 단축 : 이미 만들어 놓은 디자인 패턴을 사용하므로 개발시간을 단축시킬 수 있다. 4) 설계 변경 요청에 대한 유연한 대처 : 사용자의 지속적인 추가 요청, 환경 변화 등의 설계 변경 요청에 쉽고 빠르게 대..
교착 상태 (Deadlock)의 개념 멀티 프로그래밍 환경에서 한정된 자원을 사용하려고 서로 경쟁하는 상황이 발생 할 수 있다. 어떤 프로세스가 자원을 요청 했을 때 그 시각에 그 자원을 사용할 수 없는 상황이 발생할 수 있고 그 때는 프로세스가 대기 상태로 들어 간다. 대기 상태로 들어간 프로세스들이 실행 상태로 변경 될 수 없을 때 이러한 상황을 교착 상태라 한다. 즉 교착 상태는 두 개 이상의 프로세스가 아무리 기다려도 자원을 사용할 수 없는 무한 대기 상태를 말한다. 교착상태의 발생 원인 교착 상태는 한 시스템 내에서 다음의 네 가지 조건을 모두 동시에 충족할때 발생 한다. - 따라서 네 가지 조건이 하나라도 성립하지 않아야 교착 상태를 해결할 수 있다. 원인 설명 상호배제(Mutual Exclu..
데이터를 안전하게 저장하고, 완전이 보관하는 기술 블록체인의 사전적 정의는 '누구나 열람할 수 있는 디지털 장부에 거래 내역을 투명하게 기록하고, 여러 대의 컴퓨터에 이를 복제해 저장하는 분산형 데이터 저장기술'이다. 복잡하게 들릴 수 있지만, 용어의 개념을 잘 들여다 보면 이는 정보 보호와 관련이 있음을 알 수 있다. 블록체인을 쉽게 설명하자면 데이터를 분산 처리하는 기술이다. '누구나 열람할 수 있다'는 말을 보자. 사실상 공개되고 공유된 기록은 조작이나 왜곡이 어렵다. 이 때문에 블록체인에서도 변조나 왜곡을 막기 위해 '블록(Block)' 단위로 생성되는 기록을 여러 장소에 나눠(분산) 저장한다. 따라서 해킹이 불가능하고, 정보가 온전하게 저장될 수 있다. '디지털 장부'는 컴퓨터에 저장된 기록물을..