전체 글 262

[C++] Memory Pool

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

C++/Advanced C++ 2024.03.31

Docker In Action 5. Network Exposure

Docker Network Bridging 두 분리된 네트워크간 통신이 가능하도록 징검 다리 역할을 하는 네트워크 도커는 호스트 네트워크와 컨테이너 혹은 컨테이너 간의 네트워크를 연결하는 docker0 이름의 Bridge 네트워크를 사용한다. 도커 네트워크 구조 각 컨테이너는 개인 loopback 주소와 각 컨테이너마다 할당된 네트워크와 연결되어 있는 ethernet 인터페이스를 갖는다. 각 컨테이너는 고유의 IP 주소를 할당받으며 외부로 공개되지 않는다. 각 컨테이너는 또한 도커 bridge 네트워크 인터페이스와 연결되고 도커 bridge는 host의 네트워크 인터페이스에 연결되어 있다. 4 가지 컨테이너 네트워크 타입 Closed containers 외부로 부터 닫힌 컨테이너 Joined contai..

카테고리 없음 2023.10.22

Docker In Action 4. Volumes

Volumes 호스트 파일 시스템의 일부 경로를 컨테이너의 파일 시스템 루트 경로로 마운트 한 지점. 이미지에 따른 union file system은 이미지 마운트 지점을 제공하지만 이미 경로와 내용이 이미지 레이어에 의해 결정되므로 제약이 있다. 볼륨 volume은 union file system이 마운트한 지점의 루트 경로로 마운트하여 호스트의 파일 시스템을 사용 가능하게 한다. 컨테이너에서 실행되는 프로그램은 이미지 레이어의 파일 시스템 경로와 볼륨으로 마운트된 파일 시스템 경로를 사용할 수 있게 된다. 기본적으로 볼륨은 여러 컨테이너 간에 공유될 수 있는 데이터 저장소 기능을 갖는다. 볼륨은 외부에서 주입하는 특성 때문에 어플리케이션에서 파일 시스템을 컴포넌트로 분리하여 프로그램 실행 부분과 데이..

카테고리 없음 2023.10.19

Docker In Action 3. Software Installation Simplified

이미지를 어떻게 확인하는 가 How do I identify software? Repository Repository란 image를 모아둔 저장소. 이미지 저장소에 대한 주소는 위 예시 처럼 url 형식으로 표현된다. {RegistryHost}/{UserName}/{ShortName}:{Tags} Tags 각 이미지에 대한 빌드 태그(이름), git의 브랜치처럼 특정 기능 혹은 날짜에 대한 별칭을 의미. latest라는 특별 태그는 항상 최신으로 빌드된 이미지를 뜻 함. 이미지를 어디서 설치하는 가 Where do I find sofware to install? Repositories는 Registry에서 검색하여 이미지를 확인하고 설치할 수 있다. Docker Inc에서 관리하는 Docker Hub는 ..

카테고리 없음 2023.10.16

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

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

카테고리 없음 2023.10.15

Docker In Action 1. 도커 소개

컨테이너 기반의 도커 도커 컨테이너 Command Line으로 실행되는 프로그램(1.1)과 도커가 각각의 프로그램을 컨테어너화(1.2)하여 실행하는 방식 - 도커는 도커 백그라운드 서비스 (docker daemon) 과 인터렉션이 가능한 CLI 툴 (docker CLI)를 제공 - 각 컨테이너는 도커 서비스의 자식 프로세스로 실행, 각 컨테이너는 고유의 메모리 영역과 자원을 할당 받음. - 도커 컨테이너는 크게 8개 파트로 isolated 구분될 수 있다. + PID namespace : 프로세스 구분자와 가용성 + UTS namespace : Host와 도메인 이름 + MNT namespace : 파일 시스템과 구조 + IPC namespace : 프로세스 간 통신 (공유 메모리) + NET names..

카테고리 없음 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..