전체 글 116

OpenSSL

OpenSSL은 데이터 암호화와 보안 통신을 위해 널리 사용되는 오픈 소스 소프트웨어 라이브러리입니다. 주로 TLS(Transport Layer Security)와 SSL(Secure Sockets Layer) 프로토콜을 구현하여 웹과 네트워크의 보안을 강화하는 데 사용됩니다. 다음은 OpenSSL의 주요 기능과 구성 요소에 대한 설명입니다:주요 기능암호화 및 복호화: OpenSSL은 대칭 암호화(예: AES), 비대칭 암호화(예: RSA, DSA), 해시 함수(예: SHA-256), 디지털 서명 등을 지원하여 데이터의 기밀성과 무결성을 보장합니다.TLS/SSL 프로토콜 구현: HTTPS 웹사이트를 통해 안전한 통신을 가능하게 하는 TLS/SSL 프로토콜을 구현합니다. 이를 통해 클라이언트와 서버 간의 ..

네트워크 2024.08.04

템플릿의 정의를 CPP에 쓸 수 없는 이유

일반 함수일반 함수의 경우, 함수 선언과 정의를 분리하는 것이 일반적입니다. 함수 선언은 헤더 파일에 있고, 정의는 소스 파일에 있습니다. 예를 들어:// myfunctions.hvoid myFunction();// myfunctions.cpp#include "myfunctions.h"void myFunction() { // 함수 정의} 컴파일러는 각 소스 파일을 독립적으로 컴파일한 후, 링커가 모든 객체 파일을 결합하여 프로그램을 만듭니다. 이 과정에서 링커는 함수 선언과 정의를 연결합니다. 링커는 함수의 선언이 포함된 객체 파일에서 함수 호출을 발견하고, 함수 정의가 포함된 다른 객체 파일에서 이를 찾아 연결합니다.템플릿 함수템플릿 함수의 경우, 상황이 달라집니다. 템플릿은 사용될 때마다 컴파일..

C++ 2024.07.25

Chain of Responsibility 패턴

의도책임 연쇄 패턴은 핸들러들의 체인​(사슬)​을 따라 요청을 전달할 수 있게 해주는 행동 디자인 패턴입니다. 각 핸들러는 요청을 받으면 요청을 처리할지 아니면 체인의 다음 핸들러로 전달할지를 결정합니다. 문제당신이 온라인 주문 시스템을 개발하고 있다고 가정해봅시다. 당신은 인증된 사용자들만 주문을 생성할 수 있도록 시스템에 대한 접근을 제한하려고 합니다. 또 관리 권한이 있는 사용자들에게는 모든 주문에 대한 전체 접근 권한을 부여하려고 합니다.당신은 약간의 설계 후에 이러한 검사들은 차례대로 수행해야 한다는 사실을 깨달았습니다. 당신의 앱은 사용자들의 자격 증명이 포함된 요청을 받을 때마다 시스템에 대해 사용자 인증을 시도할 수 있습니다. 그러나 이러한 자격 증명이 올바르지 않아서 인증에 실패하면 다른..

디자인 패턴 2024.07.25

Proxy 패턴

의도프록시는 다른 객체에 대한 대체 또는 자리표시자를 제공할 수 있는 구조 디자인 패턴입니다. 프록시는 원래 객체에 대한 접근을 제어하므로, 당신의 요청이 원래 객체에 전달되기 전 또는 후에 무언가를 수행할 수 있도록 합니다. 문제객체에 대한 접근을 제한하는 이유는 무엇일까요? 이 질문에 답하기 위하여 방대한 양의 시스템 자원을 소비하는 거대한 객체가 있다고 가정합시다. 이 객체는 필요할 때가 있기는 하지만, 항상 필요한 것은 아닙니다.데이터베이스 쿼리들은 정말 느릴 수 있습니다.당신은 실제로 필요할 때만 이 객체를 만들어서 지연된 초기화를 구현할 수 있습니다. 그러면 객체의 모든 클라이언트들은 어떤 지연된 초기화 코드를 실행해야 하는데, 불행히도 이것은 아마도 많은 코드 중복을 초래할 것입니다.이상적인..

디자인 패턴 2024.07.25

Flyweight 패턴

의도플라이웨이트는 각 객체에 모든 데이터를 유지하는 대신 여러 객체들 간에 상태의 공통 부분들을 공유하여 사용할 수 있는 RAM에 더 많은 객체들을 포함할 수 있도록 하는 구조 디자인 패턴입니다. 문제당신은 재미 삼아 플레이어들이 지도를 돌아다니며 서로에게 총을 쏘는 간단한 비디오 게임을 만들기로 했습니다. 당신은 폭발들로 인한 방대한 양의 총알들, 미사일들 및 파편들이 지도 전체를 날아다니는 전율 넘치는 경험을 플레이어들에게 선사하기로 했으며, 이를 선사하기 위해 사실적인 입자 시스템을 구현하기로 했습니다.당신은 게임을 완성한 후 친구에게 게임을 보냈습니다. 당신의 컴퓨터에서는 게임이 완벽하게 실행되었지만, 당신의 친구는 오랫동안 게임을 즐길 수 없었습니다. 왜냐하면 친구의 컴퓨터에서는 시작 후 고작 ..

디자인 패턴 2024.07.25

Facade 패턴

의도퍼사드 패턴은 라이브러리에 대한, 프레임워크에 대한 또는 다른 클래스들의 복잡한 집합에 대한 단순화된 인터페이스를 제공하는 구조적 디자인 패턴입니다. 문제정교한 라이브러리나 프레임워크에 속하는 광범위한 객체들의 집합으로 당신의 코드를 작동하게 만들어야 한다고 상상해 봅시다. 일반적으로, 당신은 이러한 객체들을 모두 초기화하고, 종속성 관계들을 추적하고, 올바른 순서로 메서드들을 실행하는 등의 작업을 수행해야 합니다.그 결과 당신의 클래스들의 비즈니스 로직이 타사 클래스들의 구현 세부 사항들과 밀접하게 결합하여 코드를 이해하고 유지 관리하기가 어려워집니다. 해결책퍼사드는 움직이는 부분이 많이 포함된 복잡한 하위 시스템에 대한 간단한 인터페이스를 제공하는 클래스입니다. 하위 시스템과 직접 작업하는 것과 ..

디자인 패턴 2024.07.25

Decorator 패턴

의도데코레이터는 객체들을 새로운 행동들을 포함한 특수 래퍼 객체들 내에 넣어서 위 행동들을 해당 객체들에 연결시키는 구조적 디자인 패턴입니다.문제당신이 알림 라이브러리를 만들고 있다고 상상해 보세요. 이 알림 라이브러리의 목적은 다른 프로그램들이 사용자들에게 중요한 이벤트들에 대해 알릴 수 있도록 하는 것입니다.이 라이브러리의 초기 버전은 Notifier​(알림자) 클래스를 기반으로 했으며, 이 클래스에는 몇 개의 필드들, 하나의 생성자 그리고 단일 send​(전송) 메서드만 있었습니다. 이 메서드는 클라이언트로부터 메시지 인수를 받은 후 그 메세지를 알림자의 생성자를 통해 알림자에게 전달된 이메일 목록으로 보낼 수 있습니다. 또 클라이언트 역할을 한 타사 앱은 알림자 객체를 한번 생성하고 설정한 후 중..

디자인 패턴 2024.07.11

Composite 패턴

의도복합체 패턴은 객체들을 트리 구조들로 구성한 후, 이러한 구조들과 개별 객체들처럼 작업할 수 있도록 하는 구조 패턴입니다. 문제복합체 패턴은 앱의 핵심 모델이 트리로 표현될 수 있을 때만 사용하세요.예를 들어 제품들과 상자들이라는 두 가지 유형의 객체들이 있다고 가정해 봅시다. 상자에는 여러 개의 제품들과 여러 개의 작은 상자들이 포함될 수 있습니다. 이 작은 상자들은 또한 일부 제품들 또는 더 작은 상자들등을 담을 수 있습니다.이러한 클래스들을 사용하는 주문 시스템을 만들기로 했다고 가정해 보겠습니다. 주문들에는 포장이 없는 단순한 제품들과 제품들로 채워진 상자들 및 다른 상자들이 포함될 수 있습니다. 그러면 그러한 주문의 총가격을 어떻게 계산하시겠습니까?하나의 주문은 여러 제품으로 구성될 수 있는..

디자인 패턴 2024.07.11