brunch

큐비즘 : 다각적 관점과 병렬 처리

다각적 관점과 병렬 처리

by jeromeNa

평일 바쁜 아침의 일상을 보자. 일어나서 물컵에 물을 따르고, 양치를 하면서 스마트폰으로 시간을 확인한다. 아침을 먹으면서 가방을 챙기고, 가족과 간단한 대화를 나누고 바로 문밖으로 나간다. 이 모든 것이 짧게는 10분, 길어도 30분 내에는 이루어지는 상황이다. 각 작업들을 기다리지 않고 동시에 이루어지는 행위를 멀티스레딩이라고 한다. 하나의 '나'라는 시스템이, 여러 작업을 동시에 수행하고 있는 것이다.


프로그램도 마찬가지이다. 하나의 작업을 끝날 때까지 기다린 후 다음 작업이 실행이 된다면, 실행이 완료될 때까지 기다리다 백발의 노인이 될 수도 있을 것이다. 예를 들어 티켓이나 맛집을 갈 때 긴 줄을 기다리는 건 일상이 되어버렸다. 특히 자리가 협소하다면 몇 시간은 감당해야 한다. 이런 상황이 앱에서 일어난다면 어떻게 될까? 멀티스레드가 되어 있지 않다면, 주문을 넣는 데만도 몇 시간을 기다려야 한다. 서버가 폭주한다면 대기 인원으로 기다리라는 문구가 뜰 수도 있지만, 서버가 폭주하지 않는 한 주문하나 넣기 위해 몇 시간을 기다리는 건 앱을 사용하지 말라는 의미다.


스레드(thread)라는 의미는 프로세스 내부에서 실행되는 작업 단위를 말한다. 프로세스는 하나의 프로그램에서 수행하는 절차라고 이해하면 된다. 하나의 프로그램(=프로세스)은 하나 이상의 스레드(thread)를 가질 수 있고, 각 스레드는 코드를 실행하고 작업을 수행한다. 멀티스레드(Multithreading)는 이런 스레드가 두 개 이상 실행하는 것을 말한다.


병렬처리(Parallel Processing)는 하나의 작업을 여러 개의 CPU나 코어를 활용해 동시에 처리하는 방식이다. CPU는 하나에 한 작업만 처리하는 직렬 방식이다. 하나의 작업이 끝나면 다음 작업을 실행하고 그다음 작업은 대기한다. 직렬로 처리하면 예상되듯이 느려진다. 작업을 여러 개로 나누어 각 코어에서 동시에 처리하고 병합하면 빠른 처리가 가능하다. (GPU는 태생부터가 병렬처리이기에 AI, 그래픽 등에 많이 사용된다.)


멀티스레드, 병렬처리 등은 시스템 처리속도에 해당하지만, 프로그래밍도 이에 준하게 코딩해야 한다.


Thread thread = new Thread(() -> {
System.out.println("비동기 작업 수행 중...");
});
thread.start();
System.out.println("메인 스레드는 계속 실행됨");


앞서 ‘인상주의’ 때 언급했던 비동기 처리도 멀티스레드에 해당한다. 위 코드에서는 thread를 start() 시킴과 동시에 메인으로 흘러가는 코드도 동시에 처리한다.


List<String> names = Arrays.asList("Anna", "Ben", "Chloe", "David");
names.parallelStream().forEach(System.out::println);


parallelStream은 병렬처리하라는 함수이다. names라는 배열의 값들을 병렬로 처리해서 프린트한다. ‘anna’, ‘ben’.. 이렇게 차근차근 나오는 게 아닌 한 번에 모든 값을 프린트 처리한다고 생각하면 된다.


ExecutorService executor = Executors.newFixedThreadPool(4);

Future<Integer> task1 = executor.submit(() -> computeA());
Future<Integer> task2 = executor.submit(() -> computeB());
Future<Integer> task3 = executor.submit(() -> computeC());

int result = task1.get() + task2.get() + task3.get();


executor라는 하나의 객체를 동시에 여러 번 실행하고, 그 결과를 하나의 화면(출력)에 병렬적으로 출력한다.




19세기 후반 사진술의 발달은 현실을 있는 그대로 재현하는 기능을 회화로부터 앗아갔다. 회화는 ‘진짜처럼 그리는 것’이 아닌, ‘어떻게 그릴 것인가’에 대한 탐구로 변화하게 된다. 같은 시기 과학계는 상대성 이론, 심리학, 철학적 다원주의로 전환되는 시기로 사고방식이 전환되는 시기였다.


인상주의는 ‘순간의 빛’, 후기 인상주의는 ‘그림의 의미 부여’를 하지만, ‘보는 방식 자체’의 인식 전환을 하게 된다. 1907년 파블로 피카소의 《아비뇽의 처녀들》를 기점으로 큐비즘(Cubism)이 태동하게 된다.


파블로 피카소, <아비뇽의 처녀들 (Les Demoiselles d’Avignon)>, 1907, Oil on canvas, MoMA


피카소는 1906~1907년경 파리 민족박물관에서 본 아프리카 가면과 조각에서 큰 영감을 받는다. 이 원시 예술은 자연주의적 재현이 아니라, 형태의 상징적 왜곡을 통해 본질을 드러내고, 이에 영향을 받아 태어난 것이 바로 《아비뇽의 처녀들》이다.


다섯 명의 여성 누드 인물을 그린 이 작품은 전통적인 구도와 인체 표현을 파괴하며, 특히 인물들의 얼굴 일부는 아프리카 마스크와 이베리아 조각에서 영향을 받았다. 한 화면에 여러 시점을 병렬적으로 배치함으로써 현실 인식의 다층성을 표현했다.


조르주 브라크, <만돌린을 든 여인 (Woman with a Mandolin)>, 1910, Oil on canvas, 스위스 바젤 미술관


작품에서 인물과 악기의 형태가 기하학적 평면으로 분해되어 재구성하여 입체감이 제거되고, 색채는 거의 단색에 가까우며 오직 구조와 리듬으로 구성했다.


조르주 브라크(Georges Braque)는 피카소와 함께 큐비즘(Cubism)을 공동 창시한 인물이다. 피카소가 종종 “폭발”처럼 느껴진다면, 브라크는 “구조”와 “음악”으로 분석적이고 구조적인 접근을 한다.


또한 1912년경 종이, 나뭇결 무늬, 신문지 등을 실제로 붙이는 파피에 콜레 (papier collé) 기법을 발명, 콜라주를 창안하여 회화가 단순히 보는 것이 아닌, 조합하고 구성하는 매체임을 선언한 작업을 했다.




큐비즘은 단순한 ‘스타일’이 아니라 ‘보는 방식 자체를 문제 삼고, 다시 조립하는 사고방식’이다. 예술은 시선을 분해하고, 프로그래밍은 병렬처리로 작업을 분할하고, 조합한다. 하나의 작업 흐름은 더 이상 존재하지 않는다. 수많은 작은 흐름들의 합으로 하나의 세계를 ‘조립’하고 있는 것과 같다.



keyword