DICOM 태그를 다루면서 종종 간과하는 사실 중 하나가 태그 값의 길이입니다.

 

DICOM 태그 값의 길이는 항상 짝수입니다. 

 

홀수 길이의 DICOM 태그 값에 대한 제한은 짝수 길이 값을 기반으로 하는 DICOM 데이터의 형식 및 구조 때문입니다. 

 

1. 길이가 짝수인 태그 값의 표준화를 통해 DICOM 데이터를 여러 시스템 및 소프트웨어 애플리케이션에서 효율적이고 일관되게 구문 분석하고 처리할 수 있습니다.

2. 모호하거나 호환되지 않는 데이터 형식으로 인해 발생할 수 있는 오류 및 상호 운용성 문제를 방지하는 데 도움이 됩니다.

3. 길이가 짝수인 태그 값을 사용하면 DICOM 데이터를 저장하고 전송하는 프로세스가 간소화됩니다.

4. 데이터를 고정 길이 필드로 보다 효율적으로 압축하고 컴퓨터에서 더 빠르게 처리할 수 있습니다.

 

따라서 이러한 제한은 DICOM내에서 데이터의 효율적이고 일관된 처리를 가능하게 하고 오류 및 상호 운용성 문제를 방지하는 데 도움이 됩니다.

 

 

 

 

 

반응형

 

A second operation was started on this context instance before a previous operation completed. 와 같은 문제가 발생했을 때 해결 방법에 대해 알아봅니다.

 

 

 

원인

 

A second operation was started on this context instance before a previous operation completed. This is usually caused by different threads concurrently using the same instance of DbContext. For more information on how to avoid threading issues with DbContext, see https://go.microsoft.com/fwlink/?linkid=2097913. 와 같은 Exception이 발생합니다.

 

찬찬히 설명을 보면 뭔가 멀티 스레딩 관련 오류인 것을 확인할 수 있습니다. 직접 MSDN 페이지에 들어가 보니 다음과 같은 설명이 쓰여있습니다.

 

Entity Framework Core는 동일한 DbContext 인스턴스에서 실행되는 여러 병렬 작업을 지원하지 않습니다. 여기에는 비동기 쿼리의 병렬 실행과 여러 스레드에서의 명시적 동시 사용이 모두 포함됩니다. 따라서 항상 await 비동기 호출을 즉시 수행하거나 병렬로 실행되는 작업에 대해 별도의 DbContext 인스턴스를 사용합니다.

비동기 메서드를 사용하면 EF Core는 비차단 방식으로 데이터베이스에 액세스 하는 작업을 시작할 수 있습니다. 그러나 호출자가 이러한 메서드 중 하나가 완료되는 것을 기다리지 않고 DbContext에 대해 다른 작업을 계속 수행하면 DbContext의 상태가 손상될 수 있습니다(가능성이 매우 높음).

 

결국 한 콘텍스트가 다른 비동기 호출에 의해 사용되면서 발생한 것으로 확인되었습니다.

 

 

 

수정

 

사실 저는 하나의 단일 콘텍스트를 통해 작업하려고 했기 때문에 DBContext를 AddSingleton으로 등록해 둔 상태였습니다.

 

            IHost host = Host.CreateDefaultBuilder(args)
                .ConfigureServices(services =>
                {
                    services.AddSingleton<DBManager>();
                })
                .Build();

 

위와 같은 설명에 따라 AddSingleton을 AddTransient로 교체해 간단하게 문제를 해결할 수 있었습니다.

 

            IHost host = Host.CreateDefaultBuilder(args)
                .ConfigureServices(services =>
                {
                    services.AddTransient<DBManager>();
                })
                .Build();

 

이제 콘텍스트를 호출하게 되면 호출마다 새로운 인스턴스가 생성되며 발생하던 문제는 해결됩니다.

 

 

 

 

 

반응형

 

 

RabbitMQ에서 VirtualHost(vhost)란 하나의 RabbitMQ 브로커에서 여러 개의 메시지 도메인을 사용할 수 있게 해 주는 논리적 그룹을 의미합니다. 각각의 vhost는 Queue, Exchange, Binding, 권한에 있어서 완전히 분리된 메시징 환경을 가집니다.


vhost는 다른 애플리케이션 유저 또는 부서사이의 메지싱 트래픽을 독립화하고 분리하는 기능을 제공해 줍니다. 기본적으로 RabbitMQ는 브로커 최상단에 위치해 있는 “/”라는 이름의 하나의 vhost를 생성합니다. 하지만 추가적으로 vhost를 메시징 애플리케이션의 요구사항을 충족시키기 위해 필요에 따라 생성할 수 있습니다.

각각의 vhost는 유저나 애플리케이션이 queue로부터 메시지를 소비하거나 교환하거나 발행하는 등과 같은 특정 작업을 수행할 수 있는가를 결정하는 권한들을 갖습니다. 이는 vhost 안에서 메시징 자원에 대한 정교한  컨트롤을 가능하게 합니다.

정리하자면 vhost는 하나의 브로커에서 여러 메시징 도메인을 가능하게 하는 논리적 컨테이너이며 이들 간의 분리와 메시징 트래픽을 컨트롤을 관리 유지 합니다.

반응형

+ Recent posts