전체 글

전체 글

    [More Effective C#] Chapter 4. 요약 (2)

    [ Item 40 : 동기화에는 lock()을 최우선으로 사용하라 ]스레드들은 서로 통신할 수 있어야 한다.즉, 같은 애플리케이션에 속한 스레드들은 데이터를 안전하게 주고받을 수 있는 수단이 있어야 한다. 데이터 무결성 오류로 인한 잠재적 문제를 피하려면 모든 공유 데이터의 상태가 일관되게 유지되고 있음을 확신할 수 있어야 하고, 그렇게 하려면 동기화 요소(synchronization primitive)를 사용해서 공유 데이터에 대한 접근을 제어해야 한다. 동기화 요소는 특정 스레드가 임계 영역 내에서 연산을 수행하는 동안 다른 스레드로부터 이를 보호하는 역할을 수행한다.그래서 C# 에서는 동기화 작업을 수월하게 할 수 있도록 lock() 블록을 사용해서 임계 영역을 지정하고, 동기화를 올바..

    [More Effective C#] Chapter 4. 요약 (1)

    [More Effective C#] Chapter 4. 요약 (1)

    [ Item 35 : PLINQ가 병렬 알고리즘을 구현하는 방법을 이해하라 ] PLINQ 를 사용하면 멀티코어 프로그래밍에 쉽게 접근할 수 있다. 데이터 접근을 위해 언제 동기화돼야 하는지 알아야 한다. ParallelEnumerable에 선언된 병렬 버전과 순차 버전 메서드의 효과를 측정해야 한다. 개별 요소들을 반드시 순차적으로 접근해야만 하는 메서드가 있다는 것을 알아야 한다. PLINQ를 사용하는 예시 150 보다 작은 모든 수에 대해 n! 을 계산하는 쿼리 var nums = data.Where(d => d Factorial(n)); 파이프라인의 첫 번째 메서드에 AsParallel()을 추가하면 병렬 연산이 가능해진다. var nums = data.AsPara..

    [More Effective C#] Chapter 3. 요약 (2)

    [ Item 31 : 불필요한 콘텍스트 마샬링을 피하라 ] 현재 아이템은 SynchronizationContext와 관련된 성능 문제를 다룬다. 특히, 멀티스레딩 환경에서 특정 Context로의 데이터 전달이나 메서드 호출이 필요할 때 발생하는 마샬링 오버헤드를 최소화하는 방법을 집중해서 다룬다. ‘자유 코드’ 어떤 context에서도 실행될 수 있는 코드 우리가 작성하는 대부분의 코드는 자유 코드이다. ‘Context 인식 코드’ 특정 SynchronizationContext 에서만 실행될 수 있는 코드 GUI 애플리케이션에서 UI 컨트롤과 상호작용하는 코드 웹 애플리케이션에서 HTTPContext 등의 클래스와 상호작용하는 코드 콘텍스트 마샬링이란? 하나의 스레드에서 다른 스레드로 데이터를 전달하거나..

    [More Effective C#] Chapter 3. 요약 (1)

    [ Item 27 : 비동기 작업에는 비동기 메서드를 사용하라 ] 동기 메서드에서는 코드들이 작성한 순서대로 실행된다. 하지만 비동기 메서드에서는 꼭 그렇지 않을 수 있다. 비동기 메서드는 내부 코드를 모두 수행하기 전에 미리 반환될 수 있으며, 내부적으로 요청한 비동기 작업이 완료되는 시점에 맞추어 수행을 중단했던 지점부터 다시 수행을 이어간다. private async Task SomeMethodAsync() { Console.WriteLine($"Entering {nameof(SomeMethodAsync)}"); var awaitable = SomeMethodReturningTask(); Console.WriteLine($"In {nameof(SomeMethodAsync)}, before the a..

    [More Effective C#] Chapter 2. 요약 (2)

    [ Item 19 : 베이스 클래스에 정의된 메서드를 오버로드해서는 안된다 ] 베이스 클래스에서 정의된 메서드를 파생 클래스에서 오버로드하면 어떤 메서드가 호출될지 정확히 이해하기가 어려워진다. 1. 명확한 메서드 이름을 사용한다 해당 기능을 명확하게 설명하는 이름을 지어주자. 2. 오버라이딩을 통해 기능을 확장한다 기존 메서드의 기능을 수정하거나 확장해야 할 때는, 오버라이딩을 사용하자. 3. 메서드 오버로딩 최소화 베이스 클래스의 메서드와 동일한 이름을 가진 새로운 메서드를 추가할 필요가 있을 때는, 혼란을 피하기 위해 가능한 한 메서드 오버로딩을 피하고 다른 이름을 지어주자. [ Item 20 : 이벤트가 런타임 시 객체 간의 결합도를 증가시킨다는 것을 이해하라 ] 이벤트 기반 API에는 결합도를 ..

    [More Effective C#] Chapter 2. 요약 (1)

    [ Item 11 : API에는 변환 연산자를 작성하지 말라 ] 1. 다른 타입을 원하는 커스텀 타입으로 변환하고 싶을 때는 생성자를 사용하라. 생성자는 새로운 객체를 만든다는 사실을 명확히 알려준다. public class Circle { ... static public implicit operator Ellipse(Circle c) { return new Ellipse(...) } } public static void Flatten(Ellipse e) { e.r1 /= 2; } var c = new Circle(...); Flatten(c); // Circle -> Ellipse 로 암묵적 변환 따라서 위와 같은 상황에서 Flatten() 함수는 암묵적 변환 과정에서 새롭게 생성된 Ellipse 객체..

    [More Effective C#] Chapter 1. 요약

    [ Item 1 : 접근 가능한 데이터 멤버 대신 속성을 사용하라 ] public 필드 대신 프로퍼티를 사용하도록 권장한다. 실제로 .NET 프레임워크의 데이터 바인딩 클래스들은 public 필드 대신 프로퍼티에 대해서만 동작한다. 예를 들어 WPF의 INotifyPropertyChanged, 윈폼 등에 포함된 모든 데이터 바인딩 라이브러리가 그렇다. Java에서는 getter, setter 메서드를 만드는 것 처럼(lombok을 쓰지만..) C# 에서는 { get; set; } 키워드로 간편히 설정할 수 있다는 게 비슷한 점이라고 생각된다. OOP 에서의 캡슐화에 큰 도움이 된다. 프로퍼티는 메서드로 구현되기에 멀티스레딩 환경도 쉽게 지원할 수 있고, Virtual 으로도 설정해줄 수 있다. 멀티스레딩..

    [클라우드 네이티브 패턴] 2. 안정성 패턴

    [클라우드 네이티브 패턴] 2. 안정성 패턴

    안정성 패턴이란? 분산 애플리케이션이 자신의 안정성이나 자신이 속한 시스템의 안정성을 높이는 데 사용되는 패턴이다. 서킷 브레이커(Circuit Breaker) 개요 직역하면 회로 차단기라고 할 수 있다. 퓨즈와 같이 과부하, 누전 등으로 전기 회로를 보호하는 안전장치다. 분산 컴퓨팅 시스템에서의 서킷 브레이커도 동일한 기능을 의미하는 패턴이다. 앞으로도 계속 언급되겠지만 분산된 클라우드 네이티브 시스템은 에러와 실패를 피해갈 수 없다. 서비스는 잘못 설정될 수 있고, 데이터베이스는 망가질 수 있으며 네트워크는 끊어질 수 있다. 내가 만든 애플리케이션에서 사용하는 의존성이 언제든 망가질 수 있다는 가정하에서 서비스를 디자인해야 한다. 그래서 의존성이 망가지는 상황에서 실패를 감지하고 '서킷'을 임시로 개..

    [클라우드 네이티브 패턴] 1. Context 패키지

    [클라우드 네이티브 패턴] 1. Context 패키지

    Go를 이용한 클라우드 네이티브 애플리케이션 레이어 구현과 패턴을 정리하는 시리즈의 시작 앞으로 다룰 많은 예제들은 Go언어에서 제공하는 Context 패키지를 사용하게 되므로 가장 먼저 정리해보려 한다. Go 1.7 버전에서 처음 소개된 이 패키지는 프로세스 간 종료 시점, 취소 신호 및 요청 범위 값을 전달하기 위한 관용적인 수단을 제공한다. 1. Context 구성 type Context interface { // Done 메서드는 Context가 취소되었을 때 닫힌 채널을 반환합니다. Done()

    Docker 각티슈 케이스 - docker container

    Docker 각티슈 케이스 - docker container

    예전에 한창 도커에 재미를 붙이고 공부할 때 썼던 글 덕분에 도커 관련 제품을 협찬받았습니다ㅋㅋㅋㅋ 각티슈 케이스이고 쉽게 조립할 수 있는 제품이에요! 제 블로그 아이콘도 도커인만큼 사무실 책상에도 도커 한마리가 생겼네요! 계속 눈이 갑니다ㅎㅎ 다시 데브옵스 공부를 해야하나... 담에 쿠버네티스 굿즈도 나오면 좋겠네요ㅎ 오랜만에 컨테이너나 하나 띄우러 가겠습니다~ https://incatos.shop/surl/O/11 좋은 상품 제공해주신 인카토스 감사합니다~~