본문 바로가기
IT BASIC/IT TERMINLOGY

Robust Coupling과 loose Coupling: software architecture

by tankwoong 2023. 10. 7.
반응형

Robust Coupling과 loose Coupling: software architecture 

소프트웨어 아키텍처를 설계할 때, 두 가지 중요한 개념인 "강한 결합(Tight Coupling)""느슨한 결합(Loose Coupling)"이 있다. 이 두 개념은 소프트웨어 컴포넌트 간의 상호 의존성을 나타내며, 시스템의 유지 보수, 확장성, 재사용성에 큰 영향을 미친다.

 

1. 강한 결합(Tight Coupling) 또는 강력한 결합(Robust Coupling):

강한 결합은 두 개 이상의 소프트웨어 모듈 또는 컴포넌트가 서로 강하게 의존하고 있는 상태를 나타낸다. 이것은 변경과 유지 보수를 어렵게 만들 수 있으며, 시스템의 취약성을 증가시킬 수 있다.  만약 한 모듈을 수정해야 한다면, 그 모듈에 종속된 다른 모듈들도 함께 수정해야 경우도 발생한다. 이로 인해 코드의 복잡성이 증가하고 유지 보수 비용이 증가할 수 있다. 

2. 느슨한 결합(Loose Coupling):

느슨한 결합은 소프트웨어 모듈 또는 컴포넌트 간의 상호 의존성이 낮고 독립적인 상태를 나타낸다. 느슨한 결합을 채택한 시스템은 변경과 유지 보수가 쉽고, 모듈 간의 재사용이 높아지게 된다. 한 모듈의 변경이 다른 모듈에 큰 영향을 미치지 않기 때문에 시스템이 더 견고하고 확장 가능하게 된다. 이로 인해 시스템의 유연성이 향상되며, 새로운 모듈을 추가하거나 기존 모듈을 교체하는 작업이 용이해진다. 

 

 

정확한 결합 수준은 소프트웨어 아키텍처의 설계와 개발 방법에 따라 다르지만 일반적으로는 느슨한 결합을 채택하는 것이 소프트웨어 시스템 유지 보수성과 확장성을 향상하는 데 도움이 된다.

 

Robust Coupling과 loose Coupling: 관련 중요 개념

 

1. 결합(Coupling) 및 응집도(Cohesion):

결합(Coupling): 

 

소프트웨어 모듈 간의 상호 의존성을 나타내며, 강한 결합과 느슨한 결합은 결합의 정도에 따라 구분된다.

응집도(Cohesion): 

 

모듈 내의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타내는 개념이다. 높은 응집도는 모듈 내부의 요소들이 서로 관련이 높음을 의미하며, 좋은 소프트웨어 디자인에 중요한 역할을 한다.

2. 인터페이스(Interface)와 API(Application Programming Interface):

인터페이스(Interface):

 

소프트웨어 컴포넌트 간의 상호 작용을 정의하는 명세이다. 인터페이스를 명확히 정의하면, 느슨한 결합을 달성하는 데 도움이 된다.

API(Application Programming Interface): 

 

소프트웨어 컴포넌트 간의 상호 작용을 위한 메서드 및 함수의 집합이다. API 설계는 느슨한 결합을 고려하여야 하며, 공개 API를 만들 때 유의해야 한다.

3. 이벤트 기반 아키텍처(Event-Driven Architecture):

이벤트 기반 아키텍처는 컴포넌트 간의 느슨한 결합을 촉진하는데 사용되는 아키텍처 패턴 중 하나이다. 컴포넌트는 이벤트를 발행하고 구독할 수 있으며, 이를 통해 컴포넌트 간의 통신이 이벤트 중심으로 이루어진다.

 

여기서 "컴포넌트는 이벤트를 발행하고 구독할 수 있다"는 말은 소프트웨어 컴포넌트가 이벤트 기반 아키텍처(Event-Driven Architecture)를 따르는 경우, 컴포넌트 간의 상호 작용 방식을 설명하는 개념이다. 이를 설명하기 위해 다음과 같은 중요한 개념을 이해해야 한다.

이벤트(Event): 

 

이벤트는 시스템 내에서 발생하는 특정한 사건이나 상태 변화를 나타냅니다. 예를 들어, 버튼 클릭, 데이터베이스 업데이트, 센서로부터의 신호 등이 이벤트의 예시입니다.

이벤트 발행(Publishing Events): 

 

컴포넌트는 특정 이벤트가 발생했을 때 해당 이벤트를 발행(또는 퍼블리시)할 수 있다. 이것은 다른 컴포넌트에게 이벤트가 발생했음을 알리는 메커니즘이다. 이벤트 발행자는 일반적으로 이벤트를 정의하고 발생시키는 역할을 한다.

이벤트 구독(Subscribing to Events): 

 

다른 컴포넌트는 특정 이벤트에 대한 구독(또는 서브스크라이빙)을 등록할 수 있다. 이것은 해당 이벤트가 발생했을 때 특정 동작이 실행되도록 하는 것을 의미한다. 이벤트를 구독하는 컴포넌트는 이벤트 핸들러를 등록하여 이벤트를 처리한다.

이벤트 핸들러(Event Handler): 

 

이벤트를 구독한 컴포넌트는 해당 이벤트에 대한 이벤트 핸들러를 정의한다. 이벤트 핸들러는 이벤트가 발생했을 때 실행되는 코드 블록 또는 함수로, 원하는 작업을 수행한다.

이러한 개념을 통해 컴포넌트 간의 느슨한 결합을 달성할 수 있게 된다.

 

예를 들어, 웹 애플리케이션에서 버튼 클릭 이벤트를 생각해보자. 버튼은 이벤트를 발생시키고, 이벤트 핸들러는 해당 버튼 클릭 이벤트를 구독하여 원하는 동작을 수행할 수 있다. 이렇게 하면 버튼과 이벤트 핸들러 간에 직접적인 의존성이 없어지며, 컴포넌트 간의 상호 작용이 유연하고 확장 가능해진다.

이벤트 기반 아키텍처는 다양한 컴포넌트 및 서비스 간의 통신을 쉽게 관리하고 분리할 수 있는 방법을 제공하여 소프트웨어 시스템을 느슨하게 결합된 구조로 만들어준다. 이를 통해 대규모 및 분산 시스템의 개발과 유지 보수에 매우 유용해진다.

4. 마이크로서비스 아키텍처(Microservices Architecture):

마이크로서비스 아키텍처는 각각의 서비스가 독립적으로 배포되고 운영되는 아키텍처 패턴이다. 이는 느슨한 결합을 촉진하며, 각 서비스가 독립적으로 확장되고 유지 보수될 수 있게 합니다.

 

5. 결합과 예시:

데이터베이스 결합: 

 

데이터베이스와의 강한 결합은 SQL 쿼리를 직접 사용하는 경우를 나타낸다. 대신 ORM(Object-Relational Mapping)을 사용하면 느슨한 결합을 달성할 수 있다.

의존성 주입(Dependency Injection): 

 

의존성 주입은 느슨한 결합을 촉진하기 위한 디자인 패턴 중 하나로, 의존성을 외부에서 주입함으로써 모듈 간의 결합을 줄인다.

RESTful API 디자인: 

 

RESTful API는 자원을 표현하고 상태를 전달하기 위한 웹 서비스 디자인 원칙을 따르며, 명확한 인터페이스를 제공하여 느슨한 결합을 지원한다.

강한 결합과 느슨한 결합은 소프트웨어 아키텍처와 디자인에 핵심적인 영향을 미치는 개념이므로, 이러한 개념을 이해하고 적절하게 적용하는 것은 효과적인 소프트웨어 개발 및 유지 보수의 핵심이다.

 

 

반응형