전체 글 281

고차 함수로 의존성 줄이기

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

Dev 2022.09.22

이름 없는 자들의 도시

오래전에 종이책으로 사놓고 안 봤던 ‘눈뜬 자들의 도시’를 읽으려다가 이북이 나왔나 찾다가, ‘이름 없는 자들의 도시’가 이북으로 출간된 것을 보고 출간 순서를 찾아보니 번역서 출간 순서와는 다르게 이 책의 출간이 먼저라서, 도시 3부작인가 하고 구매했다. 읽으면서 ‘눈먼 자들의 도시’와는 전혀 연관이 없는데 뭘까 했더니, 이유가 있었다. 마케팅의 힘이었다. 원제는 이며, 도시 시리즈와는 전혀 관계가 없다. 책을 사서 보기 전에 약간의 정보를 찾아볼까 하는 생각이 살짝 든다. 마케팅의 일환으로 이름 없는 자들의 도시로 출판되었다. https://namu.wiki/w/주제%20사라마구#fn-4 주제 사라마구 - 나무위키 주제 사라마구는 쉼표와 마침표 이외의 문장부호를 전혀 사용하지 않는 문체로 유명하다. ..

Book Shelf 2022.09.18

물고기는 존재하지 않는다

저자가 롤 모델로 삼으려 했던 데이비드 스타 조던이라는 인물의 삶을 따라가면서 그의 삶을 조명하고 저자의 고민 그리고, 드러나는 사실과 반전이 어우러져 읽으면서 뭐지? 흐름이 뭐 이래? 하다가… 어?! 와우! 하게 되는 스릴러 느낌도 있고, 여러 가지 생각하게 하는 책이다. 목차도 추상적이라, 별다른 정보 없이 쭉 읽었고, 아무런 정보 없이 보면 더 재밌는 책이라고 생각해서 최대한 스포일러를 피해 본다. 제목에 명시적으로 적힌 물고기만 언급해보면, 분류학에서 어류가 없다고 해서 우리가 알던 물고기가 사라지는 것도 아니고 우리가 물고기라고 부르지 않을 것도 아니지만, 과학의 엄밀함에는 중요한가 보다. 하지만, 과학도 언제나 엄밀한 것은 아니니, 공룡에게 깃털도 생겼는데 장래에 분류학의 발전으로 어류가 다시..

Book Shelf 2022.09.12

명상록

마르쿠스 황제는 자신의 비망록이 세상에 공개되어 후세에 읽힐 것이라고 상상해봤을까? 책 초반에 마르쿠스 아우렐리우스가 코모두스의 아버지라는 것을 보고 영화 글래디에이터에서 봤던 노황제 그분이 생각나서 왠지 모르게 반가웠다. 170~180년 사이에 쓰였을 것이라고 하니, 이 책이 내가 봤던 고전 중에서 가장 오래된 고전이 아닐까 싶다. 책을 읽으면서 종교서를 읽는 듯한 느낌과 교양 수업으로도 만나 본 적은 없지만, 철학과 교수님에게 혼나는 기분이 살짝 들었다. 선악을 판단하지 말고 이렇게 하라, 그렇게 하지 말라 계속 혼난다. 자기 자신에게 쓴 글이 엄격하다. 우리 대부분은 자신에게 관대하지 않은가? 마르쿠스 황제는 철인이면서 득도하셨을 듯하다. ‘판단을 하지 않으면 괴로움이 사라진다.’ ’얼마나 오래 사..

Book Shelf 2022.09.05

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

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

Dev 2022.08.28

다른 의견

이런저런 비슷한 책들을 봤고 머리로 이해했다고 생각했으나, 매번 어렵다. 아니라고 생각하는 것에 동조해서 논쟁을 피하는 성격도 아니라서 의견을 개진하고 강한 저항이 등장하면 강 대 강으로 부딪쳤었다. 까칠하던 어린 시절보다는 많이 나아졌다고 자평하지만, 여전히 부드럽게 설득하지 못한다. 하여, 다시 이견 조율을 다룬 책을 또 하나 집어 들어봤다. 도서 미리 보기 기능으로 본 책의 도입부에 등장하는 ‘논쟁하는 법을 모르니 의견이 충돌하면 거기에 걸려서 앞으로 나아가지 못한다.’라는 문장이 와 닿아서 구매한 이 책은 계속 비슷한 논거가 반복되고, 심리학자분들이 참 다양한 이름 붙이기를 좋아하는 것을 다시 깨닫게 되지만, 재밌게 읽었다. 책 뒤에 요약편이 있으니 서점에선 요약편을 보고 읽을지 덮을지 판단하는 ..

Book Shelf 2022.08.23

하위 버전 CentOS Linux에 배포할 때의 glibc, libstdc++ 라이브러리 버전 문제

배경 최근에 읽은 ‘구글 엔지니어는 이렇게 일한다.’에서 컴파일러 버전업에 대한 이야기가 나와서 예전에 작업했던 GCC 컴파일러 버전업에 대한 내용을 정리해본다. 몇 년 전 새로운 팀에 합류했을 때 서비스 중인 서버군들 중에서 C++ 구현된 서버군이 GCC 4.4.7을 사용하고 있었고, 컴파일러 버전이 낮아서 모던 C++의 시작인 C++ 11를 사용할 수 없었다. GCC 4.4.7은 C++ 0x까지 지원한다. C++ 11을 사용하려면 최소한 gcc 4.7 이상이 필요하다. 버전업 타깃은 CentOS 7 Base repo에 있는 GCC 4.8.5 버전으로 맞추고 진행했었다. 작업 당시 오랜 세월의 흔적으로 개발, 배포, 서비스 환경 등 각각 OS 버전이 달랐다. OS 버전이 다르다는 것은 OS가 기본적으로..

Dev 2022.08.17

그림은 위로다 (개정판)

책을 읽고 독서 후기를 정리하다가 언젠가부터 그냥 읽기만 하고 정리를 안 했네. 올해도 벌써 8월이구나. 현재까지 20여 권을 읽었는데 이 책 후기를 적은 김에 하나씩 정리해봐야겠다. 아무튼, 동네 독서 모임의 지정 도서로 선정되어 읽은 이 책은 ‘그림은 위로다’라는 제목과 함께 표지에 ‘곁에서 친구처럼 위안이 되어주는 그림 이야기’라고 적혀있다. 평소 내 독서 취향에서 손이 가지 않았을 책이지만, 그림을 전혀 모르는 입장에서 그림에 대한 소개와 설명 등을 기대하고 읽었다. 읽으면서 이 책은 그냥 작가의 에세이인데 직업이 미술 쪽이라 그림 이야기가 부수적으로 등장하는구나 했는데, 다 읽고 보니 에세이 형식의 자기 계발서 같다. 개정판은 아직 eBook으로 출간되지 않아서 도서관에서 대출하여 읽었더니 글귀..

Book Shelf 2022.08.06

가변 Context 클래스는 신중하게 사용하자

요즘 라이브 서비스의 레거시 코드 리팩터링을 하고 있다. 흔히 가변 상태를 관리하는 Context 클래스가 레거시 코드에 있는 건 새삼스럽지 않았지만, 과도하게 사용하고 있어서 정리가 필요했다. 가변 상태 Context 사용 시 문제점 가변 상태를 가지는 Context 클래스가 2, 3개도 도 아니고 10개쯤 되면 과하다고 생각한다. 이렇게 많은 Context 클래스들이 서로 물고 물리는 종속성을 가지고 각기 다른 클래스에 넘기고, 넘겨받고, 가변 Context의 레퍼런스가 다양한 함수들로 넘겨져 전역 변수처럼 여기저기서 사용되면서 어딘가에서 A가 set을 하고 다른 곳에서는 B가 get을 하는 상황은 코드를 매우 읽기 어렵게 만들었다. 읽기 어렵다는 것은 Context를 수정할 때, 사용처를 모두 추적..

Dev 2022.04.16

리디북스와 알라딘 ebook 리더 앱의 사용기

이사할 때마다 책이 가장 큰 짐이었고, 책장에 들어간 책이 다시 나오는 일은 점점 줄었다. 몇 년 전에 종이책을 대부분 ebook 으로 교체하면서 정리하고, 새로 구매하는 책들도 종이책 대신 리디북스에 있는지 찾아보고 리디북스에 있으면 해당 ebook 을 구매해왔다. 지금 보니 리디북스의 내 계정에 소장 도서가 300 여권으로 나오는데, 구매한 책들은 기술 서적, 소설, 만화 등 다양하다. 리디북스에서만 책을 구매했던 이유는 하나였다. MacBook, iPad, iPhone 이렇게 3개의 디바이스를 사용하는 환경에서 리디북스의 ebook 리더 앱의 사용성이 당시에 나와 있던 알라딘이나 yes24 등의 ebook 리더 앱들 보다 월등히 좋았다. 여기에 Ridi Paper 디바이스를 추가하여 그동안 잘 사용..

Book Shelf 2022.01.04