본문 바로가기

새소리

관심사란 무엇일까?

이미지 출처: Unsplash에서 찾은 Vahid Moeini Jazani님의 작품

 

1. 관심사

 

"관심사에 따라 분리하세요."

 

낯설지 않은 문장에서 정말 익숙한 향기가 난다. 개발을 공부하다 보면 자주 듣는 말이다. 귀에 딱지가 얹힌 사람도 있을 지 모른다. 하지만 나는 관심사 분리라는 말을 이해하기 힘들었다. 어느 날 문득 이런 생각이 들었기 때문이다. 관심사라는 게 도대체 뭘까? 개발에서 쓰는 관심사라는 말과 내가 알고 있던 관심사 사이의 괴리가 심하다고 느꼈다. 가장 큰 차이는 범위의 문제였다.

 

예를 들어 보자. 나의 관심사라고 하면 여러 가지가 있다. 프론트엔드 개발자를 꿈꾸는 사람으로서 개발 쪽 이야기가 내 관심사임은 당연하다. 하지만 이런 것들은 어떨까? 나는 피아노, 비올라에는 관심이 있다. 하지만 콘트라베이스에는 관심이 없다. 시창(악보를 보고 악기 없이 정확한 음으로 따라 부르는 것)에는 관심이 없지만 청음(곡을 듣고 악보에 옮길 수 있게 음을 맞추는 것)에는 관심이 있다. 정말 뜬금없지만 마작도 내 관심사에 속한다. 네이버 웹툰은 내 관심사에 속하지만 카카오페이지 웹툰은 아니다. 네이버 웹툰 안에서도 관심 있는 것과 없는 것으로 다시 나눌 수도 있을 것이다. 쉽고 편하고 적당히 먹을만 한 도시락에는 관심이 있지만 매일 아침 일찍 일어나서 만드는 사랑이 들어간 정성스러운 도시락에는 관심이 없다. 자기계발서에는 관심이 없지만 소설은 좋아한다.

 

이제 이러한 관심사를 묶어서 라는 컴포넌트를 만든다고 생각해 보자. 이게 과연 개발이라는 관점에서 잘 만든 컴포넌트일까? 나는 아니라고 본다. 그럼에도 불구하고 이렇게 관심사에 따라 분리한 사람들을 데리고 세상이라는 프로그램을 만든다. 당연히 혼날 수밖에 없다. 관심사의 범위가 너무 넓다. 겹치는 사람들도 너무나 많다. 그렇다고 또 다 겹치는 건 아니다. 나는 이래서 관심사 분리라는 말을 이해할 수 없었다. 위키피디아에 물어봐도 컴퓨터 과학에서 관심사는 컴퓨터 프로그램의 코드에 영향을 미치는 특정한 정보 집합이다같은 알 수 없는 대답이 돌아올 뿐이었다.

 

 

2. 역할과 책임

 

하나의 함수는 하나의 역할만

 

이 말은 우아한테크코스에서 많이 들었다. 솔직하게 말하면 나는 이 역할과 책임에 따른 분리가 무엇인지는 어느 정도 이해했다. 시계의 역할은 현재 시간을 보여주는 것이고, 잘 만든 시계라면 그래야만 한다는 책임을 가지고 있다. 역할과 책임에 따라 나누면 그 나눠진 하나 당 하나의 역할이라는 일대일 대응이 성립한다. 굉장히 직관적이다.

 

 

3. 관심사에 따른 분리

 

다시 관심사의 문제로 돌아와 보자. ‘관심사역할과 책임은 어떤 연관이 있을까? 관심사 안에 있는 개별적인 친구들을 관심 대상이라고 부르겠다. 이 관심 대상은 하나의 역할을 한다고 불 수 있다.

 

피아노라는 관심 대상을 생각해보자. 물론 이 관심 대상은 피아노 곡 연주, 피아노 곡 듣기, 아니면 존 케이지의 특이한 연주(?)처럼 더 다양하게 나눌 수 있다. 하지만 여기에서는 뭉뚱그려서 피아노를 연주하는 것이라 부르기로 하자. 내가 이걸 함수로 만든다면

playThePiano(musicName);

처럼 하나의 역할을 할 수 있는 함수로 쓸 것이다. 이러한 맥락에서 관심사란 관심 대상의 집합이고, 관심 대상은 하나의 역할과 책임을 지닌 것이라는 생각이 들었다.

 

결국 관심사에 따른 분리는 이렇게 표현할 수 있을 것 같다. 칠판에 어지러이 붙인 역할과 책임이라는 자석들 사이를 누비는 분필. 이렇게 내가 하안 분필로 그은 선은 내 관심사가 된다. 다른 사람이 다른 색의 분필로 그은 선은 네 관심사가 된다. 내가 너무 복잡하게 생각했었다. 범위의 문제? 그건 세상하나의 어플리케이션을 비교했으니 당연히 나는 거였는데. 세상의 오만 가지 것들을 다 고려하면 전혀 뜬금없어 보이는 애들이 묶일 수밖에 없었다. 프로그램은 대개 몇 가지의 좁은 목적만을 가진다. 그 안의 관심 대상들은 어느 정도 그럴싸한 관련성을 지닐 수밖에. 너무 크게 본 내 잘못이다.

 

 

4. 횡단 관심사

 

하지만 아직 해결되지 않은 문제가 있다. 프로그램의 각 요소들이 본인의 관심사대로 선을 긋는다면 겹치는 부분이 생긴다. 또 예를 들어보겠다. 이번에는 피아니스트와 비올리스트다. 피아니스트가 하나의 클래식 작품을 연주하는 과정을 내 맘대로 나눠보면 1) 악보 읽기 2) 곡 해석하기 3) 피아노로 표현하기 가 된다. 비올리스트도 비슷하게 1) 악보 읽기 2) 곡 해석하기 3) 피아노로 표현하기 로 나눌 수 있다. 물론 피아노랑 비올라는 악보 차이가 있고 연주자마다 해석 방식에도 차이가 있다. 하지만 지금은 프로그램을 짜는 얘기를 하는 거니까 이런 건 무시하도록 하자. 피아니스트와 비올리스트의 관심사 중에서 두 가지 관심 대상이 완벽하게 겹친다! 이게 횡단 관심사다.

 

나는 예전에 횡단 관심사과 관심사 사이의 연관성을 찾지 못했다. 왜냐하면 내가 생각하던 관심사는 횡단 관심사와는 직교하는 방향이라 연관성이 아예 없게 느꼈기 때문이다. 이제는 알겠다. ‘횡단에 홀리면 안 된다. 횡단 관심사는 그냥 교집합이다. 물론 악보 읽기나 곡 해석하기처럼 그 안에서 순서는 있을 수 있지만 결국엔 교집합이다. 프로그램은 사람이 아니고 현실이 아니니까 같은 악보 읽기여도 문제는 없다. 하나의 코드로 돌려막기를 할 수 있는 셈이다. 이런 횡단 관심사를 decorator같은 기법으로 분리하는 게 횡단 관심사 분리였던 것이다.

 

 

5. 마치며

 

결국 관심사는 내가 알던 관심사가 맞았다. 문제는 관심(關心)에서 심()에 너무 집중했다는 것이었다. “같은 주제라도 나랑 너는 다른데 이걸 분리하기에는 같은 주제고 합치기에는 다르다라는 생각에 사로잡혀 있었다. 아직 기계는 마음이 없는데. 너무 인간 중심적으로 생각해서 빙빙 맴돌았다.

 

 

6. 읽어볼 만한 글

 

https://ko.wikipedia.org/wiki/%EA%B4%80%EC%8B%AC%EC%82%AC_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)#

 

관심사 (컴퓨터 과학) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 컴퓨터 과학에서 관심사(concern)는 컴퓨터 프로그램의 코드에 영향을 미치는 특정한 정보 집합이다. 관심사는 데이터베이스 상호작용의 세세한 부분처럼 포괄

ko.wikipedia.org

https://aspiringcraftsman.com/2008/01/03/art-of-separation-of-concerns/

 

The Art of Separation of Concerns · Aspiring Craftsman

Aspiring Craftsman pursuing well-crafted software <!-- --> <!-- -->

aspiringcraftsman.com

 

'새소리' 카테고리의 다른 글

디자인 시스템이 필요한가에 대한 개인 의견  (0) 2024.06.29
zod 의 사용에 대한 뇌피셜  (4) 2024.03.02
[경고] 야생참새 주의  (0) 2023.04.30