# 1부. 클린 아키텍처는 아주 좋은 책이다

1. 클린시리즈 책은 다른 엉클밥 책에서 익혀도 되지만 후반 내용은 클린 아키텍처에서만 다루고 있음. 한번쯤은 읽어봐도 좋을 책이다.

2. 클린 아키텍처는 Agile principles, patterns, Practices 2002년 책이 원본이고 이 책들의 소스는 그래디 부치의 OOAD책(1990)과 여러저자의 논문들임.

3. 그러므로 고전 설계 이론들(OOAD와 Agile PPP 등)은 여전히 가치있음. 좁밥 취급하면 안됨.

4. 클린 아키텍처는 고전 설계이론들을 총집라한것에 불과함.

5. 최근 왜 30년전의 내용이 최근에도 읽히고 팔리는지 알아보자.

6. 한국도 예전엔 객체지향이나 소프트웨어 공학이 좁밥인 나라는 아니었음.

7. 설계이론에 대해 한글로 검색을 하면 옛날 자료중에선 고급진 자료들이 많은데 비해 최근 올라온 자료는 질떨어지는 자료들이 많다.

8. 그 기준이 2000년대 중반 기점임.

9. 과거(2000년대 중반 이전)엔 워드 커닝햄(위키 창시자)의 컨설팅 회사가 한국에 지사를 설립하고 유명인들이 한국에 와서 설계 깡연도 하고 교육도 이벤트도 많이 할 정도였는데 어느순간 갑자기 분위기가 곤두박질 치기 시작함.

10. 최근 MSA가 인기를 얻으면서 소프트웨어 공학이 다시 재조명되고 있다.

11. 2000년대 중반부터 현재까지 약 10여년간 무슨일이 일어났던걸까? 공백의 10년에 대해 알아보자.





# 2부. 애자일과 공백의 10년

1. 한때 한국은 워드커닝햄, 켄트백 같은 유명인들이 와서 비즈니스를 행사하던 시절이 있었음.

2. 하지만 2000년대 중반 이후의 분위기는 소프트웨어 공학이 고자가 되어 공백의 10년을 겪게 되었음.

3. 이 공백의 10년을 채우고 있던건 애자일과 스크럼이었음.

4. 당시 애자일 초기 판매전략은 세계적으로도 잘 먹히고 있었음

5. 유교식 조직문화가 개발문화에도 적용되어 심하게 고생을 하던 한국 개발자들에겐 더할나위 없이 좋은 호평을 받기 시작했다.

5. 개발자를 중심에 두어 빠른개발을 하고 그로 인해 프로젝트의 성공 확률을 높이는 동시에 개발자들은 스트레스를 줄일수 있었고 덩달아 야근도 없어졌다.

6. 회의를 줄이고 계획도 없앨수 있고 문서작업도 상당히 줄어들었다.

7. 복잡한 개발 프로세스를 단순한 이터레이션 개발로 바꾸고 분석과 설계 없이 진화적 계발을 하면 좋은 소프트웨어가 만들어진다는 개념이었다.

8. 지금의 개발자들이 보기에는 구라치고있네? 같은 모토인데 그 당시 스트레스를 받던 개발자들한테는 한줄기 예수님! 같았다

9. 마케팅 방법론과 개발 환경을 바꾸고 싶은 개발자들에 의해 이것의 인기는 폭발했고 비즈니스에 인본주의를 도입했다.

10. 이 당시의 개발자들의 분위기는 '야근 없이 사람답게 살고싶다' .

11. 그렇기에 분석과 설계를 말하는 사람들은 워터폴 틀딱 취급을 당하기에 일쑤였다.

12. 즉, 설계와 소프트웨어 공학은 절대 이름을 말해선 안되는 볼드모트같은 존재가 되어버린 것이다.




# 3부. 밥 마틴과 클린 아키텍처

1. 설계와 소프트웨어 공학은 절대 이름을 말해선 안되는 단어가 되어버렸다.

2. 이 당시의 분위기에 따르면 클린 아키텍처의 저자 밥 마틴은 설계와 소프트웨어 공학을 중시하는 일개 틀딱 공학자에 불과한데 왜 최근 떠오르고 있는 것일까?

3. 다시 과거로 돌아가보자. 이당시의 분위기는 한마디로 다음과 같다.

4. '소프트웨어 재사용은 개소리', '난 컨설턴트지만 재사용되는 사례를 단 한개도 못봤다', '소프트웨어공학, CBD, SOA는 워터폴 틀딱들이 컨설팅과 제품을 팔아먹으려는 구라다', '도메인 주도 설계는 개발에 도움안되는 이론적인 소리'

5. 이런말들을 반박하면 워터폴주의자라는 딱지가 붙으니까 개발자들 사이에서는 소프트웨어 공학을 비하하는 분위기가 가속화되었고 무가치한 것으로 널리 퍼졌다.

6. 그래서 애자일은 더 힘을 얻을 수 있었다.

7. 아키텍처나 설계없이 개발하는 것은 대세를 넘어 당연시되고 있었다.

8. 스프링이 인기를 얻으면서 사태는 더 악화가 되어버렸다.

9. 'DI를 주입해서 사용하면 되는데 왜 모듈과 데이터에 대한 소유권을 나눕니까?', '아키텍처요? 님 워터폴주의자임?',

10. 서비스 대상이 상대 데이터 업데이트를 호출하는 DAO를 당당하게 호출해버리기도 했다.

11. 요즘 들어서야 aggregate가 당연하게 여겨지고 있는데, 그 당시 스프링 틀딱들은 이런 방식을 'DI도 모르는 워터폴주의자' 취급해 버렸다.(이것이 스프링 틀딱들은 조심해야 되는 이유)

12. 이런 지옥도가 MSA 도입시기까지 이어졌다.

13. MSA가 도입되기 시작하면서 개발자들은 ㅈ같은 상황을 깨닫기 시작한다.

14. MSA 모듈화는 해야되고 기준이 될 지식은 필요한데, 지금까지의 분위기대로라면 설계와 소프트공학은 워터폴 틀딱취급이고, 동시에 애자일까지 해야한다?

15. 딜레마에 빠지기 시작했다.

16. 여기에 부합된게 밥 마틴이 주장한 'TDD근간 + 애자일OK' 였다

17. 구조적인 모듈 작성 기법과 원리를 제공하면서 MSA도입과 모듈화, 체계수립이 가능해졌다.

18. 이렇게 해서 밥마틴(마틴 파울러, 켄트백 포함)이 말한 방법론에 국한해서 소프트웨어 공학은 다시 10여년만에 인기를 되찾게 되었다.

19. 지금 한국에서 받아들여지는 소프트웨어 공학지식엔 단서가 붙는다.

1) TDD, 리팩토링, 애자일 태그가 무조건 붙어 있어야됨.
2) MSA에 사용될 수 있는 소프트웨어공학 이론이 있어야됨.
3) 하지만 그 외의 소프트웨어 공학은 여전히 워터폴 틀딱이다.

20. 근데 알고보면 클린 아키텍처의 원본은 그들이 여전히 틀딱이라고 부르는 그래디 부치, 알리스테어 콕번들의 이론들이다.

21. 이 상황이 밥 마틴도 어이가 없었는지 자기가 발표하는 자리에서 대놓고 깠다.

"SOA랑 MSA는 원리적으로 똑같은데 왜 SOA는 NO고 MSA는 YES라고 부르짖습니까?"

"유스케이스는 워터폴인데 왜 Interactor layer는 YES입니까?"(유스케이스나 인터렉터나 원리적으론 똑같음)



# 4부. 클린 아키텍처에는 장단점이 분명하다

1. 장점 : 기계적이고 고민이 필요없는 기법

2. 단점 : 고민없이 기계적이면 장황한 아키텍처가 만들어짐

3. 단점 : 클린 아키텍처 원칙에 부합되게 설계하면 도메인에 정면으로 위배되는 아키텍처가 만들어 질수 있다.

4. 그런데 아직까지도 이 단점에 대해 지적하면 워터폴 주의자 취급을 받게 되는 분위기가 만연하다.

5. 어떤 강의중에 이런 내용이 있었다.

6. 1:n의 관계에서 의존성을 어떻게 표현해야 할까?

7. 당연 클린아키텍처하게 n이 1에 주입되어야 하는것이 아닐까?

8. 클린 아키텍처 원칙에는 부합되지만 도메인 전문가들면 이렇게 대답한다

9. "그건 업무랑 맞지가 않아요"

10. 클린 아키텍처를 지식의 정수로 보는 사람들은 "도메인 전문가라면서 소프트 웨어를  잘 모르네요. 닥치세요"

11. 클린 아키텍처를 배운 사람의 입장에선 이럴수밖에 없는게 클린아키텍처랑 맞지 않는 상황에선 어떻게 해야하는지 누구하나라도 가르쳐주질 않았기 때문이다.




# 5부. 그럼 어떻게 설계해야 하는가

아직 안올라옴.