[독서록] Clean Architecture

클린 아키텍쳐, 소프트웨어 구조와 설계의 원칙, 로버트 C.마틴 지음, 송준이 옮김
Clean Architecture : A Craftsman’s Guide to Software Structure and Design

작년에 회사에서 일괄로 나누어준 아주 고급 진 책을 가을쯤부터 시작해서, 일독 하였습니다. 총평은. 그동안 내가 배워 왔던 모든 것, 그 자체를 동의하지 않을 수 없는 깔끔한 문체와 설명으로 제 마음을 사로잡았음. 정도 되겠습니다. 지난번의 TDD서적도 그렇지만, 아주 훌륭합니다. 정말로 평생 소장’해야’할 책입니다. 설게 원칙, 객체지향, 개발, 소프트웨어가 갖추어야 할 모습, 왜 여러가지 일들이 벌어지고, 그것이 소프트웨어에 녹아 스며들게 되는지 모든 것들이 넘치지 않고, 부족하지 않고, 딱 적당하게 표현되어 있습니다. 초반부부터 아주 재미가 있어서, 반절을 후다닥 하루만에 읽게 되어서, 따로 참조 문구등을 빼놓은 건 몇가지 않되어, 일단 찬사만으로 이번 후기를 끝내고, 두번째 읽어볼 때 조금 더 이야기를 해보도록 하겠습니다. 책 말미에 부록으로 Jason Gorman의 부록이 있는데, 부록 전체의 저자인게 아마 맞을겁니다. 익숙한 이름이 또 나오는군요. 레베카 워프브루과 그녀의 저서 <Designing Object Oriented Software> , p.378 에 대해 나오는데, 사실 제가 이 책을 읽었는지 아닌지는 잘 모르겠습니다. 제목은 익숙한데, 사실 레베카를 만나오면서도 그녀의 저서에 대해서는 생각을 못했거든요. OOPSLA->SPLASH에서 잠시 지나치면서 보았던, James O. Coplien의 <Advanced C++ Programming Styles and Idioms> 도 한번 더 찾아서 읽어봐야겠습니다. 대부분 C/C++/OOP관련서적들을 대학전후로 읽고, 그 뒤로는 Modern 시리즈 외에는 잘 본게 없어서, 기억들이 아련하니, Refresh해야겠네요.

COM+ 서적도 참 좋았는데, 무거워서, 버린게 조금 후회가 되긴합니다. 지금 이책에서 이야기하는 컴포넌트 개념에 대해서 그 문을 열어 줬던게 저에게는 Microsoft의 COM+였습니다. 그 뒤로 그 앞선 역사와 뒷 역사들을 찾아봐가면서 공부를 했었지요. 아직도 새내기 어린시절에 Ivar Jacobson의 한국 특별 강좌를 기회 좋게 들었던 것이 아직도 제 몸속 뿌리 깊이 자리하고 있다는데 어느 정도 자부심도 가지고 있습니다. 그 때 당시 여러 기업들에서 교육 받으러 오신 분들이 계셨는데, 요즘은 어떻게 지내시는지 궁금하기도 하네요. 다들 훌륭하게 소프트웨어를 만드시고 계시겠죠. 그때 전 쪼꼬미, 대학졸업할까말까 한 풋내기였고, 그분들은 이미 현역 프로그래머들이셨으니까요. 이제 한번 책을 다 읽어보았으니, 주변 사람들에게 널리널리 알리고 추천하고 다녀야 하겠습니다. 그게 의무고 사명이라는 생각이 듭니다.

2021년 입니다.

이제 지원 기간이 슬슬 지나가는 COVID-19는 Deprecated되고 Removed되기를 빌어봅니다. 제법 쌀쌀한데요. 어제 오늘 날씨는 제법 좋은 편인것 같습니다. 집안으로 들어오는 햇살이 참 좋네요. 공기도 맑은 편이고. 어제 새해가 되면서, 거실 한켠에 있던 크리스마스 트리는 제 전용 공간으로 옮겨서, 제 공간은 더욱더 겨울 스러워지긴 했지만. 거실에 있을 때는 마치 봄같네요. 새해 첫날부터 이것저것 치우고, 정리하고, 또 거꾸로 뭔가 살게 없을까 하고, 여기저기 기웃 거려 보기도 했는데, 역시나, 묵혀뒀던 책장을 다시 넘기는게 가장 보람 찼던것 같네요. 쌓여 있는 책을 올해는 다 읽고, 여기저기 필요한 점수도 딸 계획도 세워보고 하고 있습니다. 여러분들도 한해, 두해, 세해, 인생 계획등을 다시금 세워보시는 시간을 갖는게 어떨까요? 개인적으로 이런한 계획을 인생 계획 전체로 세워보고 이 개념을 지원해줄만한 소프트웨어가 없을까 찾아보고, 만들어볼까도 생각해보고 있습니다. 이것도 예전에 할일 목록에 들어 있던 것이기도 하고요.

새해 복많이 받으시고, 건강하시고, 행복하세요.

2020년도 이제 4일 남았네요.

작년 이맘때쯤 뭐했나 싶기도 하고, 올해 한해 동안 뭔일이 있었는지도 잘 기억도 안나고, 전반적으로 이전의 삶들이 희미해진 느낌입니다. 대신 몸은 예전보다는 조금 쉰 듯한(?) 느낌이라 좋긴한데… 여전히 먹는 약은 있고, 운동이 여의치 않은 것도 사실이고, 내년도를 위한 충분한 에너지가 모인것 같지도 않네요. 남은 날들은 가급적 올해를 깔금하게 정리하고, 내년도를 위한 계획을 잡아보는 날들로 써보려 합니다. 예전 같으면 아이들 방학일텐데.. 아직도 학교 수업일 수도 모자라고, 뭔가. 예전 같으면 딱딱 끊어지던 것들이 주우욱 늘어지는 느낌이네요.

크리스마스입니다.

소소하게 나에게 주는 선물로, 시소닉 포커스 GX-650을 선물해줬습니다. 이전에 8700으로 업그레이드 했던 케이스와 파워에서 소음이 너무 심하길래, 귀를대고 들어봤더니, 파워의 팬소음이더군요. 전원공급은 이상이 없었지만, 팬이 오래되어서, 소리가 나기 시작하는 것이었습니다. 보통 소음이 아니고, 약간 덜그럭(?) 거리는 진동 소음이 크게 섞여 있어서, 도저히 쓰지 못할 정도 였습니다. 전에껀 제이씨현의 PowerRock인데, 이게 산지 거진 8년이 다 되어 가는것 같으니, 오래 버티긴 했네요. AS로 팬만 수리가 되는지 모르겠는데, 안되면 직접 고쳐서 써봐야겠습니다. 남들은 팬도 분해해서 기름칠 다시하고 살린다고는 하는데, 그다지 하고싶지는 않네요. 아무튼 바꾸고 나니. 정말 조용하네요. 컴파일 한번 돌려보고 CPU팬소음이 큰지 다른 팬소음이 큰지 따져볼 수 있을 정도가 되었네요. 크리스마스 기념, AOSP S 빌드한번 해봐야겠습니다.

[독서록] 테스트 주도 개발(Test Driven Development : by example)


저자 : 켄트벡지음, 김창준,강규영 옮김

꽤 오래된 서적입니다. 한 십 몇 년 전에 읽어보고, 대충 감만 몸에 익힌 상태에서, 최근 신입사원들이 들어와서, 회사보유 서적으로 다시 읽어보게 되었는데요. 예전에 읽은 것과는 확연히 다른 느낌, 이해가 되었습니다. 무엇보다 이제는 익숙한 이름들이 몇몇 보이니까 반갑네요. Ward Cunningham, Richard Gabriel, Rebecca Wirfs-Brock, 모두 PLoP에서 만나보고, 이야기해본 분들입니다. Agile과 XP등도 이제는 익숙해지고, 주변도 대충 감은 알고 있는 상황에, 은근 개발환경/ 문화에 살짝 녹아져가고 있다는 느낌도 듭니다. 이런중에 텍스트를 다시 읽어봤는데, 솔직히 1장은.. 좀.. 따라가긴 힘드네요. 예제를 기반으로 한다고는 하지만, 뭐랄까 지독히 대화체로 되어 있고, 번역체가 여전히 남아 있는게 보여서, 껄끄럽달까요? 그냥 원문을 읽어보는게 어떨까라는 생각이 드네요. 그리고 좀. 지루합니다. 일단 리팩터링을 모르는 분이라면 코드를 하나씩 봐가면서 따라가는게 좋을 수도 있겠지만, 거꾸로. 아는 사람은 굳이 왜? 라는 생각이 들 수도 있겠다 싶었습니다. 기본적으로 예제의 작성 흐름은 순수 저자의 마음과 설계대로 흘러가는 것이라서, 독자가 쉽게 인정(?) 혹은 동의하기는 어려울 수도 있겠다 싶었습니다.

제게는 2장 이후의 이야기 그리고 3장에서의 이야기가 이제는 좀 더 와닿고, 도움이 되겠다 싶은 내용들이었습니다. 일종의 팁 들이 주어졌다고 할까요? 약간의 마음가짐을 다시 잡도록 도와주는 문구들도 있었구요. 아래는 그 일부분 들을 발췌 해봤습니다.

“데밍: 품질에 대한 책임을 그 누구보다도 작업자에게 맡겨야 한다”. 역. P1
사실 요즘 다시 TDD를 들여다보는 것은 Test할 일이 많아져서 입니다. 품질에 대해서 다시 여기저기서 압박이 들어오는 상황이라서, 기존 방법론들 설계방법, 우리의 개발 문화들을 다시 돌아보고 있는 상태이지요. 이전까지는 테스트가 한참 모자랐다고 할 수 있겠고, 이제는 모자라다는 수준은 아니지만, 조금, 뭐랄까 중복되었다라는 느낌이 많습니다. 테스트 리팩토링을 할 때라고 할 수도 있겠네요.

“xper.org의 TDD수련법”
일종의 공식이자, 단순화된 절차랄까. 일을 좀더 빠르게 진행할 수 있도록 도와주는 행동요령정도가 되겠네요.
1. 가능한 하나의 테스트를 빠르게 추가하고
2. TC를 돌려보고, 코드가 테스트에 의해 실패하는 것을 확인하고
3. 코드를 고쳐서
4. TC를 수행 시, 모두 성공하도록 만들고
5. 중복을 제거한다.(Refactoring) p.71
* 가짜구현. 뭐든 만들자, TC가 패스하면 OK. 그리고 고친다.

“Clean code that works by Ron Jeffries”, p.21

“용기를 갖는 것 두려움을 뛰어넘는 것”

“Metaphor Gardening 워드 커닝햄”

“느낌(부작용에 대한 혐오)을 테스트로 변환하는 것은 TDD의 일반적인 주제다”. p.57

testEquality $5 != $6
value object $5 == object $5
object != value p.62

equal null, equal object p.63

위험한 상황 동치성 테스트 실패 -> 곱하기 테스트 실패로 이어짐 p.67

Dollar -> Franc testform분열 Copy&Paste에 대한 활용과 경계. p.70

“TDD로 구현할 땐 테스트 코드의 줄 수와 모델 코드의 줄 수가 거의 비슷한 상태로 끝난다. TDD가 경제적이기 위해서는 매일 만들어 내는 코드의 줄 수가 두 배가 되거나 동일한 기능을 구현하되 절반의 줄 수로 해내야 할 것이다. TDD가 자신의 방법에 비해 어떻게 다른지 측정. 이때 디버깅, 통합작업, 설명하는데 걸리는 시간.” P.145

“잠시 실험을 시도했는데, 제대로 되지 않아서 버렸다.” p.148

Agile Manifesto

http://agilemanifesto.org/iso/ko/manifesto.html

책을 읽고 난 후 떠오른 생각을 정리해봅니다.
경험(=Object)의 중첩(Superposition) : ObjectLifeCycle
+—- Aging ———–+
O1 S————————-E
+-Overlap-+ Communication, Energy Exchange, Resembling
O2 S—————————E
+–Replication-+ Legacy, Inheritance, Heritage, History, Legendary

O3 S——————————-E
Most Longest and repeated Object/Feature becomes legacy and firm infrastructure.

워드프레스 5.6

워드프래스 버전은 꾸준히 업데이트가 잘 올라오네요. 요샘 찜찜하게 여기저기 해외 로그인 시도가 많이 보여 이참에 살짝 권고사항이 mysql도 업데이트 했고. 업데이트가 떠 있길래 했는데. 외관상 크게 바뀐 것 같진 않은데. 뭐랄까 쾌적하다는 느낌이 드네요. 휴대폰으로 모바일상태에서 글작성하는 것도 왠지 어색하지 않다는 느낌도 드네요. 이전하고 비슷한 것 같긴한데 말이죠…

Android ADB 원격지에서 로컬로 접속하기

목적 : 원격지 서버가 짱짱해서, 그쪽에서 바로 빌드하고, 그쪽 쉘에서 로컬 머신에 붙어 있는 에뮬레이터라던가, 실제 단말이라던가에 바로 접속해서 테스트 할 수 있음. Android Platform빌드등 빌드환경과 관련된 여러가지 설정들을 로컬머신인양 그대로 이용할 수 있어 편리하고, 딱히 다른 방법도 없음.

방법은 SSH 포트포워딩/터널링을 이용해서, 원격지 ADB서버의 포트에서 발생하는 패킷들을 로컬로 다 받아서 처리하는 것.

여러 글에 안드로이드 기본 에뮬레이터 포트가 5554, 5555라는게 있는데, 에뮬레이터일경우에만 쓰이고, 기본 ADB서버의 포트는 5037을 사용함. 이 부분을 알고 원격지에서 쓸 포트와 로컬에서 쓸 포트를 변경하거나할 필요가 있을 때, 적절히 수정해서 연결시켜줘야함.

  1. 원격지 서버 – Ubuntu등 리눅스 머신. SSH 연결을 제공함.
  2. 로컬 PC – 윈도우 일경우, putty내장 기능을 사용하는게 가장 편리함.
  3. 로컬 리눅스 머신 – 동일하게 putty 사용을 권장함. 아닐경우 ssh로 직접 포워딩 설정을 해줘야함.
  4. Macbook Pro – brew나 AndroidStudio등으로 adb 서버만 다시 띄울수 있으면 됨. 위치는 https://developer88.tistory.com/174 참고

1 ~ 2 를 사용할 경우.

a. 일단 로컬이던, 서버쪽이던, adb kill-server, killall adb 등으로 adb 서버를 모두 죽여준다. adb devices나 adb start-server를 하면 다시 실행되니까. 걱정말고 죽이자. 서버는 혼자 쓰는 시스템이라면 기본 포트에서 바꿀것 없이 바로 원격지 5037을 로컬 5037로 붙여 버리면, 원격지에서 발생하는 패킷들이 로컬로 와서, 단말제어에 사용됨.
Putty에서 SSH Session연결전에, 설정 트리 맨 아래에 SSH > tunnel쪽에
Source 에 5037
Desitnation에 localhost:5037 을 적고, 아래쪽의 방향을 반드시 Remote항목으로 설정해줘야 함. 이후에, SSH connection하고,
로컬에서 adb start-server
connection한 원격 쉘에서 adb start-server 혹은 adb devices를 하면 떠야함.
양쪽 adb 버전을 일치시키는 것이 좋음.

b. 원격지 혹은 로컬 포트를 바꿀 필요가 있을 경우, adb -P portnum start-server를 이용함.
예) 원격은 5099, 로컬은 5088로 포트를 바꾸어서 실제 단말을 로컬에 연결해서 원격에서 제어하려고 할 때.
putty로 source 5099, destination localhost:5088 설정후, 원격머신에 SSH연결
원격 SSH $ killall adb; adb kill-server
로컬 > adb kill-server
로컬 > adb -P 5088 start-server
로컬 > adb devices 로 로컬에서 접근 되는지 확인
원격 SSH $ adb -P 5099 start-server; adb devices로 마찬가지로 동일하게 작동하는지 확인

1 ~ 3혹은1 ~ 4연결시 . 로컬 리눅스 머신에서 ssh를 사용할 경우
ssh -R 5099:localhost:5088 원격지IP 로 바로 쉘연결해서, 사용하면 됨.

-P 옵션 일일히 적기 귀찮다면, : 안 적어주면 5037로 바로 돌아감.

원격지에서는
export ANDROID_ADB_SERVER_PORT=”5099″

로컬에서는
export ANDROID_ADB_SERVER_PORT=”5088″

해주고 하면 됨.

스마트 TV? 펌웨어

집에는 두개의 삼성 TV가 있습니다. 한대 더 있었는데, TV모니터였고, 동생줘버려서 지금은 뭐 없네요.
하나는 첫째태어나고 얼마 안되어서 구매한 UN40D6100 당시로는 스마트TV라는 개념이 생소하던.. 뭐. 나름 뭘 위해서 태어난것인지는 뚜렸했지만. 그런 TV였고, 여전히 무쓸모였고, 오해 샀던 크나큰 벽걸이 TV의 스마트 기능은 나름 쓸만 했습니다. 채널이 따로 제공 되는 것도 그렇고, IPTV와의 궁합이 좋은것도 그렇고 리모컨 사용성도 대폭 좋아지고, 현재 저 40인지 TV는 그냥 제앞의 모니터로 쓰고 있는 처지가 되었구요. 그렇다고 딱히 나쁘다 그렇지는 않습니다. 여전히 모니터로서의 성능은 괘않고, 40인치라는 크기고 적당한 거리에서 보기도 좋고, 사운드도 좋고, 애들 게임 시켜주기도 좋고, HDMI단자도 4개나 있어서 이것저것 연결하기도 좋고, 최근의 TV에는 없는 D-SUB단자까지 고루 갖춘 발군의 “모.니.터” 입니다. 그러다 문득 펌웨어 메뉴에 들어가봤는데, 예전에 온라인으로 업데이트하다가 막 뻑나고 그래소 001031버전인가에 머물러 있었는데, samsungsvc 에 가보니, 2012년도의 3000 3003번 펌웨어가 있어서. 연달아서 업데이트 해봤습니다. 기대는 아주 안했었는데, 좋아진건, 리모컨 반응성이 꽤나 좋아졌네요. 화면전환속도도 좀 빨라진것 같고. 그리고 3000에서 3003으로 넘어가면서, 가장 좋아진건 WIFI잡는게 비번 걸린 공유기도 잡을 수 있게 UI가 대폭 추가되었네요. 이제 좀 제구실을 하는 인터넷 되는 모니터가 된 느낌입니다.

하지만 이미 최신 TV에서 그 화려만 기능들을 봐와서, 예전 제품의 스마트 기능에 머물러 있는건 뭐랄까… 그냥 포기했구나 라는 생각이 드네요. 이 당시 제품들이 나름 TV외관에 신경쓰면서, 이것저것 멋져보일라고 플라스틱프레임 가지고 별걸 별걸 다 만들 던 때였는데, 요새는 아예 외관 같은건 아예 없어져라 하는 분위기이거나, 넌 TV가 아냐하는 분위기이니 세월이 좀 변하기도 한것 같습니다.

그리고 스마트 TV기능에서 앱이 뭐가 될까 하느 마음에 좀 눌러봤는데.. 가차없이 Youtube, TED등등을 마구마구 지워주시는 군요. ㅋㅋㅋ 뭔가 인터넷으로 아직도 서비스될것 같은 남아 있는 앱들도 하나씩 실행해보고 있는데, 최종 업데이트가 2016이 거의 마지막으로 보여서, 아마도 안될것 같네요. 역시 좋은 모니터로서 끝가지 가야할 운명인가봅니다.

올 추석에는 “코틀린 쿡북” 을 읽고 있습니다.

하도 여기저기서 올해 추석에는 집에만 있으라는 시그널이 많아서, 집에서 읽을 만한 책들을 고르다, 코틀린 쿡북이 회사에서 먼지가 쌓여가는게 보여서 잠시 데려와서 읽고 있습니다. 아직 초반부만 읽어보고 있는데, 나름 산을 올라가는 느낌으로 각각의 레시피 형태의 나름 익숙 한 패턴인 ( 문제 – 해법 – 설명 ) 형태로 기술된 짤막한 쿠키스타일의 단원들을 읽고 있습니다. 어찌보면, StackOverflow를 요약한 것과도 같은 느낌이긴 한데, 패턴 학회에서 여러 글들을 보아온 저로서는 패턴 쪽으로 마음이 기웁니다. 출판사가 출판사인지라… 저작권에 은근 O’reilly스러울 줄 알았는데, 전문에는 나름 오픈 마인드로 코드 내용등에 대한 코멘트 인용 등에 대해서 좀 더 용인하는 듯이 써있네요…. 그래도 조심해야하니, 일단 인용한다는 표식부터 남깁니다. “코틀린 쿡북, 켄 코우젠 지음, 김도남 옮김, 책만, ISBN 9791189909147”

일단 코틀린은 계속 얘기만 들어보고, 안드로이드 플랫폼 코드에서 슬쩍 구경만 해 본 정도라서 뭐 아는 것도 아니고, 모르는 것도 아닌 애매한 상태에서. JVM의 바이트코드를 내뿜어, 자바 실행 파일과 동일한 효과를 가진 실행 파일들을 내준다는 정도로만 이해하고 있었습니다. PLOP을 다니면서, 여러 언어들에 대해서 생각을 해보기도 하고 접해보기도 했는데, LLVM이후로 모든 인간 중심의 언어들이 무수히 자라나는 걸 보고 있기도 해서, 그냥 아무 언어나 나도 만들어 봐야 하나 싶기도 하지만, 과거의 경험 들과 검증된 것들이 차곡차곡 쌓여서 발전되고 있는 언어들을 보고 있으니, 또 막 그러면 안될 것 같기도 하고, 이래저래 마음이 싱숭생숭 해 집니다. 실제 벌어 먹고 살기 위한 업무가 돌아가는 것도 그렇고, 생태계라 불리는 것도 그렇고, 무엇 하나 자연이 그러하듯, 조금씩 조금씩 바뀌어 가면서 커지고 복잡해지고, 또 그러다가 다시 단순한 기반 아래로 다시 구축되고, 기존과 여전히 같은 개념들을 공유하고, 역사가 반복되는 듯한 느낌을 받고 그런 거죠.. 나이 들었다는 느낌을 이래저래 많이 받고 있습니다.

일단은 앞부분의 play.kotlinlang.org에서 살짝 맛보기를 보고. 그래도 뭔가 하는 사람인 것 처럼 보이기 위한, 컴파일러/REPL 및 개발환경 꾸미기부터 해보고 있습니다. 책에서도 그렇지만, 하도 여기저기서 채택하고 퍼져나가고 있다고 해서, 이것저것 툴도 많은 것 같은데, 익숙한 AndroidStudio나, IntelliJ, 그냥 쉘 정도 세가지 다해보면 되겠네요.

곧 PLOP2020입니다.

올해는 원래 콜로라도에서 개최될 예정이었으나, 그 코로나19에 의해, 전세계 모든 컨퍼런스 세미나들이 그렇듯, PLOP도 Virtual Conference로 온라인상으로 진행됩니다. 주로 챗을 열고, 한사람이 강의를 하거나, 서로간에 온라인으로 이야기를 주고 받으면서 진행될 것 같습니다. 일전에 8월달에 이미 AsianPLOP이 그런 형태로 이미 진행되었다고 합니다. 나름 한편으로는 PLOP의 주요 활동인 셰퍼딩에 이제는 일반화가 되어버린 화상챗이 대중적으로 사용되어 도리어 지나온 과거보다는 피드백이 좀더 좋아졌다고 해야할까 싶지만.. 영어가 원어가 아닌 입장으로서는 그냥 메일로 주고받는게 더 효과적일지도 모르겠습니다. 실제 본 PLOP에서의 Writer’s Workshop에서도 말하는게 참 힘들었기도 했고요. 아무튼 올해는 올해대로 기대는 됩니다. 단지, 한가지… 밤시간이라는 것만 뺀다면 말이죠 –;; 시간표를 잘 짜두어야겠습니다. 10월은 9월까지의 과실들을 여기저기서 수확하는 시기라서 시간이 조금만 틀어져도 큰 손실을 받는 해니까 말이죠. 올해는 PLOP하고 겹쳤던 SOSCON이라도 봐볼까 싶기도 합니다. 나름. 회사에서 주최하는 것이기도 하고 오픈소스 관련 행사이기도 하고…