본문 바로가기
프로그래밍 놀이터/Tips

[실용주의 프로그래머] 시간적 결합

by 돼지왕 왕돼지 2018. 10. 31.
반응형

[실용주의 프로그래머] 시간적 결합

temporal coupling, [실용주의 프로그래머] 시간적 결합, 동시성, 시간적 결합, 언제나 동시성을 고려해 설게하라


-

소프트웨어 아키텍처에서 시간이라는 측면은 자주 무시된다. 우리가 신경쓰는 유일한 시간은 일정뿐이다.

시간적 결합(temporal coupling)에서의 시간은 일정과 관련이 없다.

동시성(같은 시각에 일어나는 일들)과 순서(시간 속에서 일들의 상대적인 위치)에 대한 이야기이다.



-

우리는 동시성을 허용할 필요가 있고, 시간이나 순서에 따른 의존성의 결합을 끊는 방법을 생각할 필요가 있다.

그렇게 함으로써 유연성도 얻을 수 있고, 작업흐름 분석, 아키텍처, 설계, 배치(deploy)와 같은 개발의 여러 측면에서 시간과 관련된 의존성도 줄일 수 있다.




작업 흐름


-

요구사항 분석의 일부로서 사용자들의 작업흐름을 모델화하고 분석하는 작업이 필요하다.

우리가 원하는 것은 동시에 일어나도 되는 것은 어떤 것이고, 엄격한 순서에 따라 일어나야 하는 것은 어떤 것인지 찾아내는 것이다.



-

작업흐름 분석을 통해 동시성을 개선하라.




아키텍처


-

서비스를 사용해서 설계하라.


사실 우리는 컴포넌트 대신 서비스를, 즉 잘 정의되고 일관성 있는 인터페이스 뒤에서 일하는 독립적이고 동시적인 객체들을 만드는 것이 좋다.




동시성을 고려한 설계


-

동시성을 고려한다면 모든 전역 변수나 정적 변수들을 동시 접근으로부터 보호해야 한다.

애초에 왜 전역 변수가 필요했는지 스스로에게 물을 수 있는 좋은 기회다.

호출 순서에 관계없이 일관성 있는 상태 정보를 보일 수 있는지도 확인해 봐야 한다.




더 깔끔한 인터페이스


-

동시성과 시간 순서에 따른 의존성을 고려하는 것은 더 깔끔한 인터페이스를 설계하는 방향으로 이끌기도 한다.



-

언제나 동시성을 고려해 설계하라.




배치


-

시스템을 독립적인 서비스들로 구성된 아키텍처로 만듦으로써, 독립 앱으로 할지, 클라이언트-서버로 할지, n-티어로 할지 결정하는 문제에 대해서 유연해진다.

동시성을 고려해서 계획하고 작업들의 시간적 결합을 끊음으로써, 동시성을 이용하지 않기로 선택한, 독립 앱을 포함해서 모든 옵션을 다 이용할 수 있게 된다.



-

다른 길을 가는 것(비동시적 앱에 동시성을 추가하려고 하는 것)은 훨씬 힘들다.

동시성을 허용하도록 설계한다면, 확장가능성이나 성능에 대한 요구사항이 들어올 때 더 쉽게 그것을 맞추어 줄 수 있으며, 그런 일이 들어오지 않더라도 여전히 깔금한 설계의 이점을 누리게 된다.




반응형

댓글