CS/공통
Design Pattern 디자인 패턴 종류
개념소프트웨어를 설계할 대 특정 맥락에서 자주 발생하는 고질적인 문제들이 또 발생했을 때 재사용할 수 있는 훌륭한 해결책."바퀴를 다시 발명하지 마라 (Don't reinvent the wheel)", 이미 만들어져서 잘 되는 것을 처음부터 다시 만들 필요가 없다. 패턴이란)각기 다른 소프트웨어 모듈이나 기능을 가진 다양한 응용 소프트웨어 시스템들을 개발할 때도 서로 간에 공통되는 설계 문제가 존재하며 이를 처리하는 해결책 사이에도 공통점이 있다. 패턴은 공통의 언어를 만들어주며 팀원 사이의 의사 소통을 원할하게 해주는 아주 중요한 역할을 한다.구조콘텍스트 (Context)문제가 발생하는 여러 상황을 기술한다, 즉, 패턴이 적용될 수 있는 상황을 나타낸다, 경우에 따라서는 패턴이 유용하지 못한 상황을 나..
블록 암호 모드 (CFB, OFB, CTR)
CFB 모드CBC 모드와 CFB 모드 비교● Cipher FeedBack 모드(암호 피드백 모드) -> 피드백(FeedBack): 암호화 입력의 사용 의미 ● CFB 모드에서는 1단계 앞의 암호문 블록을 암호알고리즘의 입력으로 사용 초기화 벡터최초의 암호문 블록을 만들어낼 때는 1단계 앞의 출력이 존재하지 않으므로 대신에 IV를 사용'CFB 모드는 평문 블록과 암호문 블록 사이에 오직 XOR만 있음 CFB 모드와 스트림 암호CFP 모드는 평문 블록과 암호문 출력의 XOR를 이용 암호문을 생성XOR에 의한 암호화와 비슷 (일회용 패드 : 평문 XOR 랜덤 비트열) 키 스트림 (Key Stream)CFB 모드에서 암호 알고리즘이 생성하는 비트열키 스트림을 생성하기 위한 의사 난수 생성기로서 암호 알고리즘을..
사용자 인증(Authentication)과 권한 부여(Authorization)에 대한 이해
인증과 권한 부여의 차이사용자 인증 - 컴퓨터 보안에서 말하는 인증이란 어떤 실체가 그 실체가 맞는지 확인하는 것이다.여기에는 4가지 유형이 있다. 지식 기반 인증(What you know) • 고객이 알고있는 정보 기반으로 인증 • 비밀번호 등 • 유추가 가능하고 유출의 우려가 있음 소유 기반 인증(What you have) • 고객이 소유하고 있는 것을 기반으로 인증 • 공인인증서, 시크리트 카드, OTP, 문자인증 등 • 지식 기반 인증과 함께 사용되면 강력함 • 복제/분실의 우려 존재 생체(존재) 기반 인증(What you are) • 고객이 가지고 있는 고유한 생체적 특징을 기반으로 인증 • 지문인증, 홍체인증 등 • 분실이나..
Debug - Release 차이
보통 C++로 코드 작성 후 결과물을 실행 파일로 만들기 위해서는 빌드 작업을 해야만 한다. 이때 Visual Studio와 같은 IDE에서는 Debug 또는 Release 빌드 모드를 선택할 수 있다. 이는 사실 C/C++ 컴파일러의 최적화 옵션의 차이인데, Visual Studio에서는 편의를 위해 빌드 모드를 분리해놓은 것이다. 현업에 종사하거나 숙련된 개발자는 당연히 이 차이를 알고 있겠지만, 주로 C/C++ 개발을 처음 접하는 분들, 특히 학생들은 Visual Studio 기본값인 'Debug'로 빌드해서 배포를 하는 경우가 종종 있다. 잘못된 빌드 모드로 배포할 경우 성능 저하가 발생하거나 프로그램 실행 불가 등의 문제로 상당히 고생할 수 있으므로 각 빌드별 특징을 잘 알고있어야 한다. 차이점..
SDK, API의 개념과 차이점
API API란 Application Programming Interface의 약자로, 모듈화하여 만들어진, 어떤 기능을 제어/제공하는 인터페이스를 말한다. 우리가 사용하는 대부분의 애플리케이션은 API에 의존하고 있다. 예) - 차량 공유 앱에서 승차 거리와 시간을 계산하는 것 👉 API의 기능 - 차량 공유 앱에서 드라이버가 픽업 위치에 도착했음을 SMS로 알 수 있는 것 👉 API의 기능 SDK SDK란 Software Development Kit의 약자로, 소프트웨어 개발 도구 모음이라고도 한다. SDK는 API, IDE, 문서, 라이브러리, 코드 샘플 및 기타 유틸리티가 포함될 수 있다. SDK는 프로그램 및 응용 프로그램 개발의 복잡성을 줄이는 강력한 기능 집합이다. 예) iOS SDK를 다운..
모듈 Module
1. 일반적으로, 모듈이란? 보다 작고 이해할 수 있는 단위로 나뉘어진 것 본체(本體)에서 분리되어, - 작은 부분으로 유기적으로(기능별로) 구성되어 있다가, - 필요할 때 마다, 본체에 합류하여 그 기능을 수행할 수 있는 것 통상, 그 자체로 하나의 완전한 기능을 수행할 수 있는 독립된 실체로 봄 - 例) 각기 다른 여러 모듈 단위로 조립하여 전체를 완성 (모듈 조립) - 例) 표준화된 부품 (조립식 부품) 2. 문제를 다룰 때 모듈화 하는 이유는? 모듈화는, 거대한 문제를 작은 조각의 문제로 나누어 다루기 쉽도록 하는 과정 - 여기서, 작게 나누어진 각 부분을 모듈이라고 함 각 모듈은 논리적 또는 기능적으로 분리되어 격리되고 독립적인 일을 수행 모듈화 과정의 잇점 - 기본적인 것을 엮어서 복잡한 형상..
컴포넌트 Component
1. 컴포넌트는 독립적인 소프트웨어 모듈이다. 컴포넌트를 한마디로 표현하자면 소프트웨어 시스템에서 독립적인 업무 또는 독립적인 기능을 수행하는 ‘모듈’로서 이후 시스템을 유지보수 하는데 있어 교체 가능한 부품이다. 소프트웨어 컴포넌트는 하드웨어의 그래픽카드와 같은 개념으로 독립적인 기능을 수행하는 소프트웨어 모듈이라고 설명할 수 있으며 소프트웨어 컴포넌트는 컴포넌트란 말로 대체되어 사용되고 있다. 2. 컴포넌트는 구현, 명세화, 패키지화, 그리고 배포 될 수 있어야 한다. 컴포넌트의 정의나 형태는 관점에 따라 다양하게 존재하지만, 재사용 부품으로서의 컴포넌트가 되기 위해서는 아래의 내용을 만족해야만 한다. 소스코드(source code)가 아닌 실행코드(execute code) 기반으로 재사용할 수 있도..
모듈과 컴포넌트의 차이점
모듈이란? 모듈이란 비슷하거나 연관성 있는 것들로 이루어진 메소드나 클래스의 집합이다. 자동차로 예를 들자면 엔진을 이루고 있는 구성품들의 집합을 엔진이라고 하고 엔진을 모듈이라고 할 수 있다. 여기서 구성품들은 클래스나 메소드들을 가르킨다. 결론은 재사용이 가능한 코드의 모음이라고 보면 된다. 모듈은 코드의 재사용 및 유지보수를 쉽게 해줘서 프로그램을 만들 때 모듈화하여 만들고 있다. 컴포넌트란? 기능의 최소 단위다. 프로그램을 만들때 재사용하기 위해서 모듈화하여 사용한다고 하였다. 재사용하기 위해선 독립적인 기능을 가져야하지만 독립적으로 개발하여도 모듈간의 호환이 되지 않는 경우가 있어 소프트웨어의 재사용이 어려워지게 된다. 그런 문제를 해결하기 위한 방법이 컴포넌트이고 컴포넌트는 소프트웨어의 재사용..
객체[Object]와 인스턴스[Instance]
객체와 인스턴스는 객체지향 프로그래밍에서는 거의 비슷한 개념으로 사용되지만 엄밀히 말하면 조금은 차이가 있는 개념이다. 객체지향 프로그래밍이 생성된 원인이 사람의 사고와 가장 비슷하게 프로그래밍을 하기 위해서라고 할 수 있다. 즉 우리 실생활의 모든 것들이 전부 객체로 이루어진 것이다. 넓은 의미에서의 객체라는 것은 보고 만질 수 있고, 이해할 수 있으며 생각이나 행동이 추구하는 바를 의미한다. 즉 객체라는 것은 우리가 인지 하고 있는 구체적인 사물이나 시스템이 될 수도 있고, 구체적이지만 물리적으로 경계가 모호한 강, 안개 등도 객체라 할 수 있는 것이다. 인스턴스란, 예로 우리는 하나의 청사진이 되는 클래스를 정의하면 이 클래스에서 각각 구별이 되는 인스턴스를 얼마든지 만들어 낼 수 있는 것이다. 사..
깃(Git) 한글 깨짐 현상 해결
이 파일을 메모장으로 열어보니 인코딩이 ANSI로 되어있는 것을 확인할 수 있었다 1. 기존 파일 인코딩 변경 변경하고자 하는 파일 선택 후, 파일 -> 다른 이름으로 저장 을 통해 그 파일의 인코딩을 저장할 수 있다. [참고] 2. editorconfig 파일을 이용해 새 파일 생성 시 utf-8로 생성하도록 설정 이미 만들어진 기존 파일은 위와 같이 직접 변경할 수 밖에 없었지만... 앞으로 파일 생성시에도 utf-8로 생성해주는 것이 좋을 것 같아 이를 위해서 editorconfig 파일을 이용한다. 방법은 간단하다! editorconfig란? 코딩 스타일을 일관되게 설정할 수 있게 해주는 설정파일이다. 이를 통해 indentation(들여쓰기) 스타일과 같은 다를 수 있는 설정들을 미리 지정해 둘..