일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 코딩테스트
- 스프링
- kubernetes
- 클린아키텍처
- 카카오 면접
- 알고리즘
- 오블완
- 김영한
- 자바스크립트
- JavaScript
- 예제로 배우는 스프링 입문
- Effective Java
- 카카오
- 스프링 핵심원리
- Spring
- 알고리즘정렬
- ElasticSearch
- 스프링부트
- java
- Effective Java 3
- k8s
- 이펙티브자바
- Sort
- 이차전지관련주
- 이펙티브 자바
- 스프링핵심원리
- 자바
- 티스토리챌린지
- effectivejava
- 엘라스틱서치
- Today
- Total
Kim-Baek 개발자 이야기
클린 아키텍처 - 2장 두 가지 가치에 대한 이야기 본문
이전에 본 1장과 이번에 보는 2장까지는 왜 클린 아키텍쳐가 중요한지를 알려주는 대목이라고 생각하고 편하게 보면된다. 소프트웨어 시스템이 이해관계자에게 두 가지 가치를 제공하는 데, 그것에 대한 설명을 하고 있다.
1. 행위
행위란 말그대로 프로그래머가 제품을 만들어서 어떠한 기능을 하도록 하게 하는 것이다. 이것을 통해서 기계가 수익을 창출하거나 기존에 사용하던 비용을 절약하는 것을 목표로 한다.
많은 사람들이 이것이 프로그래머게 해야할 일의 전부라고 생각한다.
2. 아키텍처
소프트웨어라는 뜻을 한번 살펴보자. "Soft"는 부드럽다는 것이고, "ware"는 제품이다. 소프트웨어는 부드러운 제품, 즉 변경하기 쉬운 제품이라는 것이다. 그렇기 때문에 소프트웨어에 대한 변경사항이 생기면 간단하고 쉽게 적용이 가능해야 하는 것이다.
하지만 이해관계자가 변경사항을 계속 제시하면, 개발자는 복잡도가 계속 증가하는 퍼즐을 맞추는 것과 같다는 생각을 하게 될 것이다. 시스템의 형태, 즉 아키텍쳐가 문제가 된다. 아키택쳐가 형태에 독립적이여야지 변경하기 쉽고 더 실용적이게 된다.
두 가치 중 더 중요한 것은?
여기까지 말했다면 두 가치에서 더 중요한 것은 당연히 아키텍처라는 것을 알 수 있을 것이다. 책에서는 극단적인 비교를 통해서 선택을 해보라고한다.
- 완벽하게 동작하지만 수정이 아예 불가능한 프로그램
- 동작은 하지 않지만 변경이 쉬운 프로그램
저자는 동작은 하지 않지만 변경이 쉬운 프로그램은 내가 맡아서 동작을 하게 할 수 있고, 앞으로의 변경사항에도 대응할 수 있다고 한다.
내가 실제 공감가는 부분은 이것이였다. 관리자에게 변경 가능한 시스템을 만드는게 좋겠죠? 라고 물으면 당연히 좋다고 할 것이다. 하지만 현재 기능의 동작이 미래의 유연성보다 더 중요하다고도 할 것이다. 그래서 행위에 초점을 맞춰서 당장에 개발을 한다면 만족을 할 것이다. 그러나 나중에 관리자가 변경을 요청할 때, 개발자가 "변경 비용이 너무 커서 현실적으로 적용이 불가능합니다"라고 하면, "실질적으로 변경이 불가능한 상태에 처할 때까지 방치했다"라고 말할 것이다.
아이젠하워 매트릭스
중요함 & 긴급함 | 중요함 & 긴급하지 않음 |
중요하지 않음 & 긴급함 | 중요하지 않음 & 긴급하지 않음 |
중요함과 긴급함으로 문제를 구분하면 이렇게 표가 생긴다. 행위는 긴급하지만 중요도가 매번 높다고는 할 수 없다. 아키텍쳐는 중요하지만 긴급하지는 않을 수 있다.
중요하고 긴급한 아키텍쳐를 무시하고, 행위에 집중하지 않아야 한다.
이러한 아키텍처를 위해서 투쟁을 하라고 한다. 개발팀을 뽑는 이유가 소프트웨어를 안전하게 만들어달라는 것인데, 다른 곳에서 원하니까 이렇게 했다는 말은 책임감이 없는 것이다.
아키텍쳐가 후순위가 되면 시스템을 개발하는 비용이 더 많이 들고, 일부 또는 전체 시스템에 변경을 가하는 일이 현실적으로 불가능해진다.
'개발' 카테고리의 다른 글
클린 아키텍처 - 4장 구조적 프로그래밍 (0) | 2022.02.02 |
---|---|
클린 아키텍처 - 3장 패러다임 개요 (0) | 2022.02.01 |
클린아키텍처 - 1장 설계와 아키텍처란 (0) | 2022.01.31 |
[Java] 함수형 인터페이스 (@FunctionalInterface) (0) | 2020.08.15 |
[카카오 면접] Java Out Of Memory ( OOM ) (0) | 2020.08.12 |