Dev 90

좋은 코드, 나쁜 코드 (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

코드 복잡도 줄이기 (Cyclomatic Complexity, NPath Complexity)

2023년 8월 3일 추가: 이 내용을 포함한 카카오 테크밋에서 발표한 영상이 올라왔습니다. 이번 포스팅도 어떤 백엔드 서비스의 코드를 리팩터링한 내용을 정리하는 것으로, 이번에는 코드 복잡도 줄인 리팩터링에 대한 내용을 정리한다. 이전에 포스팅했던 '가변 Context 클래스는 신중하게 사용하자'와 '고차 함수로 의존성 줄이기'로 코드의 의존성 문제들이 많이 정리된 상태라서 복잡도 줄이기를 진행할 수 있었다. 아래는 어떤 백엔드 서비스 코드의 리팩터링 전과 후의 코드 복잡도 Cyclomatic Complexity와 NPath Complexity의 수치 변화다. 많이 줄어든 것을 볼 수 있다. 실제로 작업했던 코드를 기반으로 소개할 수는 없으니, 일반화해서 조금은 억지스러운 예제로 만들어 내용을 정리한다..

Dev 2022.12.25

소프트웨어 아키텍처 101

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

Dev 2022.11.20

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

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

Dev 2022.11.12

파이썬으로 티스토리 블로그 백업 유틸리티 만들기

배경 티스토리를 사용한 지 10년이 넘다 보니 글도 제법 쌓였고, 백업도 한번 받고 싶은데, 백업 기능이 없다.(없었다.) 백업 기능을 만들어 달라고 문의도 해봤는데, 안 만들어준다. 구글링을 해보니 티스토리 백업 유틸리티가 제법 많이 나오기는 하는 데 사용하기가 조금 애매하던 차에 이번에 고등학교 로봇동아리 학생들을 대상으로 '개발자에 대한 궁금증'에 대한 강연을 할 일이 생겼는데, 길지 않은 코드로 동작하고 실제 용도가 있는 예제로 보여줄 겸 해서 티스토리가 제공하는 Open API로 간단히 구현해보기로 했다. 다 만들고 보니 백업 기능이 생겼네...? 티스토리 관리 메뉴에 '블로그 백업'이 생겼다. 사용해보니 압축 파일로 잘 백업해준다. 다만, 어떤 게시글은 파일명이 게시물 제목으로 잘 되어 있고,..

Dev 2022.11.02

안드로이드 뜻밖의 역사

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

Dev 2022.10.08

고차 함수로 의존성 줄이기

2023년 8월 3일 추가: 이 내용을 포함한 카카오 테크밋에서 발표한 영상이 올라왔습니다. 스프링을 사용한 프로젝트에서 종종 보이는 어노테이션에 사용한 의존성 주입의 남용과 오랜 세월의 흐름으로 의도치 않게 서비스 간의 의존성 그래프가 복잡하게 강결합으로 묶이면서 코드를 읽기도 어렵고 단위 테스트를 구성하기도 어려운 상황이 생긴다. 아래는 어떤 백엔드 서비스의 의존성 그래프다. 순환 종속성이 포함된 복잡한 왼쪽의 의존성 그래프를 오른쪽의 단순한 의존성 그래프로 리팩터링하여 라이브 서비스에 반영하였다. 이번 글은 오랜 세월의 흐름으로 서비스 의존성 그래프가 복잡해진 라이브 서비스를 리팩터링한 내용을 일반화하여 작은 예제로 만들어서 정리한다. 이 글을 읽는데 필요한 배경지식으로 자바의 함수형 인터페이스를 ..

Dev 2022.09.22

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

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

Dev 2022.08.28
반응형