2019년 12월 3일 화요일

20191203 MoM(Man of Month) 둘째 날이 시작되었다


MoM(Man of Month) 둘째 날이 시작되었다.

MoM에 대한 설명을 먼저 해야할 같다. 내가 속한 팀에서는 지속적으로 회고를 진행하고 있는데, 몇달 전에 만들어진 액션 아이템 중에 하나가 MoM이란 제도였다.

간단하게 설명하면, "한달 동안 업무에서 제외 해줄 테니 원하는 것을 하라" 정도가 있는데, 아직 제도 시행 초기라서 어떻게 하는게 좋을지 이야기된 것은 없는 상태이다.

원래는 분기당 한번씩 하려고 했는데, 최근에 팀의 건강를 분석해본 결과 정신적, 육체적으로 건강이 좋지 않다는 신호가 있어서 한달에 한 명씩 진행하기로 되었다. 일단 이렇게 진행을 하면서 의견들을 모아서 제도를 개선하는 방향으로 가기로 것이다.


경우에는 이번 달에 계획은 없었는데, 투표로 인해서 약간 떠밀려서 시작하게 되었다. 업무에서 벗어나서 흥미 있는 공부를 하라는 시도로 생각하고 있는데, 요즘 업무가 재미있어서 굳이 다른걸 찾아서 생각을 못하고 있었기 때문에 당분간은 생각이 없었던 것이다.

기왕 하게 되었으니 무엇을 할까 생각을 해보다가 내가 좋아하는 "일일신 우일신(日日新 又日新)이란 말이 생각났다. 하루에 하나씩 새로운 시도들을 해보자. 그리고 겸사겸사 이를 기록해보자. 내가 생각한 MoM미션이었다.


원래는 어제(2019/12/02)부터 뭔가를 했어야 하는데, 회사 인수에 관련된 기술평가를 진행하느라. 하루 종일 시간을 써서 오늘부터 하기로 한다.

아직은 나도 어떻게 해야할지 정한 바가 없어서 하루 재미있는 뭔가를 찾아보고 정리를 하려고 한다. 주변에 농담처럼 이야기처럼 쓸게 없을 때는 서현 맛집이라도 정리를 해볼 계획이다.

2015년 10월 7일 수요일

[서평] 소프트웨어 품질 관리 패러다임은 어떻게 변하고 있을까?

10년쯤 전에 XP(Extreme Programming)에 관심 가지고 공부를 했을 때, 여러 구성요소 중에서 충격적이고 사고의 변화를 주었던 것이 TDD(Test Driven Programming)이었다. 그중에서도 Unittest에 대한 아이디어가 너무 좋아서 어린 마음에 주변에 많이도 이야기하고 공부했던 기억이 있다.

이제는 Unittest는 일종의 개발의 필수 요소가 되어서 딱히 애자일 개발 방법을 사용하지 않는 환경에서도 쉽게 접할 수 있게 되었다. 그리고, 개발자가 단위 테스트를 넘어 인수 테스트(Acceptance Test) 등을 작성하는 것도 드물지 않은 경우가 되었으니. 10년이면 강산이 변한다는 말처럼 개발 방법에도 많은 변화가 있었다고 볼 수 있을 것이다.


그렇다면 QA(Quality Assurance)라 불리는 품질 관리 분야에서는 어떤 변화들이 있었을까? Unittest 등을 비롯한 개발단에서의 테스트가 도입된 것은 물론이고, 다양한 방법을 통한 테스트 자동화가 지속적으로 보급되어왔으며, 마이크로소프트나 구글 등의 세계적인 수준의 소프트웨어 회사들에서는 품질을 관리하는 영역을 넘어, 모든 구성원들이 품질을 올리는데 도움이 되는 환경과 체계를 만드는 작업을 하고 있다.

더불어 모바일 환경, 웹 서비스 환경의 보편화로 인해 저품질 제품이 출시되지 않도록 하는 게이트 키퍼로서의 품질관리 역할은 사라지고, 전반적인 개발 과정에서 자연스럽게 출시에 필요한 수준의 품질을 확보하기 위한 환경과 체계를 만들어가는 품질관리의 역할이 커지고 있는 상태이다. 요컨대, 제품의 출시를 Go/NoGo 하던 역할이 처음부터 Go할 수 있는 제품개발을 보장할 수 있는 역할로 옮겨가고 있는 것이다.

급격하게 변화하는 현재의 소프트웨어 생태계에서 적시 출시를 통해 최대한 경쟁력을 확보하는 것이 최고의 무기가 되는 상황이다. 때문에 빠른 출시의 방해가 되지 않는 것과 함께 문제가 없는 품질을 확보해야 하는 품질관리의 역할은 전보다 더 복잡하고 어려워지고 있다고 볼 수도 있다. 품질관리 팀에서 코딩을 하지 않는다는 것도 옛말이 되었고, 최근에는 품질을 관리하는 위한 코드를 생산하는 역할도 중요 역할이 되었으니, QA와 개발자의 경계가 불분명한 경우도 드물지 않게 볼 수 있는 상황이다.



[네이버 모바일 테스트 이야기]는 이러한 상황에서 어떤 식으로 변화에 대응을 하는지에 대한 네이버의 답 중 일부를 보여주는 책이다. 

기계도 할 수 있는 부분은 기계에게 넘기고, 사람만이 할 수 있는 부분을 찾아봤다는 추천사의 말처럼. 기존의 전통적인 테스트 이외의 부분들, 특히 모바일이라는 환경에서 문제가 될 수 있는 부분들을 고민해보고 해결하는 모습들을 책에서 볼 수 있다.

개인적으로 모바일 환경이 기존의 데스크톱 등과 다른 가장 큰 부분이 한정된 리소스(배터리, CPU, RAM)와 모바일 네트워크의 특성이라고 생각한다. 책에서 다루고 있는 리소스 측정에 관한 내용이나 부록의 모바일 테스트 팁에 나오는 모바일 네트워크에 관한 내용들이 모바일 환경에서의 테스트가 왜 달라져야 하는지에 대한 답변이 될 수 있을 것 같다.



참고로 모바일 네트워크에 대한 조금 더 자세한 설명이 필요하다면 예전에 내가 쓴 글 중 이동통신 네트워크 소개(http://tasyblue.blogspot.kr/2014/02/blog-post_26.html)라는 글이 있는데 읽어보면 도움이 되지 않을까 싶다. :-) 

2015년 5월 10일 일요일

추천할 만한 자바 관련 실용서 한권을 발견하다: 네이버를 만든 기술, 읽으면서 배운다 - 자바편



"자바 관련해서 어떤 책을 읽으면 좋을까?"

이펙티브 자바

종종 주변에서 듣는 질문인데, 이 질문을 받게되면 자바를 배운지 얼마 안 되는 사람들에게는 조슈아 블록의 "Effective Java"를 추천해주곤 했다. 하지만 현업에서 어느 정도 자바를 사용하고 있는 사람들에게는 딱히 짚어서 추천해줄 만한 책을 고르기 쉽지 않았다.

자바에 관한 책이 없는 것도 아니고 오히려 굉장히 많은 책들이 출판되었는데, 왜 그럴까 싶었는데. 곰곰히 생각을 해보니, 자바 개발 환경과 사용 환경이 워낙 다양해지고 세분화되었기 때문에 출간된 만든 책들이 그 중 일부만을 다루고 있는 경우가 많았기 때문이 아닐까 싶었다. 그리고, 어느 정도 자바를 사용하는 사람들에게는 현업에서 겪게되는 문제들을 이해하고 해결하는데 도움이 되는 책들을 추천해주고 싶었는데 그에 적합한 책을 발견하지 못했기 때문인가도 했다.


네이버를 만든 기술, 읽으면서 배운다 자바편

우연한 기회로 이 책(네이버를 만든 기술, 읽으면서 배운다 - 자바편. 이하 자바편)의 서평을 쓰는 일에 참여하게 되면서 간만에 자바 관련 서적을 읽게 되었는데, 300페이지 좀 안되는 마지막 장을 덮으면서 드는 생각이 자바 관련 추천 서적에 이 책의 이름을 올려두면 괜찮겠다 라는 것이었다. 

물론, 이 자바편 책은 기술서의 분류로 보자면 이론과 실용중에 실용에 굉장히 가깝게 닿아 있는 책이다. 따라서 이 책만 읽어서 책에 나오는 내용들에 대한 근본적인 이해를 얻기는 쉬운일이 아니다. 하지만 그 지점에 현업을 통해 다양한 상황에 대한 경험이 있는 독자들은 좀 더 큰 도움을 얻을 수 있을 것이라 생각된다. 네이버라는 비교적 큰 규모의 시스템에서 발생하는 다양한 문제점들이 자바의 특성들과 어떻게 연결되고 어떻게 해결 될 있는지 저자들의 글을 하나 하나씩 읽다보면 독자들의 경험과 책에서 읽은 내용이 융합되어 지식이나 경험을 향상 시킬 수 있는 기회가 될 수 있을 것 같다.

다만, 기술블로그에 작성된 글을 모아서 펴낸 기본적인 한계 때문인지, 구성이 체계적이지 않은 점은 책의 처음부터 끝까지를 읽고 뭔가를 얻고자 하는 독자들중 일부에게는 허전함으로 남을 수도 있을 것 같다. 마치 풀코스의 정찬을 기대했는데, 몇가지 일품요리들만 나온 격이랄까. 하지만 반대로 긴 시간 들이지 않고 핵심만 얻고자 하는 독자들에게는 장점으로 다가설 수 있는 부분으로 보인다. 특히, 4장 람다에 대한 이야기나 2부에서 쓰레드 덤프, 힙 덤프에 대한 내용, 3부 전체를 할애한 가비지 컬랙션등에 대한 내용은 앞으로 다가올 자바의 핵심, 그리고 여전한 핵심들에 대한 좋은 설명들을 제공하고 있다.

자바는 현재 다양한 곳에서 중심적인 역할을 수행하고 있다. 이는 프로그래머라면 자바를 사용하던 사용하지 않던 느끼고 있을 지점이라 생각한다. 그리고 그 다양한 역할에 따라 다양한 기술들이 만들어지고 사용되고 있는 중이다. 이 책을 통해서 그런 다양한 기술들의 기본이 되는 부분에 대한 지식과 생각들 얻을 수 있을 것으로 기대한다. 그리고 기술서로 드물게 300페이지 이내의 책이라 맘 먹고 읽으면 2~3시간 안에도 읽을 수 있다. 더불어 앞서 말한바와 같이 블로그의 글을 묶어서 펴낸 책이라는 것의 장점인 부분이 있는데, 챕터 하나 하나가 일종의 별개의 글이라 글의 순서에 구애받지 않고 읽고 싶은 글을 먼저 읽어도 전혀 문제가 없다.




요약 : 현업에서 자바를 사용하는 개발자인데, 람다나 GC에 대해서 잘 모르고 있다면 추천.

2015년 3월 30일 월요일

Kobo Aura H2O : 전자책 리더



맘에 들어서 남겨보는 후기.

최근에 Kobo에서 나온 Aura H2O라는 전자책 리더를 구입했습니다. 몇 주간 써보면서 이렇게 좋은걸 진작 쓸 것을.. 하는 생각이 들었네요.

제가 느낀 장점
- 고사양 E-Ink의 장점으로 인해 책(문서) 읽기에는 정말 좋다. (눈 피로 적음, 백라이트 채용으로 밤에 보기에도 좋음, 해상도가 높아서 작은 글씨도 잘 보임)
- Pocket 연동이 되어서 웹에서 글을 스크랩해서 읽기 좋음
- Google Play Books를 지원해서 꽤 많은 한글책을 합법적으로 읽을 수 있음
- 외국에서 구입한 EPub는 그냥 읽어지더라..(안되는 줄 알았는데..)
- Koreader라는 걸 설치하면 PDF도 잘 읽힘(그냥도 되는데 느림)
- 타블렛에 비해 베터리가 엄청 오래감
- 방수!

단점
- 리디북스가 안됨.. (결국 구글 북스로 갈아탐..)

전자책 보려는 분들에게는 강추입니다.

2015년 3월 13일 금요일

동기에게 보내는 편지 : 프로그래밍 실력을 향상 시키는 방법

2010년에 썼던 글인데, 과거글 AS의 관점에서 책을 추가하거나 제외하고, 책의 링크를 알라딘으로 수정했습니다.


작년 말인가요. 회사 동기에게 메일 한 통을 받았습니다.

언제 시간이 완전 한가해져서 남으면..
나에게 초보가 고수가 되는 S/W 관련 서적들을
급 수별로 추천 좀 해주렴..
나도 이제 책 좀 읽고 살아야게따!!ㅋㅋㅋㅋ

대충 위와 같은 내용이었는데요. 시간이 완전 한가해지는 거 기다리다가는 메일도 못 쓸 것 같아서 며칠간에 걸쳐서 답장을 작성했습니다. 제가 그 동안 읽었던 책들을 되돌아 보았는데요. 전산과를 졸업하고 개발을 직업으로 하게 된 제 처지와 같은 분들에게 도움이 된다면 좋겠습니다.

이하 답장의 내용입니다.

Machine Learning for Programming

머신러닝에 대한 세미나인데, 아래 링크에서 동영상으로 슬라이드와 함께 보실 수 있습니다. 


간단히 소개해보면 SPLASH2014라는 컨퍼런스에서 Peter Norvig이란 사람이 발표한 내용인데요.
SPLASH는 ACM 컨퍼런스중에 하나로 Systems, Programming, Languages and Applications: 
Software for Humanity 의 약자입니다. :) 대충 해석해보면 시스템, 프로그래밍, 언어 등에 대한 
컨퍼런스 정도가 되겠네요. 

궁금해서 홈페이지에 들어가봤더니, 소프트웨어의 다양한 분야들에 대해서 다루고 있는 것을 확인할 수 있었는데요.
그리고 흥미롭게도 객체지향개발 관련 컨퍼런스로 유명한 OOPSLA도 이 컨퍼런스와 함께 열리고 있는걸 발견했습니다.


발표자인 피터 노빅은 아마도 대부분 아시겠지만, 대학에서 인공지능 연구했고(이 분야의 탑중 한명이죠),
현재는 구글에서 관련 분야를 이끄는 걸로 알려져 있습니다. 탑레벨의 해커 중에는 드물게도 글도 자주 쓰고, 
발표도 많이 하시는 분이라 그런지 이번 발표 또한 영어를 잘하지 못해도 이해하는데 큰 어려움이 없는 
수준으로 잘 설명하고 있습니다.


발표는 질문을 먼저 던지고 그에 대한 자답을 하는 방식으로 진행되는데요.
아래와 같은 질문들을 던지게 되는데, 답은 강의를 통해 직접 확인해보시면 좋을 것 같습니다. :)


  • Can we learn functions from examples?
  • Can we learn parts of programs from examples?
  • Can we learn entire programs from examples?
  • Can we learn complex nontraditional programs from examples?
  • Can we learn to optimize programs?
  • Can we learn to efficiently execute declarative programs?
  • Can we learn an interpreter?
  • Can we learn a user's language?
  • Can we learn tutoring feedback from examples?


상단 링크에 있는 동영상의 강의는 30분 정도인데, 머신러닝에 대한 교양을 쌓을 수 있는 좋은 강의라 생각되니,
여유 있을 때 한번 보시면 좋을 것 같습니다.

2014년 3월 4일 화요일

리뷰 : 클린 코드 - 애자일 소프트웨어 장인 정신

예전에(아마도 군입대 전..) 사서 재밌게 읽었던 클린 코드복간되어 출간된다는 소식에 출간 되자마자 구매했던 책을 최근들어 읽어보고 있습니다.

워낙 예전에 읽었던 책이라 내용이 기억나지 않았는데. 목차를 읽어보니 저도 마땅히 그래야 된다고 생각하는 내용들로 가득차 있네요. 처음 이 책을 읽었을 때는 왜 그래야 하는지 잘 모르기도 했지만, 지금 시점에는 이유를 알고 있는만큼 목차만 봐도 머리 속에서 책의 내용들이 그려졌습니다. :)

깨끗한 코드를 위한 세부적인 실천방법이 책의 본문에 상세히 기술되어 있는데, 그에 대해서는 이 글에서 논의하는 것보다는 책을 직접 보시는게 좋을 것 같습니다.

책의 서두에 업계의 거장들이 생각하는 깨끗한 코드란 무엇인가에 대한 설명이 있는데, 각자의 내공이 느껴지는 좋은 글이라 생각되어 여기에 옮겨봅니다. 각각 짧은 글이지만 그 안에 담긴 뜻은 결코 가볍지 않네요. 잘 명심하고 이해하면 책을 읽지 않고도(!) 읽은 효과를 얻을 수 있다고 생각이 됩니다.


나는 우아하고 효율적인 코드를 좋아한다. 논리가 간단해야 버그가 숨어들지 못한다. 의존성을 최대한 줄여야 유지보수가 쉬워진다. 오류는 명백한 전략에 의거해 철저히 처리한다. 성능을 최적으로 유지해야 사람들이 원칙 없는 최적화로 코드를 망치려는 유혹에 빠지지 않는다. 깨끗한 코드는 한 가지를 제대로 한다.
비야네 스트롭스트룹 Bjarne Stroustrup - C++ 창시자

깨끗한 코드는 단순하고 직접적이다. 깨끗한 코드는 잘 쓴 문장처럼 읽힌다. 깨끗한 코드는 결코 설계자의 의도를 숨기지 않는다. 오히려 명쾌한 추상화와 단순한 제어문으로 가득하다. 
그래디 부치 Grady Booch - Object Oriented Analysis and Design with Application 저자

깨끗한 코드는 작성자가 아닌 사람도 읽기 쉽고 고치기 쉽다. 단위 테스트 케이스와 인수 테스트 케이스가 존재한다. 깨끗한 코드에는 의미 있는 이름이 붙는다. 특정 목적을 달성하는 방법은(여러 가지가 아니라) 하나만 제공한다. 의존성은 최소이며 각 의존성을 명확히 정의한다. API는 명확하며 최소로 줄였다. 언어에 따라 필요한 모든 정보를 코드만으로 명확히 표현할 수 없기 때문에 코드는 문학적으로 표현해야 마땅하다. 
데이브 토마스 Dave Thomas - OTI 창립자이자 이클립스 전략의 대부

깨끗한 코드의 특징은 많지만 그 중에서도 모두를 아우르는 특징이 하나 있다. 깨끗한 코드는 언제나 누군가 주의 깊게 짰다는 느낌을 준다. 고치려고 살펴봐도 딱히 손 댈 곳이 없다. 작성자가 이미 모든 사항을 고려했으므로. 고칠 궁리를 하다보면 언제나 제자리로 돌아온다. 그리고는 누군가 남겨준 코드, 누군가 주의 깊게 짜놓은 작품에 감사를 느낀다. 
마이클 페더스 Michael Feathers - Working Effectively with Legacy Code 저자

나는 주로 중복에 집중한다. 같은 작업을 여러 차례 반복한다면 코드가 아이디어를 제대로 표현하지 못한다는 증거다. 나는 문제의 아이디어를 찾아내 좀 더 명확하게 표현하려 애쓴다. 
론 제프리스 Ron Jeffries - Extreme Programming Installed 저자

코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다. 코드가 그 문제를 풀기 위한 언어처럼 보인다면 아름다운 코드라 불러도 되겠다. 
워드 커닝햄 - 위키 및 익스트림 프로그래밍의 창시자


Man of Month를 마치며

벌써 2020년 1월 14일이다. 19년의 마지막 달에 Man of Month라는 팀의 제도를 시작한다고 했었는데, 12월이 지나고 그 다음 달도 거의 절반이 흐른 것이다. MoM을 시작하면서 하겠다고 계획했던 것들도 실제 한 것들과 비교해보니...