Study/Spring

[Spring Framework] 부품화

AC 2019. 8. 3. 23:45

 

지금까지 개발 효율성과 유연성 향상을 애플리케이션 설계 목표로 삼고 이를 실현하는 방법으로 티어와 레이어에 관해 이야기했다. 

 

정리하면 결국 애플리케이션을 부품화하자는 말로 통일된다. 부품이 큰 쪽은 티어나 레이어가 되고, 그보다 작은 부품은 패키지나 컴포넌트가된다. 그리고 부품끼리는 인터페이스로 연결된다. 정리하면 이 모든 것이 부품화라고 할 수 있다.

 

더 간단히 말하자면, TV, DVD 레코더, 스피커 등으로 구성된 가전제품이나 모니터, 마우스, 메인보드, CPU와 메모리 등으로 구성된 컴퓨터처럼 애플리케이션을 여러 부품으로 조립된 전자 제품과 같은 아키텍처로 만들어서 개발 효율성과 유연성을 높이는 것이다.

티어나 레이어처럼 큰 부품은 현실 세계에서 컴퓨터와 모니터, 스피커에 해당한다고 생각하면, 패키지나 컴포넌트는 컴퓨터에 들어간 메인보드와 CPU, 메모리가 된다. 클래스는 메인보드와 CPU 및 메모리에 들어가는 더 작은 부품이 될 것이다.

그런데 이러한 부품화가 어떻게 개발 효율성이나 유연성을 높일 수 있을까? 

 

부품화는 개발 효율 면에서는 전자 제품처럼 부품별로 다른 업체에 테스트를 포함한 제조를 맡길 수 있고, 유연성 면에서는 마우스나 모니터처럼 쉽게 교체할 수 있기 때문이다. 게다가 뭔가 고장났을 때 그 부품만 수리하면 정상 작동한다. 원래 객체 지향 자체가 부품화를 촉진하는 기술로 여겨지고 있고, 시스템 개발 현장에서는 전자 제품의 경우처럼 그리 잘 되지는 않지만, 일단은 이러한 개념임을 기억해두자.

 

여기서 중요한 점은, 부품화는 인터페이스가 중요하다는 것이다. 전자 제품의 예에서 알 수 있듯이 부품은 반드시 콘센트나 모듈러 잭과 같은 인터페이스로 연결된다. 다른 부분으로는 연결되지 않을 것이다. 만약 컴퓨터에 마우스를 연결하는데 "USB 포트에 꽂은 다음 마우스에서 나온 빨간 선을 컴퓨터 본체의 메인보드에 납땜하세요"라고 말한다면 어려운 일일 것이다. 만약 그렇다면 상품으로서 가치가 없는 제품이 된다.

또한 오목형 레이어에서 상호 의존이 되지 않는 이유도 설명했지만, 전자 제품의 부품화를 떠올려보면 그 이유를 유추할 수 있다. 애플리케이션도 마찬가지로 인터페이스로 연결할 수 잇게 부품화할 수 있을 것이다. 스프링은 이러한 부품화 아키텍처를 만드는 데 아주 유용한 프레임워크이다.

여기서 부품화의 두 가지 중요점을 알아보자.

첫째는 2개의 부품이 있을 때, 인터페이스를 어느 쪽이 가져야 하는지 결정해야 한다. 조금 전의 전자 제품으로 말하면, 인터페이스는 꽂을 구멍이 있는 쪽, 자바로 말하면 인터페이스의 정의가 있는 쪽이 어느 부품인가로 이야기할 수 있다.

전자 제품을 보면 알겠지만 더 중요한 부품이 인터페이스를 가진다. 컴퓨터와 마우스의 경우에는 컴퓨터에 구멍이 있고, TV와 스피커의 경우에는 TV에 구멍이 있다. 그리고 컴퓨터와 TV 모두 전기를 공급받기 위해 콘센트가 필요하다.

컴퓨터와 마우스 중 왜 컴퓨터가 중요한지 논리적으로 잘 설명할 수 없지만, 변화가 적은 쪽이나 없으면 곤란한 쪽 등의 이유를 생각해볼 수는 있을 것이다. 깊게 파고들면 설명이 곤란하지만 대체로 이렇다고 생각한다.

애플리케이션도 이러한 방식으로 부품화해야 하며, 자바의 API도 인터페이스는 API에 있다. 앞에서 설명한 오목형 레이어의 사고방식도 비즈니스 로직 층이 가장 중요하다는 생각을 바탕으로 한다. 저명한 톰 엥겔베르그도 중요한 쪽에 인터페이스를 두는 것을 원칙으로 추천하고 있다.

 

 

사족일지도 모르지만, 무엇이든 부품화해서 인터페이스를 가져다 붙이면 되는 것은 아니다. 

 

부품에는 인터페이스가 없어도 되는 것도 있다. 예를 들어 컾뮤터 안에 박혀 있는 녹색 기판을 하나의 부품으로 생각한다면, 기판 위의 부품은 인터페이스 없이 각각 직접 연결하거나 납땜으로 고정해도 좋을 것이다. 잘못 생각해서 불필요한 인터페이스를 붙이지 않게 주의해야 한다.

둘째는 어느 정도까지 부품화를 해야 하는가이다. 다르게 말하면 부품 하나의 크기를 어떻게 잡아야 할 까이다. 여기에 절대적인 기준은 없으며, 부품화할 필요가 있는 만큼 부품화한다가 정답이다. 이 것도 전자 제품을 예로 들어 생각해보면 쉽게 알 수 있다. 예를 들어 데스크톱 컴퓨터를 살 때 디스플레이 일체형을 살 수도 있고, 오디오를 살 때 스피커나 앰프, 플레이어를 따로 사느냐 일체형을 사느냐는 구입자가 스테레오의 확장 여부나 고장이 났을 때의 AS 여부, 지출할 수 있 는 금액 등의 조건을 보고 결정하는 것이므로 어느 쪽이 좋다고 단언할 수는 없을 것이다.

애플리케이션도 마찬가지로 부품화에 따라 성능에 영향을 미치는 제약이나 조건의 차이가 있을 뿐이다. 한 가지 말할 수 있는 것은 만약 부품화가 어렵게 느껴지면 이 블로그에서 권장하는 3레이어부터 생각하는 것이 좋다.

설계상 레이어는 늘리기보다는 줄이는 편이 간단하다.

부품화에 관해 잘 모르면 1레이어부터 시작해 2레이어, 3레이어로 늘려가기가 어렵다. 그렇다고 해서 레이어를 10부터 시작하는 것은 지나치므로 3레이어가 적절할 것이다. 만약 어디까지 부품화할지가 고민된다면 3레이어부터 시작해 필요에 따라 늘리거나 줄여보자.

LIST