전체 글 262

[C++] Memory Pool

메모리 풀 구현 32/64/128/... 바이트 단위로 메모리를 미리 할당하여, 실제 할당할 때 해당 메모리를 사용함. 장점 메모리 단편화 문제를 완화 가능. 특히 사이즈가 큰 메모리를 할당할 때 적절한 위치의 페이지를 찾는 것이 시간이 소요될 수 있다. 단점 사용하지 않는 메모리를 미리 할당하여 사용하게 되는 낭비. 메모리 풀과 같이 특정 할당자(Allocator)를 사용한 경우, 메모리를 반납하여 재사용할 수 있도록 할당자를 통한 해제를 해야한다. std::shared_ptr의 생성자에는 해제자 deleter에 대한 인스턴스를 받아 해제를 제어할 수 있다. std::unique_ptr는 타입으로 선언하여 사용한다. 커스텀 deleter를 사용하는 경우 타입 이름이 지저분해질 수 있다. MemoryHe..

Advanced C++ 2024.03.31

Docker In Action 5. Single-host networking

Docker Network로컬 컴퓨터에 연결된 네트워크는 IP 주소를 통해 인터넷 등의 통신을 가능하게 한다.도커가 만드는 가상 네트워크는 모든 실행 중 인 컨테이너와 로컬 컴퓨터가 연결된 네트워크에 연결한다. Bridge 여러 네트워크가 한 네트워크 처럼 동작하도록 연결하는 네트워크 인터페이스, 징검 다리 역할 도커 네트워크 확인 docker network ls 종류bridge 이름의 네트워크는 bridge 드라이버를 통해 제공되는 네트워크이다. bridge 드라이버는 컨테이너간 연결을 제공한다.host 이름의 네트워크에 있는 컨테이너들은 컨테이너가 아닌 일반 프로그램이 존재하는 호스트 네트워크를 공유한다. none 네트워크는 null 드라이버를 사용하고 해당 네트워크에 있는 컨테이너는 외부와 통신이 ..

Cloud/Docker 2023.10.22

Docker In Action 4. Working with Storage and Volumes

도커 스토리지와 볼륨 Storage and Volumes 파일 트리와 마운트 지점Mount Points는 호스트의 파일 시스템에 대한 루트 경로를 기준으로 데이터를 접근할 수 있는 지점을 제공한다.이러한 마운트 지점은 사용자로 하여 리눅스 환경에서의 원본 맵핑이 어떻게 되든 알 필요 없이 호스트 시스템의 파일 트리를 사용할 수 있게 해준다. 도커는 컨테이너 생성 시 MNT namespace와 유일한 파일 시스템의 루트를 제공한다.이러한 방식으로 호스트 파일 시스템으로 부터 컨테이너에서 실행되는 환경으로의 마운트 지점을 제공하여 컨테이너에게 스토리지 접근을 가능하게한다. 도커 마운트 타입도커의 마운트 타입은 3가지로 나뉜다.Bind mountsIn-memory storageDocker volumes예시)도..

Cloud/Docker 2023.10.19

Docker In Action 3. Software Installation Simplified

소프트웨어 식별하기 Named Repository 이름을 가진 저장소image를 모아둔 저장소. 이미지 저장소에 대한 주소는 위 예시 처럼 url 형식으로 표현된다.registry가 공개된 Docker Hub를 가리킬 경우 예시로 docker.io 호스트 이름을 가진다.{RegistryHost}/{UserName}/{ShortName}:{Tags} Tags각 이미지에 대한 빌드 태그(이름), git의 브랜치처럼 특정 기능 혹은 날짜에 대한 별칭을 의미.latest라는 특별 태그는 항상 최신으로 빌드된 이미지를 뜻 함.ex) nginx:latest 어디서 설치 하는가Repositories는 Registry에서 검색하여 이미지를 확인하고 설치할 수 있다.Docker Inc에서 관리하는 Docker Hub는 ..

Cloud/Docker 2023.10.16

Docker In Action 2. 도커 컨테이너에 실행하기

도커 컨테이너에 실행하기도커 명령어 docker help도커 명령어 리스트와 간단한 설명을 보여준다.Common Commands : run, exec, ps, build, pull, pushManagement Commands: builder, compose, container, image, networkSwarm Commands: swarmCommands: attach, commit, cp, create, diff, kill, start, stopdocker help cp자세한 명령어 사용법을 알 수 있다.웹 사이트 모니터 구축 예제웹 서버 nginx, 메일 전송 담당하는 mailer 그리고 이 두 어플리케이션을 모니터링하는 watcher 시스템을 구축해본다.nginx 웹 서버 : 80 port를 사용하..

Cloud/Docker 2023.10.15

Docker In Action 1. 도커 소개

Docker프로그램을 빌드에서 배포, 실행까지 편하게 실행할 수 있는 오픈 소스 프로젝트 docker run dockerinaction/hello_world 예시의 docker run 명령어는 다음을 실행한다.1. "dockerinaction/hello_world" 이미지를 찾는다.2. 로컬에 이미지가 설치되어 있지 않다면, Docker Hub라는 공용 이미지 보관소에서 해당 이름에 해당하는 이미지를 찾는다.3. 로컬로 이미지를 다운로드 한다.4. 컨테이너를 새로 실행하고 이미지에 명시된 프로그램을 실행한다. *Docker Hub는 Docker Inc.에 의해 제공되는 공개 레지스트리 (이미지 보관소)  도커의 컨테이너화실행되는 프로그램과 시스템 자원을 컨테이너로 제한 및 보호.일반적인 프로그램 실행CL..

Cloud/Docker 2023.10.15

[C#] Provider(공급자) - Observer(관찰자) 패턴

Provider - 이벤트를 발생시키면서(제공하면서) Observer를 관리하는 개체 자신이 관리하고 있는 Observer에 대하여 Subscribe하는 방법을 갖고 있고 이벤트 발생 함수를 invoke 한다. Observer - Provider가 발생시키는 이벤트를 구독한다. Observer는 Provider에 Subscibe 함수로 구독을 실행하고 그 반환 Unsubscribe 클래스 개체를 소유한다. Observer는 원할 때 Unbsubscribe 개체 인스턴스를 이용하여 구독을 취소한다. C# Provider는 IObserable 인터페이스를 구현한다. public interface IObservable { IDisposable Subscribe(IObserver observer); } IDis..

[단위 테스트] 데이터베이스 테스트

통합 테스트에서 중요한 의존성으로 취급되는 데이터베이스를 효과적으로 테스트하는 방법을 알아본다. 통합 테스트를 위한 데이터 베이스 준비 - 개발을 위한 데이터 스키마 관리 데이터베이스 스키마는 버전별로 항상 형상관리에 저장되어야 한다. - 데이터베이스 배포 방식 상태 기반 데이터 베이스 배포 방식 vs 마이그레이션 기반 데이터 베이스 배포 방식 상태 기반 방식 개발 내내 관리 되는 모델 데이터베이스가 존재. 배포 중 비교 도구가 스키마 차이를 인식하여 차이에 대한 업데이트를 운영 데이터베이스에 적용하기 위한 스크립트를 만들어낸다. 비교 도구는 불필요한 테이블을 삭제하고 새 테이블을 생성하고 컬럼명을 바꾸는 등 모델 데이터베이스와 동기화하는데 필요한 작업을 수행한다. 마이그레이션 기반 방식 데이터베이스 기..

[단위 테스트] 목 활용하기

테스트 대상 시스템과 외부 의존성간 상호작용을 검증하기 위해 사용되는 목 활용 모범 사례를 알아본다. CRM 예제에서 목의 사용 TEST(TestUserController, 통합_테스트_이메일_변경_사내도메인에서_외부도메인으로) { // given auto db = new Database(string("connection")); auto insertUser = User::CreateUser("user@mycorp.com", UserType::Employee); auto insertCompany = Company::CreateCompany("mycorp.com", 1); db->SaveUser(insertUser); db->SaveCompany(insertCompany); auto messageBusMoc..