반응형

기술서 16

좋은 코드, 나쁜 코드 (Good Code, Bad Code)

2023년 카카오 신입 공채 기술 온보딩에서 코드 리뷰어로 활동할 때 참고하려고 구매했던 도서다. 나름 신간이면서 표지가 마음에 들기도 했고, 코드 품질은 언제나 관심이 있는 주제다. 읽어보니 책의 내용도 내용이지만, 적절한 컬러 사용과 보기 편한 편집으로 가독성도 매우 좋다. 이 책의 특이사항으로는 일단 예제 구성하는 데 사용한 언어에 있다. 보통 하나의 언어를 정해서 실행할 수 있는 예제를 구현하는 다른 책들과 달리 의사코드를 사용하여 예제를 구성하고 있다. 저자가 자기 생각을 전개하는 방식도 책의 제목과 순서는 배치 순서는 다르지만, 저자가 생각하기에 나쁜 코드와 좋은 코드를 대비시켜서 보여주고 왜 나쁘고 좋은지를 친절하게 설명해준다. 그리고, 모든 상황에 맞는 정답은 없다는 것을 계속 상기시켜준다..

Dev 2023.03.04

도메인 주도 설계

꽤 오래전에 읽은 책이 eBook으로 새로 출간되었다. 2011년에 번역서가 나왔었는데, 2023년에 eBook으로 출간되었다. 꽤 어렵게 읽었던 기억이 있어서 다시 읽어보려고 구매했다. 개정판인가 기대를 살짝 했었는데 개정판은 아니다. 출간된 지 10년이 훌쩍 넘은 기술 서적이지만 지금 읽어도 좋은 책이다. 도메인 주도 설계의 목표는 기술보다는 도메인에 대한 모델에 집중해 더 나은 소프트웨어를 만들어내는 것이다. 이 책의 목표를 간결하게 보여주는 멋진 말이다. 상호의존성은 모델과 설계를 이해하기 어렵게 만든다. 또한 테스트를 어렵게 만들고 유지보수성을 떨어뜨린다. 그리고 쉽게 축적되는 경향이 있다. ... 객체 개념을 구성하는 데 필수적이라는 사실이 증명되기 전까지는 모든 의존성을 검토해야 한다. 이러..

Dev 2023.02.05

도메인 주도 개발 시작하기

개인적으로 새로운 주제에 대한 책을 보는 것도 좋아하지만, 한번 봤던 주제, 이미 사용하면서 조금은 알고 있다고 생각하는 주제에 대한 책도 다시 찾아서 읽어보는 것을 좋아하는데, 다시 보면 예전에 볼 때는 놓쳤던 것, 이해를 못하고 넘어갔던 것, 시간이 지나면서 잊었던 것들을 재확인할 수 있다. 오래전에 '도메인 주도 설계'를 봤을 때는 어렵게 읽은 기억이 있는데, 이 책은 주요 내용만 추려서 더 쉽게 풀어 쓰였고, 예제 코드들도 있어서 편하게 읽었다. 다만, 중반부의 리포지터리 구현 쪽 예제가 스프링과 JPA에 치중된 점은 아쉽지만, 이 점이 매우 마음에 드는 분도 있을 것이다. 10년쯤 전에 참여했던 프로젝트의 설계에 도메인과 I/O가 매우 잘 분리되어 있었고, 덕분에 많은 공부가 되었다. 하지만, ..

Dev 2023.01.09

소프트웨어 아키텍처 101

병특시절에 개발했던 3티어 구조의 서버부터 세월을 그대로 맞으면서 겪었던 아키텍처들이 책의 파트 2에 하나씩 소개되어 있다. 코드는 거의 없고, 각 아키텍처가 등장한 배경과 용도 그리고 장단점을 거시적으로 잘 설명해준다. 깊이 내려가지는 않는다 싶었는데, 아직 읽어보지 않아서 모르겠지만, 최근에 출간된 '소프트웨어 아키텍처 The Hard Parts'라고 심화편에서 더 깊이 설명하는가 보다. 책의 후반부에도 재미난 내용이 많다. 덕분에, '체크! 체크리스트' 책을 읽어보고 싶어졌다. 아래에서 강조하는 것처럼, 트레이드 오프에 대한 설명이 많이 나온다. 은탄환은 없다. 아키텍처 특성을 선택하는 문제에 있어서 정답은 없으며 오직 (마크가 한 유명한 말처럼) 잘못된 선택만 있을 뿐이라는 점을 명심하세요.아키텍..

Dev 2022.11.20

자바와 JUnit을 활용한 실용주의 단위 테스트

현재 팀에서 관리는 레거시 코드는 높은 결합도와 상호 의존성을 가진 구조로 단위 테스트를 구성할 수 있는 상황이 아니다 보니, 단위 테스트보다 통합 테스트의 비중이 압도적으로 높다. 올해 꽤 많은 리팩터링으로 코드의 결합도를 낮추었고 의존성도 많이 끊었고, 일반화할 수 있는 내용은 정리해서 포스팅했었다. 여러분의 삶은 테스트 친화적인 설계를 채택할수록 편해지고 설계 자체도 더 좋아집니다. 알라딘 eBook (제프 랭어.앤디 헌트. 데이브 토머스 지음, 유동환 옮김) 중에서 이제 단위 테스트 추가를 시도해볼 생각에 Spock를 검토했으나 현재 팀은 JUnit 선호도가 높고, 몇 개 없지만 JUnit으로 약간의 단위 테스트가 이미 구성되어 있다. 개인적으로 JVM의 단위 테스트 프레임워크로 JUnit을 선호..

Dev 2022.11.12

안드로이드 뜻밖의 역사

다른 책을 볼 예정이었는데, 인터넷에 돌아다니는 안드로이드의 얼굴 짤이 웃겨서 이 책을 먼저 사서 봤다. 새로운 것들을 많이 알게 되었다. 안드로이드를 카메라 OS로 계획했었는지 몰랐고, 매우 작은 스타트업이었는지도 처음 알았다. 우리가 후식 이름을 사용한 이유는 후식은 상표가 될 수 없기 때문이다. 이런 현실적인 이유가 있었다니, 몰랐다. 개발자란 코드와 노는 것인가, 'BeOS를 뜯어고치며 놀았다.'라니, 멋지다. 나는 만화책 보고 게임을 하면서 놀았는데. 힙톱이라는 스마트 폰이 있었구나, 요즘은 랩톱이라는 말도 잘 사용하지 않지만, 힙톱 잘 어울리고 재밌는 이름이다. 언젠가 들었던 안드로이드와 삼성의 일화도 소개되어 있고, 구글이 안드로이드라는 스타트업을 인수한 일화도 자세히 소개되어 있다. 패든이..

Dev 2022.10.08

구글 엔지니어는 이렇게 일한다

책의 도입부가 인상적인데 ‘시간 위를 걷는 프로그래밍’이라는 멋진 말과 함께 소프트웨어 엔지니어링을 ‘흐르는 시간 위에서 순간순간의 프로그래밍을 모두 합산한 것이다’라고 이야기한다. 시간의 무서움에 대한 이야기와 하이럼의 법칙 이야기가 계속된다. 개발해오면서 여러 개발 조직에서 봤던 패턴의 상당수는 ‘일단’ 구현하고, ‘나중에’ 수정하자. ‘일단’ 돌아가니, ‘나중에’ 개선하자. 등이 누적된 세월의 흔적들이 유령의 묘지와 더불어 매우 많다. 코드는 자산이 아니라 부채이므로, 불필요한 코드를 줄여 관리 비용을 줄여야 한다. 그리고, 코드의 일관성은 매우 중요하다. 매우 공감한다. 지금 몸담고 있는 팀에서도 내가 하는 작업의 상당 부분은 방치된 레거시를 정리하고 구조를 리팩토링하면서 그동안 쌓여있던 기술 부..

Dev 2022.08.28

모던 C++로 배우는 함수형 프로그래밍

제목처럼 모던 C++로 함수형 프로그래밍을 할 수 있도록 안내하는 책이라 C++을 알고 있다는 전제하에 설명하고 있다. 함수형 프로그래밍에 매우 자주 등장하는 동작들 filter, map, fold 가 C++ 11에 추가된 기능 중 어떤 것과 매칭이 되는지 설명하고 고차 함수와 일급 객체의 차이도 설명한다. 아직 C++이 지원하지 않는 지연 평가는 직접 구현으로 처리하는 방법을 안내한다. 템플릿을 이용한 메타 프로그래밍이 컴파일 타임에 코드를 생성하니 불변이라는 이유로 함수형 프로그래밍과 연관시키지만, 딱히 와닿지는 않는다. 동시성 챕터는 뻔한 스레드 기초만 좀 언급하고 넘어간다. 함수형이 다시 수면위로 올라온 가장 큰 이유 중 하나가 상태를 갖지 않는 함수와 불변 객체들을 활용한 lock free 동시..

Dev 2019.09.24

앤서블 철저 입문

챕터 5까지 자세한 설명과 따라하기식의 예제 구성이 좋다. 다만, 앤서블을 이용한 서버 재부팅 처리 예제에 포트가 잘못 설정되어 있어서 삽질하기에 딱 좋다. 책의 예제가 틀리게 들어가 있는 것은 에러를 찾으며 익숙해지라는 큰 그림일 것이다. 프로그래밍 서적에서도 컴파일이 안 되거나 런타임 에러가 숨어있는 예제는 독자의 실력을 키워주지 않았던가. 챕터 6 오픈스택에서 앤서블 활용에 들어가면 오픈스택 환경 설정에 대한 설명이 전혀 없어 당황스럽다. 기본적인 오픈스택 환경을 구성할 수 없다면 이 챕터는 무용지물이다. 챕터 6의 예제를 실행하기 위한 환경을 어떻게 구성해야 하는지 기본적인 안내는 있었어야 한다. 웃긴 건 챕터 7, 8 AWS과 애저 환경에서 앤서블을 사용하는 챕터에서는 AWS와 애저의 기본적인 ..

Dev 2019.08.30

프로그래밍 루아 3판

재미난 스크립트 언어가 있었네. 게임 서버 개발할 때 게임 이벤트용으로 사용한다고 들었었는데 직접 사용해 본 적은 없었다. Lua Struct를 json 이나 yml 처럼 설정 파일 용도로 사용하면서 추가로 제어 구조를 넣을 수도 있고, 인터페이스만 열어두면 빌드 타임 없이 Lua를 통한 코드 인젝션도 가능하고 재밌는 언어다. C, Go, Java 등의 언어와 손쉽게 연동이 되니 보조 언어로 사용하기 좋다. 다른 Lua 책을 본 것은 아닌데 내 사용 범위에서는 이 책 하나로 충분했다. 두꺼운 책이 아님에도 문법만 다루는 것이 아니라 언어의 세부사항과 주의 사항을 모두 다룬다. #독서 #개발서적 #추천도서 #루아 #프로그래밍루아 #lua 알라딘 : 프로그래밍 루아 3판 프로그래밍 루아 by 호베르토 이에루..

Dev 2019.08.21
반응형