본문 바로가기

Develop

[코딩인터뷰] 문제 5.3
[코딩인터뷰] 문제 5.2
[코딩인터뷰] 문제 5.1
[Spring] 빈 Bean 빈 Bean Bean 은 Spring framework 에서 앱을 구성하는 기본적인 객체입니다. 개발자는 Bean 을 정의하고 활용하고, Container 는 개발자가 정의한 Bean 을 객체로 만들어 관리하고 개발자가 필요로 할 때 제공합니다. 따라서 개발자는 Bean 을 어떻게 정의하고 사용하는지 알고 있어야만 Spring framework 를 사용할 수 있습니다. // Bean 은 Annotations 로 쉽게 정의할 수 있다. @Bean public RestTemplate restTemplate(RestTemplateBuilder builder) { return builder.build(); } Bean 은 기본 객체이기 때문에 무엇이든지 가능합니다. 다만 Bean 은 BeanDefinition ..
[Spring] 컨테이너 Container 컨테이너 Container Container 는 Spring 의 핵심입니다. Container 는 개발자를 대신하여, Bean 을 생성 / 관리 / 제거합니다. Container 가 Bean 을 관리해주기 때문에, 개발자는 모듈 간에 의존 및 결합으로 인해 발생하는 문제로부터 자유로워 졌습니다. 아래와 같이 독립적인 코드를 작성해서 Annotaion 만 남겨주면 Container 가 개발자가 원하는 상황에 코드를 실행합니다. 따라서 개발자는 메서드가 언제, 어디서 호출되어야 하는지 그리고 메서드를 호출하기 위해 필요한 매개 변수를 준비해서 전달하지 않습니다. Container 가 개발자 대신 알아서 호출합니다. @GetMapping("/greeting") public Greeting greeting(@R..
[C#] 병렬 프로그래밍 Parallel Programming (4) - 데이터 흐름 예제 데이터 흐름 예제 기초 예제 아래 예제는 비동기로 BufferBlock 데이터 흐름 블록에 데이터를 입력했다가 출력하는 예제입니다. var bufferBlock = new BufferBlock(); // bufferBlock 에 비동기로 데이터 넣기 for (int i = 0; i < 3; i++) { await bufferBlock.SendAsync(i); } // bufferBlock 에 비동기로 데이터 빼기 for (int i = 0; i < 3; i++) { Console.WriteLine(await bufferBlock.ReceiveAsync()); } /* 결과: 0 1 2 */ 아래 예제는 병렬로 데이터 흐름 블록에 데이터를 입력했다가 출력하는 예제입니다. var bufferBlock = n..
[C#] 병렬 프로그래밍 Parallel Programming (3) - 데이터 흐름 데이터 흐름 데이터 흐름은 프로그래밍 패러다임이 다른 병렬 프로그래밍입니다. 일반적으로 배우는 프로그래밍 언어는 코드로 절차를 정의하고 실행해 결과를 만듭니다. 절차는 메서드로 구현되고 메서드의 실행 순서에 따라 프로그램이 동작합니다. 반면, 데이터 흐름은 절차가 아닌 데이터가 중심입니다. 데이터 중심이란 데이터로 프로그램의 동작을 정의하게 되는걸 의미합니다. 데이터 흐름에서 프로그램은 필요한 데이터를 준비시키고, 데이터가 준비되어야 다음 연산을 실행합니다. 다시말해 프로그램은 데이터가 준비되어야만 진행됩니다. 예를 들어 여러 이미지를 합성해 하나의 이미지로 만드는 프로그램은 소스가 되는 이미지들이 준비되었는지를 먼저 확인합니다. 소스 이미지들이 준비되었으면 프로그램은 이미지를 합성하는 연산을 진행합니다..
[C#] 병렬 프로그래밍 Parallel Programming (2) - 작업 병렬화 작업 병렬화 Task Parallelism 작업 병렬화는 일반적으로 생각하는 병렬 처리를 방식입니다. 작업 병렬화는 데이터 병렬화와 달리, 데이터마다 동일한 처리를 하는 방법이 아닌, 독립적인 작업들을 동시에 처리하는 방식입니다. 데이터 병렬화와 마찬가지로 작업 병렬화도 TPL 이 개발자를 대신하여 스레드를 관리합니다. 따라서 개발자는 병렬 프로그래밍을 Parallel.Invoke 메서드를 사용해 아래와 같이 손쉽게 구현할 수 있게 되었습니다. Parallel.Invoke(() => DoSomeWork(), () => DoSomeOtherWork()); 예제 코드는 Parallel.Invoke 메서드로 DoSomeWork() 과 DoSomeOtherWork()을 병렬로 처리하고 있습니다. 코드의 내부 동..